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 버전에 따라
어떤 식으로 만들어졌냐에 따라 창이 닫히는데
문제가 있을 수 있다는 것
'Delphi Tip > +Tip' 카테고리의 다른 글
메모 프린터 기타 (0) | 2022.06.29 |
---|---|
델파이 엑셀(Excel) 수식 포함 저장하기 (0) | 2022.04.18 |
Windows PC보호 해결방법 전자서명 후 배포 (0) | 2022.04.14 |
델파이 컴파일러 지시어 {$IFDEF} (0) | 2022.04.12 |
프로그램간 메세지 전송 (0) | 2022.04.11 |
댓글