사용자 의견을 묻기 위해 MessageDlg 함수를 많이 사용하는데요. 안드로이드에서 MessageDlg 사용 시 아래와 같인 메시지가 표시되어 해결방법 공유합니다.
Blockin dialogs not implemented on this platform.
❑ 원인
- 안드로이드에서는 블로킹 대화상자를 지원하지 않습니다.
- 하지만 컴파일 시 오류가 나지 않기 때문에 구현 시 주의가 필요합니다.
❑ 해결방안
- ACloseDialogProc 파라메터가 있는 MessageDlg 함수를 이용해야 합니다.
- ACloseDialogProc은 MessageDlg에서 버튼을 누른 이후의 동작을 가진 익명메소드 입니다.
- 아래 예제를 참고하세요.
MessageDlg('Choose a button:', System.UITypes.TMsgDlgType.mtInformation, [ System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo, System.UITypes.TMsgDlgBtn.mbCancel ], 0, procedure(const AResult: TModalResult) begin case AResult of { Detect which button was pushed and show a different message } mrYES: ShowMessage('You chose Yes'); mrNo: ShowMessage('You chose No'); mrCancel: ShowMessage('You chose Cancel'); end; end );
- 해당 이슈는 블로킹 형태의 대화상자(InputBox, InputQuery, MessageDlg, ShowMessage) 모두가 해당 됩니다.
참고
- http://community.embarcadero.com/index.php/blogs/entry/xe7-dialog-box-methods-support-anonymous-methods-to-handle-their-closing
- 샘플코드 - https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE7/Object%20Pascal/Mobile%20Snippets/MessageAlerts/