Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
Степан   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.043 c
15-1175050769
Slider007
2007-03-28 06:59
2007.04.22
С днем рождения ! 28 марта


3-1170513670
Itonix
2007-02-03 17:41
2007.04.22
Разница в компонентах


15-1174738380
Углук
2007-03-24 15:13
2007.04.22
Как сменить окно частот в БПФ?


2-1175715209
Чаййник
2007-04-04 23:33
2007.04.22
запус по времени


5-1152265101
MN
2006-07-07 13:38
2007.04.22
Как программно установить библиотеку bpl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский