Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Внизформа не хочет 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.058 c