Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Полупрозрачное окно [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 формы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо