C++Builder XE7 - モバイルアプリでダイアログボックス(ShowMessage/InputBox/InputQuery/MessageDlg)

Posted by on in UI

高橋(智)です。

RAD Studio XE7(Appmethod 1.15)のリリースでは、FireMonkeyを用いたiOS/Android向けモバイルアプリを作成する際にとても重要な変更がありました。リリースノートを見ますと、ShowMessage/InputBox/InputQuery/MessageDlgのダイアログボックスが非ブロッキング呼び出しに変更さたとあります。

[Delphi XE7 および C++Builder XE7 の新機能 - ダイアログ ボックスのメソッドでは閉じる際の処理を行う無名メソッドをサポート]

つまり、GUIのイベントを止めてしまうのを防ぐため、TButtonのイベントハンドラ内でそれらのメソッドを呼び出すと、ダアログボックスが表示される前にすぐに制御が戻ってくるようになりました。これまでのVCLアプリやFireMonkeyアプリで使用していたようなコードのまま実行すると、以下のようなエラーメッセージが表示されることでしょう。

b2ap3_thumbnail_showmessage1.jpg

Delphi(Object Pascal)言語で開発している場合は、無名メソッドのコードブロックを利用することで、ダイアログボックスを閉じたタイミングや入力値を知ることは簡単です。が、C++言語で呼び出す場合にはDelphiの無名メソッドに適合させるためのコードが必要になります。例えば以下のように Invoke メソッドを実装したTCppInterfacedObjectクラスの派生クラスを作成し、そのインスタンスを渡すことになります(※これらのコードは、Win32/Win64/OS Xのアプリでも動作します)。

b2ap3_thumbnail_showmessage2.jpg

実際にAndroid端末で動作させると以下のように表示されるのが確認できます。

 b2ap3_thumbnail_showmessage3.jpg



About
Gold User, Rank: 87, Points: 7

Comments

  • Tomohiro T2117
    Tomohiro T2117 Wednesday, 15 October 2014

    しばらくは、以前から稼働しているWordPressのTeamJapanのブログサイトと、こちらの新しいEasyBlogのサイトの両方が稼働するのですが、前のブログサイトのほうが使い易かった...

  • Please login first in order for you to submit comments
  • Page :
  • 1

Check out more tips and tricks in this development video: