2016-11-01 3 views
0

JavaやAndroidスタジオを使って開発されたアンドロイドアプリを使用しているとき、ダイアログプロンプトに応答するまで、メッセージダイアログプロンプトが次の行の実行を継続することがわかりました。私はTDialogService.MessageDialog(AMessage、ADialogType、AButtons、ADefaultButton、0、procedurexyz)を使ってこれを実行しようとしています。プロンプトが表示されている間、次の行が実行され、ユーザーが次の操作を決定すると思われるので、プロンプトが役に立たなくなります。アクティブなブロックメッセージダイアログプロンプトを表示するには、誰からも助けが必要です。Delphi fmx blocked messageダイアログボックス

+0

ブロックのダイアログでは、Androidでサポートされていません。コールバック関数を使用します。 – kami

+0

どのバージョンのDelphiですか? FMXはバージョン間で変更され、使用しているものは関連性があります。 。 –

+0

@kamiは、あなたがそのようなTDialogService.MessageDialog(AMessage、ADialogType、AButtons、ADefaultButton、0、//期待通り確認が表示されることを確認する匿名メソッドを使用します 手順 としてコールバックを意味しません(constがのaResult:TModalResult) を開始 ; mrNo ShowMessage( '[はい]を選択した'): {異なるメッセージを押されたボタンの検出および表示} mrYESのケースのaResult ShowMessage( 'いいえを選択した'); 端; 端) 私はそれがどのように行われたのか、Javaで達成されたのか疑問に思っているからです。 – niglng

答えて

1

あなたの提案の後に@カミ私はこれを思い付いて、それは非常にうまくいっていますが、提案や追加があります。


function MsgBox(const AMessage: string; const ADialogType: TMsgDlgType; const AButtons: TMsgDlgButtons; 
    const ADefaultButton: TMsgDlgBtn): Integer; 
var 
    myAns: Integer; 
    IsDisplayed: Boolean; 
begin 
    myAns := -1; 
    IsDisplayed := False;

While myAns = -1 do 
Begin 
    if IsDisplayed = False then 
    TDialogService.MessageDialog(AMessage, ADialogType, AButtons, ADefaultButton, 0, 
      procedure (const AResult: TModalResult) 
      begin 
       myAns := AResult; 
       IsDisplayed := True; 
      end); 

    IsDisplayed := True; 
    Application.ProcessMessages; 
End; 

Result := myAns; 

end; 

1

Embarcadero documentation says、そのAndroidプラットフォーム上で、あなたはこのように、あなたは回避策を使用することができ、「ブロッキング」モードを取得する唯一の非ブロッキングShowMessageのための呼び出し、MessageDialogmyForm.ShowModal

を使用することができます。

function myMessageDialog(const AMessage: string; const ADialogType: TMsgDlgType; 
    const AButtons: TMsgDlgButtons; const ADefaultButton: TMsgDlgBtn): Integer; 
var 
    mr: TModalResult; 
begin 
    mr:=mrNone; 
    // standart call with callback anonimous method 
    TDialogService.MessageDialog(AMessage, ADialogType, AButtons, 
    ADefaultButton, 0, 
    procedure (const AResult: TModalResult) 
    begin 
     mr:=AResult 
    end); 

    while mr = mrNone do // wait for modal result 
    Application.ProcessMessages; 
    Result:=mr; 
end; 
+0

試してみましたが動作しませんでした – niglng

関連する問題