![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
форма не хочет 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 поверх в любом случае?
Никак.
Ничто не мешает любому другому приложению возжелать того же - как будете делить с ним право "лежать сверху" ?