![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Полупрозрачное окно [D5, Win2k]
UNIVERSAL © (2004-02-05 17:03:00)Здравствуйте , господа. хотелось бы сделать своё окно полупрозрачным. Нашёл как, но у меня почему-то не работает. Вот код:
....
const
WS_EX_LAYERED=$80000;
LWA_COLORKEY = $1;
LWA_ALPHA =$2;
....
function SetLayeredWindowAttributes(Handle:HWND ;crKey:COLORREF;bAlpha:byte;dwFlags:DWORD):BOOL;stdcall; external user32 name 'SetLayeredWindowAttributes';
....
Application.CreateForm(TMainForm, MainForm);
l:=GetWindowLong(MainForm.Handle, GWL_EXSTYLE);
l:=l or WS_EX_LAYERED;
SetWindowLong(Mainform.Handle, l, GWL_EXSTYLE);
x:=0;
SetLayeredWindowAttributes(MainForm.Handle , 0, 102, LWA_ALPHA);
....
Хотелось бы узнать что не так?
UNIVERSAL (2004-02-06 14:19:00) [1]Ну что хотите посмеяться? Пжалста
SetWindowLong(Mainform.Handle, l, GWL_EXSTYLE);
Ничё не замечаете? вот и я не замечал :))))) Блин уже хотел в дурку ехать. :)))))))) Смотрим следующий рисунок:
Это было:
SetWindowLong(Mainform.Handle, l, GWL_EXSTYLE);
А так надо:
SetWindowLong(Mainform.Handle, GWL_EXSTYLE,l);
А теперь?
Вот. у меня теперь дырка в столе, об который я головой начал биться и работающая прога. всем шпасибо.
MBo (2004-02-06 12:48:00) [2]честным образом - никак.
С недостатками и тормозами - см. статью А.Григорьева на delphi.vitpc.com
nexxiss (2004-02-06 12:37:00) [3]А как это реализовать в Win9x ? Хотел давно это узнать. Может кто какую ссылочку посоветовать или просто советом поделиться, хотя бы идею подкинуть.
UNIVERSAL (2004-02-06 12:01:00) [4]2MBoЯ просто в недоумении! У меня работает этот код в чистом приложении. буду находить отличия в своём. А насчёт
возможности работы программы под Win9x это само собой, просто меня беспокоило, то что эта ф-ия не работает,а не совместимость версий.
Всем спасибо
UNIVERSAL (2004-02-06 11:55:00) [5]2kostikда делфи у меня 5-ые. нет там алфа бленда.
MBo ©Нашёл пример на VB. Работает блин! щас попробую запустить этот код в новом чистом приложении на D5.
kostik (2004-02-06 11:33:00) [6]В Win2000 и WinXp в свойствах формы AlphaBlend присвоить значение true, а затем свойству AlphaBlendValue присвоить значение меньше 255.
MBo (2004-02-06 09:28:00) [7]Все работает.
function SetLayeredWindowAttributes(Handle:HWND;crKey:COLORREF;
bAlpha:byte;dwFlags:DWORD):BOOL;stdcall; external user32 name 'SetLayeredWindowAttributes';
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, 100, LWA_ALPHA);
end;
P.S. Следует учесть возможность работы программы под Win9x и пытыться загружать функцию из user32 динамически, при ошибке соответственно не вызывать ее.
UNIVERSAL (2004-02-06 09:11:00) [8]2DVMЕсли я не ошибаюсь Win2k это win2000. В вопросе я это указал.
MBoПрав этой ф-ии нет в Делфи 5. И в принципе я это и зпихивал в OnCreate формы, но всё равно не работает иногда даже ошибку генерирует, типа к области памяти обратилась в которой ничё нет и т.д.
За советы спасибо, но к сожалению они мне не очень помогли. Ребята, если есть ещё что-то буду очень благодарен. У моего приятеля есть это на VB, но к сожалению он уехал , а найти где это я не могу. Подскажите ещё что нить плз.
Profi (2004-02-06 01:54:00) [9]По WinXP работает и встроенная функция Delphi: AlphaBlend:=true, а AlphaBlendValue - степень прозрачности!
MBo (2004-02-05 18:03:00) [10]>DVM
>Это все лишнее и декларировать отдельно это не надо.
В Дельфи 5 эта функция не объявлена в windows.pas
DVM (2004-02-05 18:01:00) [11]Во-первых, это будет работать только в Win2000 и выше.
Во вторых,
> const
> WS_EX_LAYERED=$80000;
> LWA_COLORKEY = $1;
> LWA_ALPHA =$2;
>
> ....
> function SetLayeredWindowAttributes(Handle:HWND ;crKey:COLORREF;bAlpha:byte;dwFlags:DWORD):BOOL;stdcall;
> external user32 name 'SetLayeredWindowAttributes';
>
Это все лишнее и декларировать отдельно это не надо. Это в VisualBasic так пишут.
В-третьих,
> l:=GetWindowLong(Handle, GWL_EXSTYLE);
> l:=l or WS_EX_LAYERED;
> SetWindowLong(Handle, l, GWL_EXSTYLE);
> SetLayeredWindowAttributes(Handle, 0, 200,
> LWA_ALPHA);
> ....
Все это лучше запихнуть в OnCreate формы.