Q&A

  • 메세지창 자동 닫기
메세지 창을 뛰우고 닫기 버튼을 누르지 않아도 닫아지게 하려고 하는데 어떻게 해야 하죠?
알려 주세욤
3  COMMENTS
  • Profile
    SEN 2003.04.14 18:32
    [팁] 에 보시면 홍성락 님이 올려주신 글이 있습니다~
    거기서 퍼왔습니다~~

    ......
    var
      Form1: TForm1;
      procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); stdcall;

    implementation

    {$R *.dfm}
    procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
    begin
    PostQuitMessage(0);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
       idTimer: UINT;
       msg: TMSG;
    begin
       idTimer := SetTimer(0, 0, 2000, @MessageBoxTimerProc);
       MessageBox(0, '123', '정보', MB_OK);
       KillTimer(0, idTimer);
       PeekMessage(msg, 0, WM_QUIT, WM_QUIT, PM_REMOVE)
    end;
    ......
  • Profile
    포맨21 2007.03.19 00:36

    주의 : 이 방법을 사용할 경우 TimeOut 시간 내에 버튼을 눌러 MessageBox를 닫은 경우
           PostQuitMessage가 활성화된 창으로 전송되어 메인 창이 닫히는 버그가 있습니다.
           [팁] 게시판의 원래 글에는 답글이 달려있으나 여기는 없어서 한참 고생했습니다. ^^
          

  • Profile
    홍성락 2007.07.27 02:44
    조금 수정 했습니다, 뜨는 폼의 caption과 버튼등을 알때 사용합니다...
    누가 DLL에 메세지를 많이 넣어서 자동으로 뜰만하거 삭제시도 사용해 보았습니다
    <!--CodeS-->
    procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
    var
       TargethWnd, ButtonWnd : LongWord; //HWND;
       Msg: TMSG;
    begin
       TargethWnd := FindWindow(nil, PChar('폼Caption명'));
       if (TargethWnd <> 0) then begin//and(TargethWnd = hWnd)
          ButtonWnd := FindWindowEX(TargethWnd, 0, nil, PChar('OK'));  //nil 또는 PChar('TButton')
          if (ButtonWnd <> 0) then begin
             PostMessage(ButtonWnd, WM_LBUTTONDOWN, 0, 0);
             PostMessage(ButtonWnd, WM_LBUTTONUP, 0, 0);
          end;

          //PostQuitMessage(0);
          //KillTimer(0, idTimer);
          //PeekMessage(Msg, 0, WM_QUIT, WM_QUIT, PM_REMOVE);
       end;
    end;

    <!--CodeE-->
    srhong///////////////////////////////////////////////////////////////////////