![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окна всегда поверх всех окон
roughneck © (2007-11-28 09:51:00)Создаю ряд окон способом:
ArrayForm: array of TForm1;
ArrayForm[i] := TForm1.Create(Application);
Проблема сделать эти окна всегдаповерх других окон. Как, например, окно трафика у Download Master-а.
DVM (2007-12-01 21:12:00) [1]
> roughneck
Выше всех только менюшка монитора.
Выше нее - окно распечатанное на принтере.
Strate (2007-11-30 07:54:00) [2]roughneck (29.11.07 14:46) [3]
SetWindowPos(ArrForms[i].Handle, ArrForms[i-1].Handle....
Может всёже
SetWindowPos(ArrForms[i].Handle, HWND_TOPMOST,....?
Anatoly Podgoretsky (2007-11-29 15:31:00) [3]Твоя программа может запускаться в двух экземпляров, как тогда ты обойдешь данное противоречие?
А если у другой программы точно такие же претензии, то как.
Лечение - вешаться.
roughneck (2007-11-29 14:46:00) [4]FormStyle := fsStayOnTop
не помогает - это работает только в пределах данного процесса.
А вот по поводу ВСЕГДА - не уберу. Мне и нужно чтоб окно было видно всегда. Исключением мугут быть игры или другие проги которые работают с видео страницами (DirectX)
Пока сдлал вот так - работает, но это как-то не корректно:
по таймеру выполняю:
Application.NormalizeTopMosts;
if Length(ArrForms) > 0 then
SetWindowPos(ArrForms[0].Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
i := 1;
while i < Length(ArrForms) do
begin
SetWindowPos(ArrForms[i].Handle, ArrForms[i-1].Handle, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
i := i + 1;
end;
Anatoly Podgoretsky (2007-11-28 11:54:00) [5]Убери слова ВСЕГДА тогда сможешь на что то расчитывать.
авыф (2007-11-28 10:07:00) [6]FormStyle := fsStayOnTop