![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Две формы: FormStyle=fsStayOnTop.. Form2 всегда выше Form1? [D7, 2003]
Vyacheslav © (2012-03-05 15:34:00)Здравствуйте.
В проекте 2 формы: Form1.FormStyle = fsStayOnTop; Form2.FormStyle = fsStayOnTop; Form1 - main form проекта.
Хочу добиться того, чтоб обе формы, как и подразумевается были поверх всех окон, но при этом Form2 всегда выше Form1.
Я думаю, что все знают, что тривиальная смена FormStyle на fsStayOnTop не даёт ожидаемого результата, а именно Form2, начинает теряться при клике на не активное окно другого приложения или смене активного Alt+Tab.
Vyacheslav (2012-03-05 19:49:00) [1]Всё что получилось, это поставить на форму Form2 таймер:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
if (Form2.Visible and Form2.Enabled) then Form2.SetFocus;
end;
Но это уж совсем лапти!
В методе AVпоменял Form2.Show; на Form2.SetFocus;, Application.OnActivate := TNotifyEvent(M); на Application.On DeActivate := TNotifyEvent(M); - получилось удерживать Form2 при потере фокуса всей Application, но не удалось вернуть фокус Form2 при возврате в фокус Form1..
Vyacheslav (2012-03-05 19:19:00) [2]Т.е. нужно найти тот момент, когда надо отдавать Form2.SetFocus;
Vyacheslav (2012-03-05 19:05:00) [3]Не совсем понял идею..
Честно сказать не знаю даже, какой именно API отвечает за последовательность отображения форм..
AV (2012-03-05 15:57:00) [4]не получилось воспроизвести..
но может, что вроде такого нужно (чтобы при активации приложения была нужная форма показана)?
type
TNotifyEvent = procedure(Sender: TObject) of object;
var
M: TMethod;
procedure aa(sender: TObject);
begin
Form2.Show;
end;
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
M.Code := addr(aa);
M.Data := nil;
Application.OnActivate := TNotifyEvent(M);
Application.Run;
end.