Главная страница
    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.051 c
10-1131429028
john_mag
2005-11-08 08:50
2007.04.22
работа с msword


5-1152100632
Romas81
2006-07-05 15:57
2007.04.22
компоненты MSSQL 2000


1-1172160963
Undertaker-wwf
2007-02-22 19:16
2007.04.22
FloatToStr и TFormatSettings - проблема с ThousandSeparator


1-1172611883
SamProf
2007-02-28 00:31
2007.04.22
Помогите!!! Error - Не был произведен вызов CoInitialize


15-1174843678
leonidus
2007-03-25 21:27
2007.04.22
Помогите написать алгоритм перебора





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