Q&A

  • ShowMessage 를 죽이는 방법
안녕하세요...

제가 궁금한게 있어요... 누가 대답해 주실 지 그 분 정말 복 받을겁니다.

제가 아주 아주 간단한 어플을 맹그는데, showmessage 라는 놈이 나오거

든요. MessageBox 말구요.

전 showmessage 이놈을 어떠한 버튼을 눌렀을때, 나타났다가 약 5초후에

사라지게 해야 하는데, 버튼을 누르지 않고 사라지게 해야 하거든요.

5초안에 버튼을 누르면 걍 사라지는 거구, 5초가 지나면 자동으로 사라지는

거구.... 근데 이 놈을 어떻게 없애야 하는지 모르겠다는 말이죠.

대충 타이머하나 올려 놓고 인터벌 조정하구, showmessage를 뛰운후에

showmessage 를 없앴죠...

procedure TForm1.Timer1Timer(Sender: TObject);

var
     josgogi : hWND;

begin

  josgogi := FindWindow(nil, 'Project1');
  SendMessage(josgogi, {WM_Message} , 0, 0);

end;

저 부분에다가 제가 " WM_CLOSE " 요놈을 넣었거든요. 당근히 안되죠.

그쵸 ~~ 메인까지 같이 죽어버리죠....

어케 showmessage를 죽일까요... MessageBox 쓰라는 말씀은 하지 마세요.

전 무조건 ShowMessage 입니다.

ShowMessage는 showmodal 로 생성되는게 맞죠 ???  이것도 궁금... 맞는

것 같은데.^^;

도와주소서 ~~


9  COMMENTS
  • Profile
    죠스고기 2002.01.25 23:15
    모든 분들 감사합니다.

    결국엔 해결 했구요....

    제가 질문을 잘 못해서 여러분들을 헷갈리게 했나 봅니다.

    제가 해결한 부분은요...

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin

      Keybd_Event(VK_Return, VK_Return, 0, 0); // 실행코드는 이놈 한줄 !!!

    end;


    요로케 단 한줄의 코드입니다. 델파이를 많이 써보질 않다보니...ㅠㅠ

    저렇게 간단한 해결책이 있는것을........

    모든 분들 다 감사하구요... 좋은 하루 즐거운 하루 되시길 바랍니다.
  • Profile
    보들레르 2002.01.25 23:26
    고기님.. 그 코드는 활성화 되어있는 윈도우에게

    엔터키를 날리는 문장입니다.

    만약 메세지윈도우 가 활성화 되어 있지 않다면 무용지물인 코드이지요..

    으음.. 그냥 아래 제가 쓴 코드 사용하지지..

    꼬옥 한줄로 해결해야 한다는건 좀 억지성이..^_^;;

    그럼~ 즐거운 프로그래밍 하시길..



  • Profile
    죠스고기 2002.02.20 22:08

    맞는 말씀입니다.

    활성화 되어있지 않으면 무용지물이죠.

    제가 바버죠 ~~ ^^

    그래서 님들께서 가르쳐 주신 모든 방법들을 동원해서 하나의

    코드를 완성했습니다.

    물론 한줄로는 못 줄였죠... 그 바람에 소주값 날아갔죠..^^

    그래도 이렇게 많은 것을 배울 수 있는 좋은 기회였던것 같습니다.

    모든 분들께 감사드립니다.
  • Profile
    보들레르 2002.01.25 20:06
    메세지 다이얼로그의 클래스 명과 캡션을 이용해

    핸들을 구하고, 적당한 시간뒤 죽여버리면 되겠네요.

    그럼~ 항상 즐거운 프로그래밍 하시길~~~


    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled := True;
      ShowMessage('aaaaaaaaaaaa');
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      H : HWND;
    begin
      H := FindWindow('TMessageForm', 'Project1');
      if H <> 0 then
        SendMessage(H, WM_CLOSE, 0, 0);
      Timer1.Enabled := False;
    end;








  • Profile
    박정모 2002.01.26 00:43
    볼랜드 포럼에 제가 등록한 방법입니다.
    참고 하시길...

    http://www.bcbdn.com/impboard/impboard.dll?action=read&db=del_qna&no=7916


  • Profile
    이낭하 2002.01.25 19:03
    제가 알고 있기로 ShowMessage에서 님과 같은 방법으로 죽일수 있는 없습니다.
    일단 showmessage는 모달로 어떻게든 사용자에게 전달하고자 하는 메시지를 보여 주고자 만들거라서 그렇게 죽일수는 없죠..
    님이 원하는 기능을 같도록 override 시켜 버리거나,, 아니면,, 메시지 폼을 님의 설정에 맞게 만드시면 됩니다..

    열흘나비였슴당....

  • Profile
    죠스고기 2002.01.25 21:23
    결국에는 맹글어야 한다는 얘기군요.

    다이얼로그 있는 코드 보니까 만들기는 어렵지 않지만.

    문제는 단 한줄의 코드로 박살을 내야 한다는 거죠.

    단 한줄 ~~ ㅠㅠ

    울 과장님이랑 내기 했거든요... 한 줄로 죽여보이겠다구

    내가 미쳤쥐 ~~~ ㅠㅠ
  • Profile
    보들레르 2002.01.25 21:49
    안녕하세요? 구창민입니다.

    위에 제가 쓴 답글을 못 보셨나요? ^_^;

    으음.. 위의 코드가 마음에 안드셨나 본데..^_^;

    여러가지 방법이 있습니다.

    좀더 뽀다구 나는 코드를 만들어 볼까요?

    메세지 폼의 핸들을 구하고 그의 자식핸들을 구해서

    버튼을 클릭해 보이죠.

    그럼~ 즐거운 프로그래밍 하시길~~

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      H, Child, BH : HWND;
      C : Array[0..127] of Char;
      S : String;
    begin
      H := FindWindow('TMessageForm', 'Project1');
      if H <> 0 then
      begin
        Child := GetWindow(H, GW_CHILD);
        while Child <> 0  do
        begin
          if GetClassName(Child, C, SizeOf(C)) > 0 then
          begin
            S := StrPAS(C);
            if UpperCase(S) = 'TBUTTON'  then
            begin
              PostMessage(Child, CN_COMMAND, BN_CLICKED, 0);
              break;
            end;
            Child := GetWindow(Child, GW_HWNDNEXT);
          end;
        end;
      end;
      Timer1.Enabled := False;
    end;


    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled := True;
      ShowMessage('aaaaaaaaaaaa');
    end;

    end.






  • Profile
    하얀까마귀 2002.01.25 21:23
    안녕하세요 하얀까마귀 입니다.

    소스를 보시면 결국 ShowMessage는

    CreateMessageDialog 이라는 함수를 이용해서. TMessageForm을 생성

    시키는 함수입니다. TMessageFrom 은 TFrom의 자손이구요..

    그리고 요넘은 당연히 ShowModal 하게 되어 있죠..

    음. 이 클래스 간단한거거덩요? 그냥 통째로 이거 다시 만들어도 될꺼구요.

    아니면  FindWindow 뭐 이런거 쓰지 말구.

    직접 CreateMessageDialog 함수 사용하면 이넘이 넘겨주는게 TForm 형
    이거든요?
    여기서 이넘을 맘대로 쓰시면 되죠.. 음...

    아니면 뭐 타이머 같은거 가지고 간단하게 해도 되구..

    예를 들면

      fMes := CreateMessageDialog('aaa', mtCustom, [mbOK]);
      Timer1.Enabled := True;
      try
        fMes.Position := poScreenCenter;
        fMes.ShowModal;
       finally
         if Assigned(fMes) AND FmES.showing then fMes.Free;
       end;

    이렇게 하구 타이머는 5초간격으로 하구요.
    타이머에서.
    Timer1.Enabled := FaLSE;
    if Assigned(fMes) AND FmES.showing then fMes.Free;

    요렇게 하면 되긴 할것 같네요..

    별로 맘에는 안드는데.. 그냥 TMessageForm을 하나 만드는게 더 좋을듯 하네요.. 그럼..

    • BlueSea
    • 2002.01.25 21:11
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 배건환
      2002.01.25 21:31
      퀵레포트에 보면 Quick Rep속성 중에 Band에 보면 HasDetail이라는 것이 있습니다. 이것을 True로 해주고 ...
    • 5782_Click
      2002.01.25 21:15
      혹시 Quickrep의 Dataset 속성을 넣어주셨는지여...
    • 브래드
    • 2002.01.25 21:11
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이광수
      2002.01.25 23:30
      lParam := MakeLong(  smallint(point.x), smallint(point.y) ); post or Sendmessage ...
    • 5782_Click
      2002.01.25 21:26
      Point사용법은요.. 변수 선언시.. Point : ^integer ; <= 자료형 앞에 꺽쇠표시... Point := @LP...
    • 어린왕자A
      2002.01.25 21:39
      약간 이상한 듯.. 좌표값..TPoint를 LParam으로 주고 받고 할라구 그러는데요. y값은 어떻게 하나요???...
    • 서정길
    • 2002.01.25 20:29
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 황정선
    • 2002.01.25 20:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 5782_Click
    • 2002.01.25 19:36
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 죠스고기
      2002.01.25 23:15
      모든 분들 감사합니다. 결국엔 해결 했구요.... 제가 질문을 잘 못해서 여러분들을 헷갈리게 했나 봅...
    • 보들레르
      2002.01.25 23:26
      고기님.. 그 코드는 활성화 되어있는 윈도우에게 엔터키를 날리는 문장입니다. 만약 메세지윈도우 ...
    • 죠스고기
      2002.02.20 22:08
      맞는 말씀입니다. 활성화 되어있지 않으면 무용지물이죠. 제가 바버죠 ~~ ^^ 그래서 님들께서 ...
    • 보들레르
      2002.01.25 20:06
      메세지 다이얼로그의 클래스 명과 캡션을 이용해 핸들을 구하고, 적당한 시간뒤 죽여버리면 되겠네요. ...
    • 박정모
      2002.01.26 00:43
      볼랜드 포럼에 제가 등록한 방법입니다. 참고 하시길... http://www.bcbdn.com/impboard/impboard.dll?...
    • 이낭하
      2002.01.25 19:03
      제가 알고 있기로 ShowMessage에서 님과 같은 방법으로 죽일수 있는 없습니다. 일단 showmessage는 모달로...
    • 죠스고기
      2002.01.25 21:23
      결국에는 맹글어야 한다는 얘기군요. 다이얼로그 있는 코드 보니까 만들기는 어렵지 않지만. 문제는 ...
    • • • •
    • 박희경
    • 2002.01.25 13:12
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김대건
      2002.01.25 13:45
      --------------- with Form1.memberSQLQuery do      begin   &...
    • 박희경
      2002.01.25 19:42
    • 조성택
    • 2002.01.25 10:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2002.01.25 12:21
      일반적으로 c언어로 모듈을 작성할 때에는 h file에 interface(declaration)을, cpp file에 implementatio...
    • 델사랑
    • 2002.01.25 09:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • anderson
      2002.01.29 05:04
      1. 파이어월이 깔렸을 때와 같은 현상이군요. 2. "외부 --> 외부"  로 해보세요...
    • 이경문
      2002.01.25 12:16
      뾰족한 해결방법이 있는 것은 아닙니다. internet 프로그래밍을 하실 때 다음을 염두에 두어야 합니다. ...
    • 배건환
      2002.01.25 21:12
      보통 UpdateSQL컴포넌트에 지정되어 있으면 자동으로 Update가 됩니다. 그래서 수정하면 바로 데이터베...
    • 고빙학
    • 2002.01.25 08:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 성낙균
      2002.01.25 08:19
      C:Program FilesCommonfilesBorlandSharedBDEdatapump.exe 를 이용해보세요... 그럼 ...
    • 이영주
    • 2002.01.25 06:33
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박영&#48
    • 2002.01.25 06:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • irookie
      2002.01.25 21:15
      저도 같은 경우가 있었는데... 원인은) FTPDemo.exe라는 파일이 실행이 되고 있는데, 같은 위치에 같...
    • 이호성
    • 2002.01.25 05:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 보들레르
      2002.01.25 20:16
      안녕하세요~ 구창민입니다. 버튼을 SpeedButton 으로 바꾸시구요. 간단한 서브클래싱을 하시면 됩...
    • 5782_Click
      2002.01.25 18:48
      Tbutton으로 하니까 안대더군염... 저더 생각 못해봤눈뎅... Bit버튼의 onmousemove이벤트에다가 함 해...
    • PINE
    • 2002.01.25 04:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 5782_Click
      2002.01.25 19:04
      음...헤깔리네여..질문이..ㅠ.ㅠ --------------------------------------------------------- -------...
    • 보들레르
      2002.01.25 06:28
      //클릭1 PageControl1.ActivePage := 0 //탭쉬트 1 폼.쏘모달; //클릭2 PageControl1.ActivePage := ...
    • 김화수
      2002.01.25 19:37
      답변고맙습니다. 음... 해결이 되었습니다. 근데, ActivePage를 하니까 형이 안맞다구 나오더라구요. 그...
    • 김화수
      2002.01.25 03:48
      저는 이렇게 했습니다. 맞는 방법인지는 잘모르지만.... 삭제가 되더라구요...*^^ 메뉴에서 Commponet의 ...
    • 이낭하
      2002.01.25 18:32
      Configure(Commponet) palette에서 삭제하는 방식은 옳지 않습니다. 일단 히든으로 처리되었기 때문에 콤...
    • 황남철
      2002.01.25 03:56