Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.041 c
1-1087405888
ilnarab
2004-06-16 21:11
2004.07.04
Как скопировать папку


3-1086759294
Smalik
2004-06-09 09:34
2004.07.04
не сохраняются данные с помошью ClientDataSet1.ApplyUpdates(-1)


4-1083367298
Bonial
2004-05-01 03:21
2004.07.04
Как работают "часы" в трее?


3-1086685052
serg128
2004-06-08 12:57
2004.07.04
Как динамически добавить поле типа Lookup в TClientDataSet?


14-1087023505
GuAV
2004-06-12 10:58
2004.07.04
Какие там компоненты.