ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 폼 순서
    C++ Builder/기타자료 2019. 3. 4. 18:16
    [458] ( 이벤트 발생순서 ) 폼의 Close()와 delete의 차이.
    수야!╋ [sooya23]9240 읽음    2005-05-03 10:18
    빌더를 꾀 했는데도.. 혼동하기 쉽고 까먹기 쉬워서 적어봤습니다. 

    행여 작업중 실수 없으시길 바라며 

    폼의 이벤트 발생 순서입니다. 

    폼 생성시 - 
    생성자() -> OnCreate() -> OnShow() -> OnActivate() -> OnCanResize() -> OnConstrainedResize() 
    -> OnResize() -> OnPaint() 

    MainForm이라 함은 Ctrl + Shift + F11(프로젝트 관리자)를 열어서 Form 탭에 있는 MainForm을 말하는 것이구요 

    MainForm의 Close() 함수 호출 혹은 X버튼 클릭시 - 
    OnCloseQuery() -> OnClose() -> OnHide() -> OnDestroy() 
      중요한건 OnHide 부터인데요 OnHide가 호출되는 시기는 TApplication 이 소멸되는 시점이라는 것입니다. 
      이 사항의 공통적인 부분은 소멸될때 이뤄진다는 것이지요 

    MainForm이 아닌경우의 Close() 함수 호출 혹은 X버튼 클릭시 - 
    OnCloseQuery() -> OnClose() -> OnHide() -> OnDeactivate() 
      MainForm의 경우와는 달리 OnDeactivate가 호출됩니다. 또하나 다른것은 메모리가 소거되지 않는다는 점이지요 
      Destroy이벤트를 받고싶으시다면, 즉 delete 없이 폼이 닫힐때 메모리 소거까지 같이 하고싶으시다면 
      OnClose 이벤트 함수에 Action = caFree; 를 추가하시면 OnDestroy() 이벤트까지 이뤄지며 delete 효과가 일어납니다. 

    MainForm을 delete 시 - 
    OnHide() -> OnDestroy() 
      이때는 TApplication은 소멸되지 않습니다. 그러므로 윈도우는 보이지 않으나 프로세스는 살아있게되지요 
      MainForm에 버튼을 하나 만드셔서 delete this; 해보시면 확인하실 수 있어요~ 

    MainForm이 아닌경우의 delete 시 - 
    OnHide() -> OnDestroy() 
      오해하시는 경우가 있는데 OnCloseQuery()와 OnClose()이벤트는 발생하지 않습니다. 
      생성한 메모리를 제거를 OnClose나 OnCloseQuery에 코딩하실 경우 반듯이 해당 이벤트가 발생하도록 코딩하셔야 하지요. 가급적 OnDestroy에 하시기 바랍니다. 


    TForm에는 소멸자 함수가 보이지 않지요? 

    __fastcall ~TForm(); 을 만들어 주시면 소멸자의 동작은 일어납니다. 
    이 경우에는 소멸자 ->OnHide() -> OnDestroy() 순으로 이벤트가 발생됩니다. 

    소멸될때의 경우에 유념하시면 메모리 에러창을 좀 덜보실 수 있으실 겁니다. &&



    출처: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=458



    @소멸자 순서    // OnClose() - 소멸자() - OnDestroy()

    728x90

    'C++ Builder > 기타자료' 카테고리의 다른 글

    Virtual-Key Codes  (0) 2019.04.18
    패널에 폼 띄우기  (0) 2019.03.06
    윈도우 메세지 핸들러  (0) 2019.03.04
    프로젝트옵션의 어플리케이션 아이콘 변경 방법  (0) 2019.02.22
    폼 스킨  (0) 2019.02.22

    댓글

Designed by Tistory.