본문 바로가기
Delphi Tip/+Tip

MessageBox와 MessageDlg의 차이점

by MonoSoft 2022. 4. 15.
728x90
반응형

MessageBox와 MessageDlg의 차이점

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  nID := MessageDlg('1234567', mtCustom, [mbOK, mbCancel], 0);

  nID := MessageBox(0, '1234567', '123455', MB_OKCANCEL);

end;

 

이와 같은 코드가 있을 때 

MessageBox는 Message창이 정상적으로 닫힌다.

하지만, MessageDlg나 ShowMessage는 Message창이 닫히질 않는다.

하물며, ModalResult도 반환도 하지 않는다.

MessageBox의 모달과 MessageDlg의 모달이 차이점이 과연 멀까?

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  nID := MessageDlg('1234567', mtCustom, [mbOK, mbCancel], 0);

  showmessage(inttostr(nID));

  //nID := MessageBox(0, '1234567', '123455', MB_OKCANCEL);

end;

 

같은 모달창이라도 

MessageBox는 창이 닫히지만, 

MessageDlg창은 닫히질 않는다.

MessageBox는 모달창으로 보여지지 않는다.

여러개의 창이 동시에 띄워지는거 보면 그 이유알수있다.

MessageBox는 윈도우API이며, 

그 외는 vcl에서 모달을 흉내내고 있는 것이다.

그리고 vcl 버전에 따라서 동작이 다를 수 있다.

 

중요한 건.

MessageBox 윈도우API는 메세지 처리 루틴을 운영체제 자체에서 

개별적으로 갖고있고, 

MessageDlg는 vcl에서 메세지를 처리한다.

그리고 모달이냐 아니냐에 따라 vcl에서 메세지 처리를 다르게 한다.

즉, 윈도우API인 MessageBox는 운영체제 자체에서 

메세지 처리루틴을 개별적으로 갖고있어서 

창이 닫히는데 있어서 문제가 없는거고.

모달을 흉내내도록 vcl에서 만들어진 

MessageDlg는 vcl 버전에 따라

어떤 식으로 만들어졌냐에 따라 창이 닫히는데 

문제가 있을 수 있다는 것

 

728x90
반응형

댓글