Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать так чтобы моя форма была всегда поверх всех окон? [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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо