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

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

Форма поверх остальных окон. [D7, XP]


nord489 ©   (2007-08-18 17:43:00) 

Здравствуйте! Подскажите, пожалуйста, как сделать чтобы форма отображалась всегда поверх остальных окон?


DVM   (2007-08-21 14:22:00) [1]


> {RASkov} ©   (21.08.07 13:39) [16]
> > [15] DVM ©   (21.08.07 13:27)
>
> Да это и понятно...
> > в каждый момент времени
>
> В один момент времени есть одно верхнее и одно нижнее, ведь
> так?
> поэтому

Я неточно выразился наверное. Одновременно может существовать лишь одно окно, которое располагается ниже всех. Пока это окно существует, никакое другое его место занять не сможет. Функция просто ошибку вернет.

Функция эта:

UserLibHandle := LoadLibrary('USER32.DLL');
@SetShellWindow := GetProcAddress(UserLibHandle, 'SetShellWindow');

Эту функцию MS не описала и оставила очевидно для себя, для эксплорера. Окно, к которому применяется эта функция уже не сдвинуть больше со своего места никуда.


Вася Правильный   (2007-08-21 13:46:00) [2]


> не умно

"а судьи кто?"


{RASkov}   (2007-08-21 13:39:00) [3]

> [15] DVM ©   (21.08.07 13:27)

Да это и понятно...
> в каждый момент времени

В один момент времени есть одно верхнее и одно нижнее, ведь так?
поэтому

> > выше/ниже всех только до первого такого же окна.

Или

> > Ниже всех расположить окно можно

Можно сколь угодно таких окон?
:)


DVM   (2007-08-21 13:27:00) [4]


> {RASkov} ©   (21.08.07 12:38) [13]
> > Ниже всех расположить окно можно
>
> Не один ли фик выше/ниже....

Не один. В системе есть функция для расположения одного и только одного окна в каждый момент времени ниже всех. Это обычно окно шелла.


antonn   (2007-08-21 12:51:00) [5]


> Вася Правильный   (21.08.07 11:45) [12]
>
> автора зарэзать за такое надо
> а программу расчленить и в унитаз

не умно


{RASkov}   (2007-08-21 12:38:00) [6]

> Ниже всех расположить окно можно

Не один ли фик выше/ниже....

> выше/нижевсех только до первого такого же окна.

?
Это вопрос
:)

> а программу расчленить и в унитаз

Ради этого ее еще и печатать... бумагу тратить :)


Вася Правильный   (2007-08-21 11:45:00) [7]


>  всегда поверх остальных окон?

автора зарэзать за такое надо
а программу расчленить и в унитаз


antonn   (2007-08-21 11:41:00) [8]


> Но опять же, если запустить две таких проги, то не приведёт
> ли это к повисанию обоих в борьбе за первенство на экране?
>

нет, не приведет. а вот если будет два окна в одной программе рвущихся наверх - то да, может зависнуть


DVM   (2007-08-21 10:57:00) [9]


> Но опять же, если запустить две таких проги, то не приведёт
> ли это к повисанию обоих в борьбе за первенство на экране?
>

Ну это само собой. Об этом и сказали в [2]. Ниже всех расположить окно можно - выше всех только до первого такого же окна.

> Не обижайся.

И в мыслях не было.


Dib@zol   (2007-08-21 10:53:00) [10]

> [8] DVM ©   (21.08.07 10:37)

Кхм. Правда? В хелпе написано, что с таким параметром его никто не-топмост не перекроет. Я попробовал - и у меня его перекрыла только панель задач. Т.к. она также топмост. Ну а если нужно уж быть из всех тоопмостов топмостом, т о тогда да... WM_WINDOWPOSCHANGING. Но опять же, если запустить две таких проги, то не приведёт ли это к повисанию обоих в борьбе за первенство на экране?


> Ты крут неимоверно!

Не обижайся. Я всего лишь апришёл к тому же выводу что и ты на пару секунд раньше.


DVM   (2007-08-21 10:37:00) [11]


> Dib@zol ©

Ты крут неимоверно!

Только твой ответ не полный. То, что ты написал двинет окно наверх, но оно там долго не удержится. Для последующего удержания окна наверху надо обрабатывать WM_WINDOWPOSCHANGING


Dib@zol   (2007-08-21 10:34:00) [12]

Муахахахаха, я первый :)


DVM   (2007-08-21 10:33:00) [13]

SetWindowPos() + HWND_TOPMOST + WM_WINDOWPOSCHANGING


Dib@zol   (2007-08-21 10:32:00) [14]

SetWindowPos(Form1.Handle, HWND_TOPMOST, Form1.Left, Form1.Top, Form1.Width, Form1.Height, SWP_SHOWWINDOW);


wp2   (2007-08-21 10:32:00) [15]

>отображать sjhve какмодальную Form1.ShowModal;
Это может быть не совсем тем, что надо. Так как главная программа будет спотыкаться и ждать ответа от этой модульной формы.


alshtam   (2007-08-21 10:28:00) [16]

отображать sjhve какмодальную Form1.ShowModal;


Anatoly Podgoretsky   (2007-08-18 19:25:00) [17]

Слово "всегда" неуместно.


tmp   (2007-08-18 18:16:00) [18]

Form1.FormStyle := fsStayOnTop;


Наверх

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