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

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

форма не хочет Show поверх всех


fellow ©   (2008-09-04 15:22:00) 

Приветствую!

есть form1 и form2
у form2.formstyle = fsStayOnTop

по двойному клику на иконке в трее вызываю метод form2.show
все происходит как надо, форма поверх всех..
если ее закрыть и открыть снова, то тоже все ок..

но после некоторых действий:
1. form1.show (у нее formstyle = fsNormal,)
2. form1.close (прячется в трей)
3. активируем любое приложение
у form2 пропадает свойство "поверх всех окон" и оно прячется за активными окнами других приложений.

даже повторный вызов метода form2.show не дает никаких результатов оно даже не выводится "вперед"..
пытался закрывать его перед show - не помогает..
bringtofront - не помогает, даже если его вызвать отдельно, хоть он уже есть в form.show..

как выводить form2 поверх в любом случае?


Германн   (2008-09-06 00:49:00) [1]


> Ну... я лишь для потому добавку дописал, что оформление
> не такое, какое у меня;)
>

Жаль, что у тебя не такое. На мой скус очень грамотное оформление. От моего отличается только одним нюансом. Но сей нюанс в коде от ЮЗ выглядит также как и в твоём примере. :)


Тын-Дын   (2008-09-06 00:41:00) [2]


> DVM ©   (05.09.08 22:47) [15]
> > КОд не мой.отмазался :)


Ну... я лишь для потому добавку дописал, что оформление не такое, какое у меня;)


DVM   (2008-09-05 22:47:00) [3]


> КОд не мой.

отмазался :)


Тын-Дын   (2008-09-05 22:23:00) [4]

ps.
КОд не мой.


Тын-Дын   (2008-09-05 22:23:00) [5]


> например: в delphi я не могу нажать на кнопку "program RESET"


Вот пример:

procedure TFormLauncherMain.Idle(Sender: TObject; var Done: Boolean);
var
 Pt: TPoint;
 R: TRect;
begin
Shell_NotifyIcon(NIM_ADD,@nid);
 GetCursorPos(Pt);
  if  DeletePresent then
      if (FormDelete.Showing) then
      begin
         R := Rect(FormDelete.Left,FormDelete.Top,FormDelete.Left+FormDelete.Width,
           FormDelete.Top+FormDelete.Height);
         if (not PtInRect(R,pt))  then
           SetWindowPos(FormDelete.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
         exit;
       end;
   if (EditPresent) and (not DeletePresent)  then
      if (FormEdit.Showing) then
      begin
         R := Rect(FormEdit.Left,FormEdit.Top,FormEdit.Left+FormEdit.Width,FormEdit.Top+FormEdit.Height);
         if (not PtInRect(R,pt))  then
           SetWindowPos(FormEdit.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
       end;
   Done:=True;
end;


fellow   (2008-09-05 14:43:00) [6]


> В Обработчике OnIdle вызывай SetWindowPos со вторым параметром
> HWND_TOPMOST.


работает, но я поместил этот метод:
  SetWindowPos(Form2.Handle,HWND_TOPMOST,0,0,Form2.Width,Form2.Height,SWP_NOMOVE);

после form2.show; корректно ли это ?

иначе, если это делать в обработчике OnIdle, то окно того приложения которое активировалось до form2.close, после form2.close перестает реагировать на клики мыши

например: в delphi я не могу нажать на кнопку "program RESET"


Тын-Дын   (2008-09-05 10:13:00) [7]


> как выводить form2 поверх в любом случае?


В Обработчике OnIdle вызывай SetWindowPos со вторым параметром HWND_TOPMOST.


fellow   (2008-09-04 16:01:00) [8]


> при наличии первой "кнопки"?


в любом случае: если форма выведена на экран, то чтобы у нее была своя кнопка


Правильный$Вася   (2008-09-04 15:57:00) [9]


> как показать кнопку на панели задач для второй формы?

при наличии первой "кнопки"?


fellow   (2008-09-04 15:54:00) [10]

как показать кнопку на панели задач для второй формы?


Правильный$Вася   (2008-09-04 15:50:00) [11]


> но ведь при первом вызове - form2 появляется поверх всех
> окон приложений открытых до...

так это ж просто единственная отрытая форма твоего приложения, на которое ты переключился


Сергей М.   (2008-09-04 15:46:00) [12]


> fellow   (04.09.08 15:37) [4]


Ну и что ?

А потом ты жмакаешь на иконку другого приложения, активируешь при этом открытые им окна, и какое-то из этих окон при активации вправе стать переднеплановым.


fellow   (2008-09-04 15:41:00) [13]


> StayOnTop имеет смысл только в контексте окон текущего приложения.


ответ [4] был на ответ [1]


fellow   (2008-09-04 15:37:00) [14]

но ведь при первом вызове - form2 появляется поверх всехокон приложений открытых до...


Leonid Troyanovsky   (2008-09-04 15:35:00) [15]


> fellow   (04.09.08 15:22)  

> у form2 пропадает свойство "поверх всех окон" и оно прячется
> за активными окнами других приложений.

http://www.rsdn.ru/Forum/?mid=466741

--
Regards, LVT.


Плохиш   (2008-09-04 15:29:00) [16]


> форма не хочет Show поверх всех

Хорошая форма.


Сергей М.   (2008-09-04 15:27:00) [17]


> активируем любое приложение
> у form2 пропадает свойство "поверх всех окон" и оно прячется
> за активными окнами других приложений


StayOnTop имеет смысл только в контексте окон текущегоприложения.


> как выводить form2 поверх в любом случае?


Никак.
Ничто не мешает любому другому приложению возжелать того же - как будете делить с ним право "лежать сверху" ?


Наверх

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