2017-10-03 11 views
1

나는 항상 양식의 수명주기 순서가 다음 코드에 적용되는 initialization -> Create -> OnCreate -> OnDestroy -> Destroy -> finalization이라고 생각했습니다. 내가 조금 변경하면초기화 및 최종화 순서는 어떻게 결정됩니까?

Application.Initialize; 
Application.MainFormOnTaskbar := True; 
Application.CreateForm(TUMain, UMain); 
Application.Run; 

그러나 ... 궁금 그래서 initialization -> Create -> OnCreate -> finalization -> OnDestroy -> Destroy

Application.Initialize; 
Application.MainFormOnTaskbar := True; 
Application.CreateForm(TUMain, UMain); 
if 1 = 2 then 
    Application.Run; 

다음 TUMain 주문 변경하는 방법을 정확한 순서 제어 또는 적어도 변화의 원인이다 이 경우에는?

+0

디버거를 살펴보십시오. 이 폼은'DoneApplication()'을 호출 할 때'Vcl.Forms.pas'의 유닛 파이널 라이즈에 의해 파괴됩니다. 유닛 초기화/종료에서 멀리 떨어져있는 것이 좋습니다. 생성자와 소멸자를 사용하십시오. 또는 원할 경우 시각적 양식의'OnCreate' 및'OnDestroy' 이벤트를 사용하십시오. –

답변

7

Application.Run을 절대 호출하지 않으면 자동 작성된 양식 (또는 해당 양식으로 Application.CreateForm으로 만든 양식)은 기본 양식이 닫히지 않고 FinalizeUnits에서 해제됩니다.

는 일반적으로 Application.RunDoneApplication를 호출 ExitProc 할당 -이 APPLICATION 응용 소유 창문을 열거하고 FinalizeUnits를 호출하기 전에를 해제합니다. Application.Run이 호출되지 않으면 ExitProc이 할당되지 않으며 FinalizeUnits이 호출 될 때까지 양식이 해제되지 않습니다.