Прозрачность
У меня возник такой вопрос:
Можно ли сделать форму прозрачной зная только её Handle???
Заранее благодарю!
Доброго времени суток!
У меня возник такой вопрос:
Можно ли сделать форму прозрачной зная только её Handle???
Заранее благодарю!
Конечно, но только под win2k/winxp.
См. в MSDE SetLayeredWindowAttributes.
В Delphi эта функция не импортируется, тебе придется самому ее описать как External.
Конечно, но только под win2k/winxp.
См. в MSDE SetLayeredWindowAttributes.
В Delphi эта функция не импортируется, тебе придется самому ее описать как External.
А если ALPHABlend равен False???
А если ALPHABlend равен False???
Ну и ничего страшного - ты попробуй!
Const
LWA_COLORKEY = $00000001;
LWA_ALPHA = $00000002;
WS_EX_LAYERED = $00080000;
Function SetLayeredWindowAttributes(hwnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): BOOL; Stdcall; External 'User32.dll';
Procedure TForm1.Button1Click(Sender: TObject);
Begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) Or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA);
End;
Ну и ничего страшного - ты попробуй!
Const
LWA_COLORKEY = $00000001;
LWA_ALPHA = $00000002;
WS_EX_LAYERED = $00080000;
Function SetLayeredWindowAttributes(hwnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): BOOL; Stdcall; External 'User32.dll';
Procedure TForm1.Button1Click(Sender: TObject);
Begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) Or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA);
End;
Спасибо AviDen!!!:) Работает на УРА!!!:)
Спасибо AviDen!!!:) Работает на УРА!!!:)
Всегда пожалуйста. Только запустить такую прилогу на ОС ниже, чем Win2K не получится - будет ошибка при загрузке, что-то типа "не найдена функция SetLayeredWindowAttributes в библиотеке User32.dll".
Если все же надо - то не импортируй функцию жестко (External), а обьяви переменную процедурного типа (точно такую же, как в примере) и после старта проги инициализируй ее адресом функции, если она доступна. Если нет - ничего не делай.
Адрес получить легко:
h:= LoadLibrary('user32.dll');
addr:= GetProcAddress (h, 'SetLayeredWindowAttributes');