Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.029 c
11-1060756713
AMS
2003-08-13 10:38
2004.04.11
Ошибка 255


6-1076327005
Роман
2004-02-09 14:43
2004.04.11
POP3 - прикреплённые файлы


8-1076255934
rentgen
2004-02-08 18:58
2004.04.11
Удалить пиксель?


1-1082361797
TransparentGhost
2004-04-19 12:03
2004.04.11
Определение позиции тхт курсора в Memo


7-1075519880
Прямой
2004-01-31 06:31
2004.04.11
Как прочитать сектор ?




   Наверх