본문 바로가기

파이어몽키

[XE7] 안드로이드에서 MessagDlg 사용방법(주의 점)

사용자 의견을 묻기 위해 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) 모두가 해당 됩니다.


참고