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
[54924] Re:Re:폼에서 [-][ㅁ][x] ..[x]이벤트 어떤걸로 잡아요
장성호 [nasilso] 1715 읽음    2008-10-17 10:40
폼의 캡션의   [_] [ㅁ][X] 버튼을 클릭했을때 이벤트만 잡으려는 것인가요?

아니면 최대화 , 최소화 , Restore 등의 이벤트를 잡으려는 것인가요?

1. 먼저 님의 생각하는 것처럼  FormResize 하면 제대로 잡을 수 없습니다.

   이유는?
      -  FormResize 이벤트는 프로그램이 시작할때 곧바로 뜨고요
      -  Max , Min , Resotre버튼을 클릭하지 않고 size조절만 해도 이벤트가 발생합니다.
      -  그리고 무엇보다 캡션의 Min버튼을 클릭할때는 이벤트가 발생하지 않습니다.
          Minimize되는것은 화면에서 사라질뿐  Size변경은 없으니까요

2. 둘때로 FormClose이벤트가 Form이 Destory되는 이벤트가 아닙니다.
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
:     ShowMessage("Distroy Form");
: }
: //---------------------------------------------------------------------------

FormClose이벤트는 단지 Form을 Hide시킬뿐입니다.

Form이 Close된후에 Form이 Destory되는경우는
    첫째로. Close되는 폼이 Application->MainForm일 경우에 그렇구요
    둘째로 .  FormClose이벤트에 보면 파라메터로 TCloseAction이 넘어옵니다.
             이 Action에 caFree를 설정하면 Close된후에 free됩니다.

폼이 Destory되는 이벤트는 Form에 OnDestory이벤트 가 있습니다. 그것을 활용하시면 됩니다.


그럼 결론적으로 Form의 minimize / maximize / restore이벤트를 잡으려면 어떻게 해하냐면?

WM_SYSCOMMAND 메세지를 잡아야 합니다.

WM_SYSCOMMAND에서 WParam이 SC_MINIMIZE 이면 minimize이벤트이구
WM_SYSCOMMAND에서 WParam이 SC_MAXIMIZE이면 maxmize이벤트 입니다.
WM_SYSCOMMAND에서 WParam이 SC_RESTORE이변 복귀 이벤트이구요

그런데 중요한것 한가지더...
폼의 캡션의 버튼을 클릭해서 하는경우 위와같은 메세지가 발생합니다만
폼의 캡션이 아니라 윈도우 데스트탑의 작업표시줄에 있는 프로그램버튼을 클릭해서 minimize / restore할경우
좀 다를수 있습니다. 메인폼만

왜냐하면 작업표시줄에 나타나는 버튼이 메인폼의 버튼이 아니라 Application->Handle 폼의 버튼이기때문이죠

그래서 메인폼의 경우 작업표시줄에서 maximize / minimaxe / restore이벤트까지 제대로 잡으려면
Application->Handle에서 발생하는 메세지까지 잡아야 합니다.

그럼..







너브 님이 쓰신 글 :
: 최소화하고 최대화 이벤트가 있을 줄 알고 보니 없네요...
: 대신 FormResize 이벤트를 사용하면 될 거 같네요;;;
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormResize(TObject *Sender)
: {
:     if(Form1->WindowState == wsMaximized) {    // 최대화....
:         ShowMessage("Max Form");
:                 // do something.............
:     }
:     if(Form1->WindowState == wsMinimized) {     // 최소화
:         ShowMessage("Min Form");
:     }
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
:     ShowMessage("Distroy Form");
: }
: //---------------------------------------------------------------------------
:
: 초보 님이 쓰신 글 :
: : 프로그램 폼에서
: : 상단에 [-][ㅁ][x] 각각의 이벤트를 아고 싶은데
: :
: : 몰라서
: : 프로그램은 실행되어 있고  화면은 나오지 않아서
: : 이벤트 잡아 주고 싶습니다.

+ -

관련 글 리스트
54917 폼에서 [-][ㅁ][x] ..[x]이벤트 어떤걸로 잡아요 초보 1126 2008/10/16
54922     Re:폼에서 [-][ㅁ][x] ..[x]이벤트 어떤걸로 잡아요 너브 1233 2008/10/17
54924         Re:Re:폼에서 [-][ㅁ][x] ..[x]이벤트 어떤걸로 잡아요 장성호 1715 2008/10/17
54925             고맙습니다. 초보 1504 2008/10/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.