Q&A

  • Child 폼 종료를 알아낼수 있는 방법
main 폼이 있고 이 폼에서 여러개의 폼을 띄울 수 있습니다.
모달로 띄우지는 않구요.
띄워진 Child Form들이 종료 될 때 해당 종료되는 폼에 따라
main form 에서 작업을 하려하는데 Child Form이 종료되는 시점을
어떻게 알아내야 할 지 모르겠습니다.

단순히 Child form의 close 이벤트에서 변수값으로 main에 보내준다던지 등으로 처리를 하면 쉽게 되겠지만 사정상 이방법은 힘들고,
순수히 main 폼에서 child 폼의 종료 시 알아 낼수 있는 방법이 없을까요?
메세지를 이용하면 될것도 같긴한데, 어떤방법이던
아시는분 자세히 좀 부탁드립니다.

참, 폼 종료시 발생하는 메세지 혹시 아시면 같이 부탁드립니다.
WM_CLOSE는 폼을 종료시키도록 SendMessage로 작동은 되지만
실제 폼 종료시 발생하는 메세지는 아닌것 같더군요.
제가 잘못알고 있는 것인지.

부탁드립니다.
좋은밤 되시길.. ^^
4  COMMENTS
  • Profile
    서기원 2004.10.07 20:07
    안녕하세요?
    저도 Child폼 종료시 Main폼에게 이를 알려야할 필요가 있어서 고민하다가
    메시지를 이용한 방법을 사용하고 있습니다.

    전역으로 Main폼의 핸들값을 저장할변수 g_hMainForm을 선언하고
    MainForm의 핸들값을 저장한 다음, 공유 unit에서
    const
      WM_CHILD_FORM_CLOSED = WM_USER+1234; 와 같이 정의.

    Child의 OnFormClose에서
    SendMessage(g_hMainForm, WM_CHILD_FORM_CLOSED, 0, "Child폼 종료!");

    Main폼에서
    TMainForm = class(TForm)
      ...
      private
        procedure WMChildFormClosed(var Message: TMessage); message WM_CHILD_FORM_CLOSED;
      ...

    procedure WMChildFormClosed(var Message: TMessage);
    begin
      showmessage(PChar(Message.lParam));
    end;

    그럼 즐프하세요~

    p.s 다른 좋은 방법 있으신 분들 좀 알려주세요..^^

  • Profile
    DelChoBo 2004.10.07 20:55
    답변 감사드립니다.
    제가 원하는 대답과는 조금 떨어져 있어 다시 질문 드립니다. 질문은

    1. Child의 OnFormClose 등을 포함해 Child 폼에선 어떤 작업도 없이
       MainForm에서 Child 폼의 종료 시점을 알고 싶습니다.
    2. 폼 종료 메시지로 사용자 정의 하셨는데, 순수히 폼 종료시 발생 되는
       메세지를 알고 싶습니다.

    답변 다시한번 감사드리구요, 혹시 알고 계시면 다시 부탁드립니다.
    좋은 하루 되세요. ^^

  • Profile
    최용일 2004.10.08 07:18
    안녕하세요. 최용일입니다.

    폼이 종료될때 외부로 Notify 되는 메세지는 없습니다.

    차일드폼을 안건드리고 하실려면... 흠... 타이머같은걸로 끊임없이 그 차일드폼이 살아있는지 조사해보는 방법밖에는 없을거 같네요...

    아~ 서브클래싱해서 차일드폼의 메세지핸들러를 교체하시면 차일드폼이 종료되었을 때를 바로 알 수가 있겠네요.

    ^^ 항상 즐코하세요...

  • Profile
    DelChoBo 2004.10.08 19:45
    서기원, 최용일님
    답변 감사합니다.

    서브클래싱, 메세지 핸들러 교체 해보지는 않았지만 덕분에 방법이 보이는 것 같습니다.
    다시 찾아보고 해야져 ^^
    몇일을 고민 한건데.. 감격의 눈물이~~ ^^
    두분 모두 답변 감사드리구요.
    쌀쌀한 날씨 감기 조심하시길 바랍니다.