Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

форма не хочет Show поверх всех   Найти похожие ветки 

 
fellow   (2008-09-04 15:22) [0]

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

есть 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-04 15:27) [1]


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


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


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


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


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


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

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


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


> fellow   (04.09.08 15:22)  

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

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

--
Regards, LVT.


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

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


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


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


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


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


> fellow   (04.09.08 15:37) [4]


Ну и что ?

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


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


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

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


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

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


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


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

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


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


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


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


 
Тын-Дын ©   (2008-09-05 10:13) [11]


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


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


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


> В Обработчике 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 22:23) [13]


> например: в 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;


 
Тын-Дын ©   (2008-09-05 22:23) [14]

ps.
КОд не мой.


 
DVM ©   (2008-09-05 22:47) [15]


> КОд не мой.

отмазался :)


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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1219210687
ееееееекенитен
2008-08-20 09:38
2008.10.12
разрезать файл


2-1220073543
DarkLord
2008-08-30 09:19
2008.10.12
Имитация DblClick


2-1220207979
fog
2008-08-31 22:39
2008.10.12
MD5 и CryptoAPI


2-1220012874
ZiZi
2008-08-29 16:27
2008.10.12
Железки... Как разговаривать с дровами под NT.


2-1220521599
kami
2008-09-04 13:46
2008.10.12
Помогите с помехоустойчивым кодированием