Я написал приложение D7 для проверки поведения Application.OnActivate .
Это соответствующая часть:
procedure TMainForm.FormCreate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - Begin');
Application.OnActivate := AppActivate;
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - End');
end;
procedure TMainForm.AppActivate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - Begin');
ShowWidthsHeights (Sender);
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - End');
end;
procedure TMainForm.ShowWidthsHeights (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - End');
end;
После запуска приложения содержимое Memo1:
1 — MainForm.FormCreate — Начало
2 — MainForm.FormCreate — Конец
3 — MainForm.AppActivate — Начало
4 — MainForm.ShowWidthsHeights — Начало
5 — MainForm.ShowWidthsHeights — Конец
6 — MainForm.AppActivate — End
Верно.
Но если я затем нажму на ярлык на панели задач, эти 4 строки добавятся в Memo1:
7 — MainForm.AppActivate — Начало
8 — MainForm.ShowWidthsHeights — Начало
9 — MainForm.ShowWidthsHeights — Конец
10 - MainForm.AppActivate - End
Почему D7 делает это?
Мое приложение не активировано, наоборот, деактивировано!
Чтобы проверить, запускается ли также событие Application.OnDeactivate, я добавил этот обработчик событий:
procedure TMainForm.AppDeactivate(Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - End');
end;
и добавил этот оператор в TMainForm.FormCreate:
Application.OnDeactivate := AppDeactivate;
После запуска приложения Memo1 содержал те же 6 строк, что и в исходный случай, но щелчок по ярлыку на панели задач привел к появлению 8 дополнительных строк в Memo1:
7 - MainForm.AppDeactivate - Begin
8 - MainForm.AppDeactivate - End
9 - MainForm.AppActivate - Begin
10 - MainForm.ShowWidthsHeights - Begin
11 - MainForm.ShowWidthsHeights - End
12 - MainForm.AppActivate - End
13 - MainForm.AppDeactivate - Begin
14 - MainForm.AppDeactivate - End
Итак, мое приложение деактивируется, затем активируется, а затем снова деактивируется!
Это довольно запутанно!