Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизПоверх всех окон Найти похожие ветки
← →
3S (2004-06-15 18:23) [0]Имеется главная форма (MainForm), для предания ей статуса TOPMOST использую функцию...
procedure TMainForm.FormCreate(Sender: TObject);
begin
SetWindowPos(MainForm.Handle,
HWND_TOPMOST, Left, Top,
Width, Height,
SWP_NOACTIVATE or SWP_NOCOPYBITS or SWP_NOMOVE or SWP_NOSIZE);
end;
И все было бы хорошо, если бы мне не нужно было вызвать диалоговое окно. Вызываю его кнопкой Button1...procedure TMainForm.Button1Click(Sender: TObject);
var Dialog1: TDialog1;
begin
Dialog1:=TDialog1.Create(Application);
Dialog1.ShowMOdal;
Dialog1.free;
end;
В TDialog1 также прописано TOPMOST при создании...procedure TDialog1.FormCreate(Sender: TObject);
begin
SetWindowPos(Handle,
HWND_TOPMOST, Left, Top,
Width, Height,
SWP_NOACTIVATE or SWP_NOCOPYBITS or SWP_NOMOVE or SWP_NOSIZE);
end;
и в обработчике события OnPaint... - Application.RestoreTopMosts;
Вот тут и начинаются чудеса c MainForm (когда открыт Dialog1)...
При потере приложением фокуса (например при переключении с проги в WinWord), Dialog1 как полагается находится TopMost, но MainForm, то, как должно быть находиться, за Dialog1 (но поверх WinWord), а то слетает под окно WinWord.
Никто не сталкивался с этой проблемой? Где грабли?
Заранее огромное спасибо!
← →
Piter © (2004-06-15 18:37) [1]3S (15.06.04 18:23)
Где грабли?
да везде. Чтобы форма была поверх всех - у нее специально есть свойство FormStyle, надо его установить в fsStayOnTop
Этой фразы я вообще не понял:
3S (15.06.04 18:23)
и в обработчике события OnPaint... - Application.RestoreTopMosts
← →
3S (2004-06-15 18:55) [2]
> FormStyle, надо его установить в fsStayOnTop
А ты думаешь, это свойство использует другую функцию :-)
> Этой фразы я вообще не понял:
> и в обработчике события OnPaint... - Application.RestoreTopMosts
procedure
procedure TDialog1.FormPaint(Sender: TObject);
begin
Application.RestoreTopMosts;
end;
Без этой хрени, диалог не будет TOPMOST, даже если ему десять раз прописать свойство fsStayOnTop (глюк Delphi, хотя они считают что это винда)
← →
GuAV © (2004-06-15 19:43) [3]Попробовал сам... да проблема существует.
Имхо проблема в самой ShowModal;
Вот кусок из этой фции, перед входом в модальный цикл
SendMessage(Handle, CM_ACTIVATE, 0, 0);
вот и лови это сообщение и в нём делай SetWindowPos всем, кому надо.
Всё имхо, конечно, но имхо с формстейт Борланд что-то не то намутили.
← →
3S (2004-06-15 19:57) [4]Спасибо! Буду пробовать
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c