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

Вниз

Тень от формы   Найти похожие ветки 

 
Степан   (2007-02-26 17:37) [0]

Windows 2000/XP способны создавать тени от окон. Я делал окно на API и полностью убедился, что это работает вот таким образом:
 
 ...
 // Параметры оконного класса и окна //
 with WndClassParams do begin
   Style := CS_HREDRAW or CS_VREDRAW or CS_DROPSHADOW;
   BGIcon := BIGIcon;
   SMIcon := SMLIcon;
   Cursor := LoadCursor(0, IDC_ARROW);
   Background := BKGBrush;
   MenuName := Nil;
 end;
 with WndParams do begin
   Style := WS_BORDER or WS_CAPTION; // Пока пусть будет "нормальным" окном
   Caption := "QStar";
   Width := QStarSettings.QBtnsParams.Width + QStarSettings.QBtnsParams.HorDist * 2;
   Height := (QStarSettings.QBtnsParams.Height * QStarSettings.QBtnsParams.Count) +
     (QStarSettings.QBtnsParams.VerDist * (QStarSettings.QBtnsParams.Count + 1)) + 15 - 1;
   Left := GetSystemMetrics(SM_CXSCREEN) - Width - 30;
   Top := 30;
   Menu := 0;
 end;
 ...
   if Handle <> 0 then begin // Если окно успешно создано, то ...
     // Убираем заголовок и рамку (not WS_CAPTION и not WS_BORDER), окно не
     // появляется в TaskBar"е и по Alt+Tab (WS_EX_TOOLWINDOW), даем окну
     // возможность делаться полупрозрачным (WS_EX_LAYERED) //
     SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and
       ((not WS_CAPTION) and (not WS_BORDER)));
     SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
       WS_EX_TOOLWINDOW);
     SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
       WS_EX_LAYERED);
 ...


Решил попробовать реализовать это на формах в Delphi. Сделал так:

...
procedure TParamsInfoForm.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WindowClass.style := Params.WindowClass.style or CS_DROPSHADOW;
end;
...
 Application.CreateForm(TParamsInfoForm, ParamsInfoForm);
 SetWindowLong(ParamsInfoForm.Handle, GWL_EXSTYLE,
   GetWindowLong(ParamsInfoForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
...


Но ничего не получается. При отображении окна, получается, что оно как-будто бы "невидимое", т.е. фактически на экране не появляется, но снятие фокуса с главного окна происходит. Что не правильно, подскажите.


 
DVM ©   (2007-02-26 17:47) [1]

procedure TSplashForm.CreateParams(var Params: TCreateParams);
const
 CS_DROPSHADOW = $00020000;
begin
 inherited;
 if GetOSVersion >= OsWinXP then
   Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;

В Win2000 данный код не работает - программа вообще не запускается или вылетает с ошибкой.


 
Степан   (2007-02-26 18:18) [2]

> [1] DVM ©   (26.02.07 17:47)

Не работает... даже под XP.


 
Amoeba ©   (2007-02-26 21:33) [3]

Господа, нам бы ваши проблемы.


 
RASkov   (2007-02-26 22:05) [4]

Тут недавно был уже такой вопрос.
procedure TForm1.FormCreate(Sender: TObject);
const CS_DROPSHADOW = $00020000;
begin
 SetClassLong(Handle, GCL_STYLE, GetWindowLong(Handle, GCL_STYLE) or CS_DROPSHADOW);
end;



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.068 c
3-1170747668
RomanH
2007-02-06 10:41
2007.04.22
SQL-запрос


15-1175120302
хмм
2007-03-29 02:18
2007.04.22
Кто поёт песню рыбы-пилы в мультике?


6-1161955996
Free_Breeze
2006-10-27 17:33
2007.04.22
Вопрос по фреймам


2-1175423128
I-New
2007-04-01 14:25
2007.04.22
Помогите написать плиз


11-1155836244
VoofT
2006-08-17 21:37
2007.04.22
Использование GRushControls с mmsystem