Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.042 c
1-1082201734
тракторист
2004-04-17 15:35
2004.04.11
Помогите с FastReport


3-1081686065
kaif
2004-04-11 16:21
2004.04.11
Уникальность Case Insensitive


3-1079523655
ligor
2004-03-17 14:40
2004.04.11
подключение к DB2 через DBExpress


3-1079446895
Karlson
2004-03-16 17:21
2004.04.11
Работа с юзерами


7-1074236735
BalandovAP
2004-01-16 10:05
2004.04.11
работа с прокси





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский