Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Полупрозрачность   Найти похожие ветки 

 
EK   (2003-04-26 22:08) [0]

Очень нужно заставить компонент быть полупролзрачным.
например (мне нужно), TMemo.
Кто знает?
Заранее спасибо, а то в форуме по медиа никто не знает, вроде...


 
Yanis ©   (2003-04-26 22:51) [1]

Какой у тебя Delphi, если 7 или у друзей стоит, то посмотри примерчик, приблизительно по такому адресу:
D:\Program Files\Borland\Delphi7\Demos\ActionBands\AlphaBlendMenus


 
mike.dld ©   (2003-04-26 23:37) [2]

Есть такая функция (в модуле Windows):


SetLayeredWindowAttributes(hWnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD);


только в хэлпе про неё ничего не написано. Да, вообщем-то, и так всё понятно.


 
Yanis ©   (2003-04-26 23:59) [3]

Че то неработает!


 
EK   (2003-04-27 00:00) [4]

Щас попробую - скажу.


 
mike.dld ©   (2003-04-27 00:13) [5]


procedure SetAlphaBlend(Wnd: HWND; const Value: Integer);
const
LWA_COLORKEY=$00000001;
LWA_ALPHA=$00000002;
ULW_COLORKEY=$00000001;
ULW_ALPHA=$00000002;
ULW_OPAQUE=$00000004;
WS_EX_LAYERED=$00080000;
type
TSetLayeredWindowAttributes=
function( hwnd: Integer; crKey: TColor; bAlpha: Byte; dwFlags: DWORD )
: Boolean; stdcall;
var
SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
User32: THandle;
dw: DWORD;
begin
if Value = fAlphaBlend then Exit;
fAlphaBlend := Value;
User32 := GetModuleHandle( "User32" );
SetLayeredWindowAttributes := GetProcAddress( User32,
"SetLayeredWindowAttributes" );
if Assigned( SetLayeredWindowAttributes ) then
begin
dw := GetWindowLong( Wnd, GWL_EXSTYLE );
if Byte( Value ) < 255 then
begin
SetWindowLong( Wnd, GWL_EXSTYLE, dw or WS_EX_LAYERED );
SetLayeredWindowAttributes( Wnd, 0, Value and $FF, LWA_ALPHA);
end
else
SetWindowLong( Wnd, GWL_EXSTYLE, dw and not WS_EX_LAYERED );
end;
end;


Это немного модифицированная процедура из KOL


 
EK   (2003-04-27 00:18) [6]

1)
то mike.did и вообще народ!
mike.did, ты, видать, дело говоришь, но у меня БЕДА:
SetLayeredWindowAttributes выглядит довольно перспективно,но
просит "USER32.DLL". Если он небольшой, очень прошу, скиньте,а?
ведь наверняка штука нужная!

сюда: vgekata@mail.ru

2)Yanis и др.:
2.1)А почему не работает?
2.2)Насчет дельфей. У меня Д6.
Чтобы не скинули все это в "потрепаться" ответтье ТОЛЬКО на 2 маленьких вопроса:
2.2.1)Не будет ли у меня проблем с импортами в D7 из В7?
2.2.2)AlphaBlendMenus - это то, что нужно, ведь так?


 
EK   (2003-04-27 00:30) [7]

Ошибка:
2.2.2)D7/D6.


 
mike.dld ©   (2003-04-27 00:38) [8]

Удивлен, почему у тебя нет user32.dll, посмотри в $WinDir$\system или $WinDir$\system32, если нет, тогда скажи, какая у тебя версия, не все же скидывать.


 
Shurik   (2003-04-27 01:02) [9]

Долго смеялся по поводу отсутствия User32.dll. А как ОС-то работает?


 
EK   (2003-04-27 01:16) [10]

Да...с User32.dll - это я маху дал. ОС работает. Нашел его. Просто там в другом проблема была.
У меня, наверное, последний небольшой вопрос к mike.did:
в SetAlphaBlend:
переменная fAlphaBlend ни где не объявлена.
Глобальная? Тогда где объявлена глобальная? У меня нет такой.
Если локальная, то нафига она нужна в процедуре?
Закомментировал 2 первые строчки с fAlphaBlend - прога работает, но ничего не меняется.
Может, я не то передаю:
procedure ...ButtonClick(Sender:TObject)
begin
SetAlphaBlend(Memo1.Handle, 128);
...
Просто, в этой области я весьма не силен...



 
mike.dld ©   (2003-04-27 01:17) [11]

Вот ещё, только что откопал на MSDN. Можно, наверное, использовать при отрисовке.


The AlphaBlend function displays bitmaps that have transparent or semitransparent pixels.

BOOL AlphaBlend(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of upper-left corner
int nYOriginDest, // y-coord of upper-left corner
int nWidthDest, // destination width
int nHeightDest, // destination height
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of upper-left corner
int nYOriginSrc, // y-coord of upper-left corner
int nWidthSrc, // source width
int nHeightSrc, // source height
BLENDFUNCTION blendFunction // alpha-blending function
);
Parameter
hdcDest
[in] Handle to the destination device context.
nXOriginDest
[in] Specifies the x-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nYOriginDest
[in] Specifies the y-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nWidthDest
[in] Specifies the width, in logical units, of the destination rectangle.
nHeightDest
[in] Specifies the height, in logical units, of the destination rectangle.
hdcSrc
[in] Handle to the source device context.
nXOriginSrc
[in] Specifies the x-coordinate, in logical units, of the upper-left corner of the source rectangle.
nYOriginSrc
[in] Specifies the y-coordinate, in logical units, of the upper-left corner of the source rectangle.
nWidthSrc
[in] Specifies the width, in logical units, of the source rectangle.
nHeightSrc
[in] Specifies the height, in logical units, of the source rectangle.
blendFunction
[in] Specifies the alpha-blending function for source and destination bitmaps, a global alpha value to be applied to the entire source bitmap, and format information for the source bitmap. The source and destination blend functions are currently limited to AC_SRC_OVER. See the BLENDFUNCTION and EMRALPHABLEND structures.


 
mike.dld ©   (2003-04-27 01:19) [12]

fAlphaBlend там не надо. Но вот что: SetLayeredWindowAttributes позволяет изменить степень прозрачности только для главного окна


 
mike.dld ©   (2003-04-27 01:33) [13]

Например, для DWORD:


var i,j: DWORD;
key: HKEY;
...
i := FunctionName(Param1,...)
...
RegOpenKeyEx(HKEY_CURRENT_USER,"Software\Program",0,KEY_WRITE,key);
RegSetValueEx(key,"Param_To_Set",nil,REG_DWORD,@i,@j);
RegCloseKey(key);
...


 
mike.dld ©   (2003-04-27 01:34) [14]

Извините, не туда написал :)


 
Avenger [NhT] ©   (2003-04-27 13:33) [15]

SetLayeredWindowAttributes есть тока в НТ/2к/хр поэтому
чтоб прога работала в 9х грузи процу через LoadLibrary!


 
Illusion ©   (2003-04-27 14:14) [16]

AlphaBlend вообще не для этого! Она может изменять альфа состовляющую для любого DC! В том числе (кстати) и для окон который мутят при помощи wglCreateContext (типа OpenGL в полупрозрачном окне). А чтобы юзаели его к окнам... Да, можно получить контекст окна... Но что-то я никогда н видел...



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
3-83982
Ренат
2003-05-30 08:29
2003.06.26
Некорректная запись в базе


1-84237
Shirson
2003-06-11 14:38
2003.06.26
Запуск другой программы и ожидаение её завершения.


1-84114
Rafik
2003-06-10 15:55
2003.06.26
Можно ли распечатать содержимое TreeView1?


1-84113
Vital
2003-06-10 18:49
2003.06.26
Вопрос по QuickReport (вопрос новичка)


4-84836
Akvilon
2003-04-24 11:45
2003.06.26
уникальность окна, в чем?