C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[16237] 시스템 종료와 프로그램 종료.....
^^: [] 1746 읽음    2002-03-12 13:48
아직두 시스템 종료시 저의 프로그램을 죽이지 못하고 있습니다..
소스를 올리니 고수분들께서 좀 봐주세여..

void __fastcall TForm1::closeMenuClick(TObject *Sender)
{
    canclose = true;
    Close();
}
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    CanClose = canclose;
    if( !CanClose )
    {
        TrayMessage(NIM_ADD);
        Hide();
    }
    canclose = false;
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
      if (MessageDlg("프로그램을 종료하시겠습니까?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
      {
           Action = caFree;
      }
      else
      {
           Action = caNone;
      }

}

보시다 시피 close 유무를 컨트롤하는 플래그 canclose를 두고 이것을 컨트롤하여 true로 둘수 있는것은 팝업메뉴에서 가능하도록 해두었습니다..
즉 팝업에서 종료를 선택했을시만 canclose를 true로 할 수 있고 이것은 곧이어 호출된 Close()함수에 의해서 FormCloseQuery를 호출하고... canclose가 true이므로 다시 FormClose를 호출하고 FormClose에 의해서 프로그램이 종료됩니다.근데 이러한 과정은 프로그램 종료버튼을 클릭했을 때 발생하고  시스템 종료시에는 바로 프로그램이 종료하도록 하고 싶은데 시스템 종료시 Close()가 가장 먼저 호출되고 따라서 그다음인 FormCloseQuery가 호출되어서 이 시점에서 canclose는 false이므로 절대 프로그램이 죽지 않는다는 것입니다.
그래서 제가 묻고 싶은 것은 시스템 종료시 발생하는 이벤트와 프로그램 종료시 발생하는 이벤트가 다르다면 canclose를 걔네들 이벤트에서 설정하면 "시스템 종료와 프로그램 종료"를 구분하지 않는가하는 생각을 했던 것입니다..

모쪼록 제가 뭘 간과하구 있는지...\
그럼 어떻게해야 하는지 일러주심 감사하겠습니다.

+ -

관련 글 리스트
16237 시스템 종료와 프로그램 종료..... ^^: 1746 2002/03/12
16238     Re:시스템 종료와 프로그램 종료..... gongnim 1592 2002/03/12
16244         Re:Re:시스템 종료와 프로그램 종료..... ^^: 1180 2002/03/12
16249             Re:Re:Re:시스템 종료와 프로그램 종료..... gongnim 1387 2002/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.