Главная страница
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.041 c
1-1172653682
Alexander_K
2007-02-28 12:08
2007.04.22
Borland Developer Studio 2006 и MapX


15-1175081770
Юрий
2007-03-28 15:36
2007.04.22
Вложенные запросы SQL


2-1175095227
MaLoY
2007-03-28 19:20
2007.04.22
Помогите с задачкой


3-1170510508
DmitrichJ
2007-02-03 16:48
2007.04.22
Подключение к БД на masterhost.ru? Возможно ли?


2-1175512529
Dmitry_177
2007-04-02 15:15
2007.04.22
отобразить все файлы находящиеся в папке