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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 1.232 c
1-1080202303
MakNik
2004-03-25 11:11
2004.04.11
Декомпиляция проекта


3-1079290162
Zilog
2004-03-14 21:49
2004.04.11
Работа с данными из базы данных!


3-1081428440
Mishenka
2004-04-08 16:47
2004.04.11
Поле типа Memo?


6-1075625924
hirlik
2004-02-01 11:58
2004.04.11
мониторинг порта


11-1059679855
Dimaxx
2003-07-31 23:30
2004.04.11
Владимиру Кладову...