Application.OnActivate의 동작을 테스트하기 위해 D7 응용 프로그램을 작성했습니다. MainForm.FormCreate - - MainForm.FormCreate - - 끝
3 - MainForm
2를 시작
1 :Delphi 7에서 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에의 내용은 다음과 같습니다
이는 관련 부분입니다. 에서는 AppActivate - MainForm.ShowWidthsHeights - -
4를 시작 MainForm.ShowWidthsHeights - - 끝
6 - MainForm.AppActivate - 끝
5 시작
맞습니다. 그때 작업 표시 줄에 바로 가기를 클릭하면
는하지만,이 4 개 개의 라인 Memo1에 추가됩니다
7 - MainForm.AppActivate - MainForm.ShowWidthsHeights - -
8을 시작 MainForm.ShowWidthsHeights -
9 시작 - 끝
10 - MainForm.AppActivate - 끝
왜 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 행을 포함하지만 작업 표시 줄에서 바로 가기를 클릭하면 Memo1에 8 개의 추가 줄이 생겼습니다.
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
그래서 내 응용 프로그램이 비활성화되고 활성화 된 다음 다시 비활성화됩니다.
매우 혼란 스럽습니다!
델파이는 단순히 Windows가 앱으로 보내는 WM_ACTIVATEAPP 메시지를 반영합니다. Windows가 그렇게하는 이유는 모르겠습니다. –
작업 표시 줄 단추를 * 처음 클릭 할 때 (양식을 최소화 할 수있을 가능성이 높음) 또는 다시 클릭하여 메모를 볼 때 7에서 10까지 기록된다는 것이 긍정적입니까? 메모에 기록하는 대신 'OutputDebugString'과'이벤트 로그 '(ctrl + alt + v)를 사용할 수 있습니다. –
@Sertac 그래, 나는 이것을 이미 확인했다. 그것은 정확히 Q. –