Неожиданное поведение Application.OnActivate в Delphi 7

Я написал приложение 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  

Итак, мое приложение деактивируется, затем активируется, а затем снова деактивируется!
Это довольно запутанно!

7
задан ThiefMaster 28 June 2012 в 06:58
поделиться