Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизПолупрозрачное окно Найти похожие ветки
← →
UNIVERSAL (2004-02-05 17:03) [0]Здравствуйте , господа. хотелось бы сделать своё окно полупрозрачным. Нашёл как, но у меня почему-то не работает. Вот код:
....
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);
....
Хотелось бы узнать что не так?
← →
DVM © (2004-02-05 18:01) [1]Во-первых, это будет работать только в 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 формы.
← →
MBo © (2004-02-05 18:03) [2]>DVM
>Это все лишнее и декларировать отдельно это не надо.
В Дельфи 5 эта функция не объявлена в windows.pas
← →
Profi © (2004-02-06 01:54) [3]По WinXP работает и встроенная функция Delphi: AlphaBlend:=true, а AlphaBlendValue - степень прозрачности!
← →
UNIVERSAL (2004-02-06 09:11) [4]2DVM Если я не ошибаюсь Win2k это win2000. В вопросе я это указал.
MBo Прав этой ф-ии нет в Делфи 5. И в принципе я это и зпихивал в OnCreate формы, но всё равно не работает иногда даже ошибку генерирует, типа к области памяти обратилась в которой ничё нет и т.д.
За советы спасибо, но к сожалению они мне не очень помогли. Ребята, если есть ещё что-то буду очень благодарен. У моего приятеля есть это на VB, но к сожалению он уехал , а найти где это я не могу. Подскажите ещё что нить плз.
← →
MBo © (2004-02-06 09:28) [5]Все работает.
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 динамически, при ошибке соответственно не вызывать ее.
← →
kostik (2004-02-06 11:33) [6]В Win2000 и WinXp в свойствах формы AlphaBlend присвоить значение true, а затем свойству AlphaBlendValue присвоить значение меньше 255.
← →
UNIVERSAL (2004-02-06 11:55) [7]2kostik да делфи у меня 5-ые. нет там алфа бленда.
MBo © Нашёл пример на VB. Работает блин! щас попробую запустить этот код в новом чистом приложении на D5.
← →
UNIVERSAL (2004-02-06 12:01) [8]2MBoЯ просто в недоумении! У меня работает этот код в чистом приложении. буду находить отличия в своём. А насчёт
возможности работы программы под Win9x это само собой, просто меня беспокоило, то что эта ф-ия не работает,а не совместимость версий.
Всем спасибо
← →
nexxiss © (2004-02-06 12:37) [9]А как это реализовать в Win9x ? Хотел давно это узнать. Может кто какую ссылочку посоветовать или просто советом поделиться, хотя бы идею подкинуть.
← →
MBo © (2004-02-06 12:48) [10]честным образом - никак.
С недостатками и тормозами - см. статью А.Григорьева на delphi.vitpc.com
← →
UNIVERSAL (2004-02-06 14:19) [11]Ну что хотите посмеяться? Пжалста
SetWindowLong(Mainform.Handle, l, GWL_EXSTYLE);
Ничё не замечаете? вот и я не замечал :))))) Блин уже хотел в дурку ехать. :)))))))) Смотрим следующий рисунок:
Это было:
SetWindowLong(Mainform.Handle, l, GWL_EXSTYLE);
А так надо:
SetWindowLong(Mainform.Handle, GWL_EXSTYLE,l);
А теперь?
Вот. у меня теперь дырка в столе, об который я головой начал биться и работающая прога. всем шпасибо.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.057 c