Форум: "Основная";
Текущий архив: 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