Вниз
Скачать: CL | DM;

Поверх всех окон   Найти похожие ветки 

 
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
14-1087380297
Undert
2004-06-16 14:04
2004.07.04
Опять я все со своим MySQL :)))


14-1087477253
Terminator
2004-06-17 17:00
2004.07.04
Помогите выбрать ресторан и гостиницу


1-1087566561
Артем
2004-06-18 17:49
2004.07.04
Вопрос по WebBrowser


3-1086330712
freeman82
2004-06-04 10:31
2004.07.04
Добавление новой записи


14-1087299677
Vlad Oshin
2004-06-15 15:41
2004.07.04
подскажите как из 1.frp(FastReport) достать текст.




   Наверх