![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать так чтобы моя форма была всегда поверх всех окон? [D7, WinXP]
тринитротолуол © (2005-09-25 19:12:00)собственна сабж
evvcom (2005-09-27 14:03:00) [1]
> хотя если абсолютно необходимо, то можно попробовать ловить
> сообщения активации окон
А если 2 таких окна будут ловить сообщения? См. [6].
vertal (2005-09-27 03:07:00) [2]
procedure TfmMain.SetAlwaysOnTop(const NewValue: Boolean);
begin
SetWindowPos(Self.Handle, IfThen(NewValue, HWND_TOPMOST, HWND_NOTOPMOST), 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
fAlwaysOnTop := NewValue;
Self.miAlwaysOnTop.Checked := fAlwaysOnTop;
end;
А если имеется в виду всегда OnTop, даже по отношению к другим окнам со стилем HWND_TOPMOST, то стоит отказаться от этого, так как не полагается программе так нагло себя вести, хотя если абсолютно необходимо, то можно попробовать ловить сообщения активации окон.
evvcom (2005-09-26 08:52:00) [3]
> Как сделать так чтобы моя форма была всегда поверх всех
> окон?
В такой формулировке никак. Представь, что в системе нашелся еще один умник и тоже сделал такое окно. Эти 2 окна перекрывают друг друга. Какое теперь из них должно быть поверх всех?
Vitaliy (2005-09-26 07:05:00) [4]Если на все время надо, можно в свойствах формы указать параметр FormStyle равный fsStayOnTop.
Eraser (2005-09-25 23:00:00) [5]
> тринитротолуол © (25.09.05 19:12)
procedure CreateParams(var Params: TCreateParams); override;
...
procedure TfmMain.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW;
end;
а потом регулируй стилем StayOnTop.
begin...end (2005-09-25 20:08:00) [6]SetWindowPos + WM_WINDOWPOSCHANGING
тринитротолуол (2005-09-25 20:05:00) [7]тобишь окно программы было поверх всех окон
ssk (2005-09-25 19:18:00) [8]StayOnTop ?