Comments
Description
Transcript
RAD Studio iOS チュートリアル
製品ドキュメント RAD Studio iOS チュートリアル: Delphi による iOS アプリケーション開発 バージョン XE4 © 2013 Embarcadero Technologies, Inc. Embarcadero、Embarcadero Technologies のロゴ、およびすべての Embarcadero Technologies の製品名またはサービス名は、Embarcadero Technologies, Inc. の商標または登録商標 です。その他の商標名に関する権利はすべてその所有者に帰属します。 Embarcadero Technologies, Inc. は、アプリケーション開発者やデータベースプロフェッショナルに向け、使用する プラットフォームやプログラミング言語に関係なく、最適なシステム設計、より高速な構築、より高品質な実行を実 現するツールを提供する、先進ベンダーです。「フォーチュン 100」のうち 90 以上の企業、そして世界で 300 万以 上の活発なコミュニティがエンバカデロの製品を採用し、生産性の向上、コストの削減、変更管理や互換性管理の簡 素化、技術革新を実現しています。主要製品には次のものがあります: Embarcadero® Change Manager™、CodeGear™ RAD Studio、DBArtisan®、Delphi®、ER/Studio®、JBuilder® and Rapid SQL®。1993 年設立のエンバカデロは、サンフランシスコに本社を置き、世界各国に支社を展開していま す。エンバカデロについては、www.embarcadero.com をご覧ください。 2013 年 4 月 Embarcadero Technologies 2 目次 Delphi による iOS アプリケーション開発 ......................................................................................... 8 セットアップ .................................................................................................................................... 8 基本的なユーザー インターフェイス要素の使用 .......................................................................... 8 デバイス機能の利用 ......................................................................................................................... 9 データベースへのアクセス............................................................................................................ 10 関連項目 .......................................................................................................................................... 10 Mac に開発環境をセットアップする ................................................................................................ 11 Mac 側の要件 .................................................................................................................................. 11 iOS シミュレータで iOS アプリケーションを実行するための Mac の構成手順 ...................... 11 ステップ 1:プラットフォーム アシスタントをインストールする ...................................... 12 ステップ 2:プラットフォーム アシスタントを実行する...................................................... 13 ステップ 3:Mac に Xcode をインストールする .................................................................... 14 この後のステップ....................................................................................................................... 14 iOS デバイスで iOS アプリケーションを実行するための Mac の追加の構成手順 .................. 15 ステップ 1:Mac に Xcode コマンド ライン ツールをインストールする............................ 15 ステップ 2:デベロッパ アカウントを登録する ..................................................................... 16 ステップ 3:開発用証明書を要求、ダウンロード、インストールする................................ 16 ステップ 4:デバイスを開発用に登録する ............................................................................. 18 ステップ 5:プロビジョニング プロファイルを作成してインストールする ....................... 18 関連項目 ...................................................................................................................................... 19 Windows PC に 開発環境をセットアップする................................................................................. 21 RAD Studio 環境のセットアップ .................................................................................................. 21 Mac 用の接続プロファイルを作成する.................................................................................... 21 Mac に接続された iOS デバイス用に開発システムに SDK を追加する ................................ 23 関連項目 ...................................................................................................................................... 26 FireMonkey iOS アプリケーションを作成する................................................................................ 27 取りかかる前に............................................................................................................................... 27 ステップ 1:iOS 用 FireMonkey アプリケーションを新規作成する ......................................... 27 ステップ 2:FireMonkey iOS フォームにコンポーネントを配置する ...................................... 28 ステップ 3:ユーザーがボタンをクリックしたときの イベント ハンドラを Delphi で記述する...................................................................................... 32 ステップ 4:Mac(iOS シミュレータ)上で iOS アプリケーションをテストする ................. 33 Embarcadero Technologies 3 ステップ 5:接続された iOS デバイス上で iOS アプリケーションをテストする ................... 34 関連項目 .......................................................................................................................................... 35 さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する ........... 36 FireMonkey iOS アプリケーションのボタン ............................................................................... 36 ボタン コンポーネントのルック アンド フィールを定義する ................................................... 37 ボタン コンポーネントを使用してセグメント コントロールを作成する ................................. 38 ツールバー コンポーネント上にスコープ バーを作成する ........................................................ 41 関連項目 .......................................................................................................................................... 41 iOS アプリケーションでカレンダー コンポーネントを使用して日付を選択する ....................... 42 FireMonkey iOS アプリケーションのカレンダー ........................................................................ 42 ユーザーによる日付変更のイベント ハンドラを実装する ......................................................... 43 関連項目 .......................................................................................................................................... 44 iOS アプリケーションでコンボ ボックス コンポーネントを使用して リストから項目を選択する................................................................................................................ 45 FireMonkey iOS アプリケーションで選択コントロールを実装する ......................................... 45 コードを使って項目のリストを構築する..................................................................................... 47 特定の項目を表示する ................................................................................................................... 48 ユーザーによる選択のイベント ハンドラを実装する................................................................. 49 関連項目 .......................................................................................................................................... 50 iOS アプリケーションで Web ブラウザ コンポーネントを使用する ............................................ 51 ステップ 1:ユーザー インターフェイスを設計する ................................................................. 51 ステップ 2:ユーザーが編集コントロールで URL を変更すると Web ページを開くよう イベント ハンドラを記述する....................................................................................................... 53 Web ページを開くための共通メソッドを実装する ................................................................ 54 OnChange イベントのイベント ハンドラを実装する ............................................................ 55 Enter キーをサポートするイベント ハンドラを実装する ...................................................... 56 "戻る" ボタンのイベント ハンドラを実装する....................................................................... 56 ステップ 3:Web ブラウザ アプリケーションに適したキーボードを選択する ...................... 57 関連項目 .......................................................................................................................................... 58 iOS アプリケーションでタブ コンポーネントを使用してページを表示する ............................... 59 FireMonkey iOS アプリケーションのタブ ................................................................................... 59 フォーム デザイナを使用してタブ ページを設計する................................................................ 59 タブのカスタム アイコンを使用する ........................................................................................... 63 Embarcadero Technologies 4 タブ コントロール内のコントロールを定義する ........................................................................ 66 実行時にページを変更する............................................................................................................ 67 ユーザーがタブをタップしたときに ........................................................................................ 67 アクションとアクション リストを使用して............................................................................ 68 ソース コードによって .............................................................................................................. 71 関連項目 .......................................................................................................................................... 72 iOS アプリケーションでリスト ボックス コンポーネントを使用して テーブル ビューを表示する............................................................................................................... 73 リスト ボックス コンポーネントに項目を作成する ................................................................... 73 ヘッダーを追加する ....................................................................................................................... 75 リストにグループ ヘッダー/フッターを追加する ....................................................................... 77 リスト項目を別のグループ化された項目として表示する .......................................................... 78 リスト ボックス項目にチェック ボックスなどのアクセサリを追加する ................................. 79 リスト ボックス項目にアイコンを追加する ................................................................................ 79 項目に詳細情報を追加する............................................................................................................ 80 コードからリスト ボックスに項目を追加する ............................................................................ 80 検索ボックスを追加する ............................................................................................................... 82 関連項目 .......................................................................................................................................... 83 iOS アプリケーションでレイアウトを使用して フォームのさまざまなサイズや向きを調整する ............................................................................. 84 FireMonkey コンポーネントはどれも所有者、親、子を持つことができる ............................. 84 FireMonkey コンポーネントのレイアウト関連共通プロパティを使用する ............................. 85 Align プロパティを使用する ..................................................................................................... 85 Margins プロパティを使用する ................................................................................................ 86 Padding プロパティを使用する ................................................................................................ 86 Anchors プロパティを使用する ................................................................................................ 87 TLayout コンポーネントを使用する ............................................................................................. 88 多くの項目を含むインターフェイスの扱い:TVertScrollBox コンポーネントを使用する ..... 88 関連項目 .......................................................................................................................................... 90 iOS アプリケーションで写真を撮って共有する .............................................................................. 91 アプリケーションのユーザー インターフェイスを構築する ..................................................... 92 iOS デバイスのカメラで写真を撮る............................................................................................. 92 iOS デバイスのフォト ライブラリの写真を使用する ................................................................. 93 Embarcadero Technologies 5 写真を共有または印刷する............................................................................................................ 94 関連項目 .......................................................................................................................................... 95 iOS デバイスの位置センサを使用する ............................................................................................. 97 ユーザー インターフェイスを設計する ....................................................................................... 98 位置センサ ...................................................................................................................................... 99 位置センサ コンポーネントから位置情報(緯度、経度)を読み取る ...................................... 99 TWebBrowser コンポーネントで Google マップを使用して現在の位置を表示する ............ 100 逆ジオコーディングを使用する .................................................................................................. 101 リスト ボックス コンポーネントに人が読み取れる住所を表示する....................................... 104 関連項目 ........................................................................................................................................ 104 iOS デバイスの通知センターを使用する ....................................................................................... 105 3 つの基本的な通知(警告)方法 ............................................................................................... 105 アプリケーション アイコンのバッジ ..................................................................................... 105 iPad の通知バナー .................................................................................................................... 105 通知ダイアログ ........................................................................................................................ 105 iPad の通知センター ................................................................................................................ 105 通知サービスにアクセスする...................................................................................................... 106 コードからアイコン バッジの数字を設定する .......................................................................... 107 通知のスケジュールを設定する .................................................................................................. 108 スケジュールされた通知メッセージを更新またはキャンセルする......................................... 109 通知メッセージをすぐに表示する .............................................................................................. 110 通知バナーと通知ダイアログ...................................................................................................... 111 通知ダイアログにアクションを追加する................................................................................... 113 関連項目 ........................................................................................................................................ 113 iOS アプリケーションで InterBase ToGo を使用する .................................................................. 114 dbExpress を使用してデータベースに接続する........................................................................ 114 ユーザー インターフェイスを設計しセットアップする ........................................................... 115 データに接続する ......................................................................................................................... 116 アプリケーションを iOS に配置する.......................................................................................... 119 InterBase ToGo、dbExpress ドライバ、データベース ファイルを iOS に配置する......... 119 iOS 上のローカル データベース ファイルに接続するようコードを変更する.................... 121 iOS シミュレータまたは iOS デバイス上でアプリケーションを実行する ............................. 122 トラブルシューティング ............................................................................................................. 123 Embarcadero Technologies 6 InterBase のライセンスの問題 ................................................................................................ 123 例外処理の問題 ........................................................................................................................ 123 よくあるエラーと解決方法 ..................................................................................................... 125 関連項目 ........................................................................................................................................ 125 iOS アプリケーションで SQLite を使用する ................................................................................. 126 dbExpress を使用してデータベースに接続する........................................................................ 126 Windows 環境で開発用にデータベースを作成する .................................................................. 127 [データ エクスプローラ]でデータベースを作成する....................................................... 127 [データ エクスプローラ]でテーブルを作成する .............................................................. 128 ユーザー インターフェイスを設計しセットアップする ........................................................... 129 データに接続する ......................................................................................................................... 130 ユーザーがリストの項目を選択したときに削除ボタンを表示するための イベント ハンドラを作成する..................................................................................................... 132 リストにエントリを追加するための追加ボタン用のイベント ハンドラを作成する ............. 132 リストからエントリを削除するための削除ボタン用のイベント ハンドラを作成する ......... 135 iOS 上のローカル データベース ファイルに接続するようコードを変更する ........................ 136 iOS デバイス上での SQLite データベースの場所を指定する .............................................. 136 テーブルが存在しなければ作成する ...................................................................................... 136 iOS シミュレータまたは iOS デバイス上でアプリケーションを実行する ............................. 138 関連項目 ........................................................................................................................................ 138 iOS クライアント アプリケーションからエンタープライズ データベースに接続する............. 139 中間層(DataSnap サーバー)を作成する ................................................................................ 140 DataSnap サーバー VCL アプリケーションを作成する ........................................................ 140 DataSnap サーバー上のデータセットを定義する................................................................. 142 DataSnap サーバーのデータセットを公開する .................................................................... 144 DataSnap サーバーを実行する ............................................................................................... 144 DataSnap サーバーに接続する iOS アプリケーションを作成する.......................................... 145 MIDAS ライブラリを iOS シミュレータに配置する ................................................................. 148 iOS シミュレータまたは iOS デバイス上でアプリケーションを実行する ............................. 149 関連項目 ........................................................................................................................................ 149 Embarcadero Technologies 7 Delphi による iOS アプリケーション開発 統合されたこれら一連のチュートリアルでは、RAD Studio を使用した iOS アプリケーション の開発について段階的に説明しています。 • 最初のセットアップ チュートリアルの後、各チュートリアルでは、FireMonkey ツール を使用して iOS アプリケーションを作成する方法を示しています。 • これらのチュートリアルでは、iOS アプリケーションでネイティブのルック アンド フ ィールを実現するための推奨される FireMonkey コンポーネントを実際に使用して説明 しています。 セットアップ • Mac に開発環境をセットアップする • Windows PC に開発環境をセットアップする 基本的なユーザー インターフェイス要素の使用 • FireMonkey iOS アプリケーションを作成する • さまざまなスタイルを持つボタン コンポーネントを iOS アプリ ケーションで使用する Embarcadero Technologies 8 • iOS アプリケーションでカレンダー コンポーネントを使用して 日付を選択する • iOS アプリケーションでコンボ ボックス コンポーネントを使用 してリストから項目を選択する • iOS アプリケーションで Web ブラウザ コンポーネントを使用 する • iOS アプリケーションでタブ コンポーネントを使用してページ を表示する • iOS アプリケーションでリスト ボックス コンポーネントを使用 してテーブル ビューを表示する • iOS アプリケーションでレイアウトを使用してフォームのさま ざまなサイズや向きを調整する デバイス機能の利用 • Embarcadero Technologies iOS アプリケーションで写真を撮って共有する 9 • iOS デバイスの位置センサを使用する • iOS デバイスの通知センターを使用する データベースへのアクセス • iOS アプリケーションで InterBase ToGo を使用する • iOS アプリケーションで SQLite を使用する • iOS クライアント アプリケーションからエンタープライズ デー タベースに接続する 関連項目 • FireMonkey クイック スタート • FireMonkey iOS アプリケーションの作成 • FireMonkey アプリケーションの設計 • iOS サンプル コード • iOS モバイル アプリケーション開発 Embarcadero Technologies 10 Mac に開発環境をセットアップする iOS ターゲット プラットフォーム向けの FireMonkey アプリケーションは、最初、Mac で使用 可能な iOS シミュレータでテストされます。テスト工程の後半では、iOS デバイス ターゲット プラットフォームを使用するため、Mac に接続されたテスト用の iOS デバイスが必要になりま す。 • このチュートリアルの前半では、Mac 上の iOS シミュレータで iOS アプリケーション を実行するために行わなければならない手順を説明します。 • このチュートリアルの後半では、iOS デバイスで iOS アプリケーションを実行するため に必要な追加の手順を説明します。 Mac 側の要件 • OS X 10.7 Lion または 10.8 Mountain Lion (どちらの OS も、従来の PowerPC ベースおよび 680x0 ベースの Macintosh システム ではサポートされていません。2007 年以降の Mac はすべて Intel ベースで、2008 年以 降はすべて 64 ビットです。これは Lion での必要条件です。) • iOS 5.1 以降 • Xcode および iOS SDK の最新版と Xcode コマンド ライン ツールがインストールされ ていること o いずれか 1 つの Apple デベロッパ プログラムのメンバであること(これについ ては、このトピックの「デベロッパ アカウントを登録する」で説明します) • iOS デバイスが USB ポートで Mac に接続されていること(デバイス上での iOS アプリ ケーションのテストや実行に必要) iOS シミュレータで iOS アプリケーションを実行するための Mac の構成手順 iOS アプリケーションを Mac 上の iOS シミュレータに配置するには、以下のツールを Mac に インストールする必要があります。 • プラットフォーム アシスタント(PAServer) Embarcadero Technologies 11 RAD Studio では、デバッグ用にプラットフォーム アシスタントを使用します。このア プリケーションは、Mac 上にインストールして実行する必要があります。 • Xcode Xcode は、Mac 上で動作する開発およびデバッグ用の環境であり、Mac OS X アプリケ ーションおよび iOS アプリケーションに必要な開発用ファイルが備わっています。 ステップ 1:プラットフォーム アシスタントをインストールする 先に述べたように、PC から iOS シミュレータまたは iOS デバイスに iOS アプリケーションを 配置するには、Mac 上でプラットフォーム アシスタントを実行しておく必要があります。 プラットフォーム アシスタントの Mac OS X インストーラは、RADPAServerXE4.pkg という 名前で、次の 2 つの場所に置かれています。 • RAD Studio インストール ディレクトリの PAServer フォルダ。 例: C:\Program Files\Embarcadero\RAD Studio\n.n\PAServer\RADPAServerXE4.pkg • Web 上(Mac へのダウンロード用) http://installers.codegear.com/release/radstudio/11.0/PAServer/RADPAServerXE4.pkg Embarcadero Technologies 12 詳細は、「Mac でのプラットフォーム アシスタントのインストール」を参照してください。 ステップ 2:プラットフォーム アシスタントを実行する Mac のファインダで、次のようにして .app ファイル(RAD PAServer XE4.app)を起動します。 1. 最上位の Applications フォルダに移動します。 2. RAD PAServer XE4.app をダブルクリックして、プラットフォーム アシスタントを起動 します。 [ターミナル]ウィンドウが開き、プラットフォーム アシスタントのバナーと、パスワ ード入力を求める次のメッセージが表示されます。 接続プロファイル パスワード <パスワードがない場合はただ Enter キーを押す>: Embarcadero Technologies 13 3. 次に、プラットフォーム アシスタントでアプリケーションをデバッグできるよう(別の プロセスを制御できるよう)、Mac ユーザー パスワードを入力する画面が開きます。 パスワードを入力し、[Take Control]を選択します。 プラットフォーム アシスタントの実行の詳細は、「Mac でのプラットフォーム アシスタント の実行」を参照してください。 ステップ 3:Mac に Xcode をインストールする Xcode は、Mac 上の開発/デバッグ環境であり、Mac OS X アプリケーションおよび iOS アプリ ケーションに必要な開発用ファイルを提供しています。 次のどの情報源からでも Xcode をインストールできます。 • "Mac OS X Install" DVD で Optional Installs フォルダ内の Xcode.mpkg をダブルクリッ クして Xcode をシステムにインストールします。 • Mac App Store で無償の Xcode をダウンロードします。 • Apple デベロッパとして登録している場合は、Xcode の最新バージョンをバンドル (.dmg)としてダウンロードできます。登録して Xcode をダウンロードする手順は以 下のとおりです。 1. http://developer.apple.com/programs/register/ で Apple デベロッパとして登録 します(無料)。 2. https://developer.apple.com/downloads から Xcode のバンドルをダウンロード します。 この後のステップ これで、iOS シミュレータ上で iOS アプリケーションを実行するための Mac の構成が済みまし た。 Embarcadero Technologies 14 • iOS アプリケーションを iOS シミュレータ上で実行するには、「Windows PC に開発環 境をセットアップする」を参照して RAD Studio IDE の構成を行ってください。 • iOS アプリケーションを iOS デバイス上で実行するには、このページの以下の手順で Mac の構成を行ってください。この手順は、アプリケーションを iOS シミュレータでテ ストした後で行うこともできます。 iOS デバイスで iOS アプリケーションを実行するための Mac の追加の構成手順 以下の手順を追加で実施すると、iOS デバイスで iOS アプリケーションを実行できるようにな ります。 ステップ 1:Mac に Xcode コマンド ライン ツールをインストールする Mac 上で Xcode を使って必要な Xcode ツールをインストールするには: 1. Mac 上で Xcode を起動します。 2. [Xcode]メニューから[Preferences...]を選択します。 3. [General]パネルで[Downloads]をクリックします。 Embarcadero Technologies 15 4. [Downloads]ウィンドウで[Components]タブを選択します。 5. [Command Line Tools]の横の[Install]ボタンをクリックします。 インストールの途中で Apple デベロッパとしてログインするよう求められます。 詳細は、「Mac での Xcode コマンド ライン ツールのインストール」を参照してください。 ステップ 2:デベロッパ アカウントを登録する iOS デベロッパ プログラムの 1 つに参加することが、iOS 向けアプリケーションの作成、実行、 デバッグ、配置を行う場合の要件になっています。 デベロッパ プログラムには、次のいずれかの資格で参加できます。 • 個人の開発者 • エンタープライズ(ビジネス)プログラムまたはユニバーシティ プログラムのチームの メンバ(またはリーダー) 詳細は、「iOS デベロッパ プログラムに参加する」を参照してください。 ステップ 3:開発用証明書を要求、ダウンロード、インストールする デバイス(または iOS シミュレータ)に配置されたアプリケーションを実行する前に、暗号化 した署名をする必要があります。開発用証明書には、アプリケーションに署名するために必要 な情報が含まれています。一人(個人の開発者もチームのメンバも)に 1 つ固有の開発用証明 書が必要で、それを複数のアプリケーションに使用することができます。 開発チームの場合には、チーム メンバそれぞれが開発用証明書を要求し、その要求をチーム管 理者が承認する必要があります。 Embarcadero Technologies 16 証明書を要求、ダウンロード、インストールする 1. Mac の[キーチェーン アクセス]アプリケーションで、[キーチェーン アクセス]メニ ューから[証明書アシスタント|認証局に証明書を要求...]を選択します。 証明書要求をファイルに保存し、Apple の iOS プロビジョニング ポータルにアップロ ードして認証局に送信します。 o 会社や組織のプログラムの開発チーム メンバの場合には、チーム管理者が要求 を承認する必要があります。チーム管理者の承認後に、証明書をダウンロードす ることができます。 o 個人の開発者の場合には、要求後間もなく証明書のダウンロード オプションが 表示されます。詳細は、Apple 社のドキュメント「Creating signing certificates (署名証明書の作成)」を参照してください。 2. iOS プロビジョニング ポータルを開きます。開発用証明書の[Status]が[Submitted] から[Issued]に変化したら、ダウンロードすることができます。 3. 開発用証明書をダブルクリックして起動します。開発用証明書は自動的に[キーチェー ン アクセス]アプリケーションに読み込まれます。 Embarcadero Technologies 17 ステップ 4:デバイスを開発用に登録する デバイスでユーザー アプリケーションを実行するには、デバイスを Apple プロビジョニング ポータルに登録する必要があります。デバイスは、一意デバイス ID(UDID)で登録されます。 UDID は、Xcode を使って次の手順で調べることができます。 1. iOS デバイスが Mac マシンに接続されていることを確認します。 2. Xcode を開き、オーガナイザを開きます([Window|Organizer])。 3. [Devices]タブで、デバイスをクリックします。 4. [Identifier]ラベルの横に文字列があります。 この[Identifier]の文字列がデバイスの UDID を表しています。 o 個人の開発者の場合には、Apple プロビジョニング ポータルの[Devices]タブ に UDID を追加してデバイスを登録します。 o 会社/組織のメンバの場合は、チーム管理者に依頼してデバイスを登録してもら います。 ステップ 5:プロビジョニング プロファイルを作成してインストールする プロビジョニング プロファイルは、開発者やデバイスを開発チームに結び付けるために使われ ます。このプロビジョニング プロファイルは、iOS デバイスでアプリケーションを実行するた めに必要です。 • 個人の開発者の場合は、開発者自身がプロビジョニング プロファイルを作成する必要が あります。詳細は、「Creating and Downloading a Distribution Provisioning Profile(配 布用プロビジョニング プロファイルの作成とダウンロード)」を参照してください。 • 会社/組織のメンバの場合は、メンバが使用するプロビジョニング プロファイルをチー ム管理者が作成する必要があります。 プロビジョニング プロファイルの作成が済んだら、次の手順で Xcode にインストールします。 Embarcadero Technologies 18 1. Mac で Xcode を開き、オーガナイザを開きます([Window|Organizer])。 2. [Library]セクションで[Provisioning Profiles]を選択し、[Refresh]をクリックし ます。 3. Apple ID でサインインするよう Xcode から指示されます。資格情報を入力して[Log in]を選択します。 使用できるプロビジョニング プロファイルが Xcode にインストールされ、次のように 表示されます。 4. 有効な iOS プロビジョニング プロファイルを選択し、テスト用デバイスの [Provisioning Profiles]にドラッグ アンド ドロップします。 これで、iOS デバイス上で iOS アプリケーションを実行するための Mac の構成が済みました。 iOS アプリケーションを実行するには、「Windows PC に開発環境をセットアップする」を参 照して RAD Studio IDE の構成を行ってください。アプリケーションを iOS シミュレータで実 行する一環として PC の構成を既に行っている場合には、このステップは省略してかまいませ ん。 関連項目 • Windows PC に開発環境をセットアップする • プラットフォーム アシスタント サーバー アプリケーション: paserver • Apple デベロッパ プログラム Embarcadero Technologies 19 • iOS デベロッパ プログラム • App ID の作成と構成 • 署名証明書の作成 • iOS プロビジョニング ポータル • Apple プロビジョニング ポータルの[Devices]タブ • Apple ID の作成 • 配布用プロビジョニング プロファイルの作成とダウンロード • Mac でのプラットフォーム アシスタントのインストール • Mac でのプラットフォーム アシスタントの実行 Embarcadero Technologies 20 Windows PC に 開発環境をセットアップする このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • Mac に開発環境をセットアップする iOS ターゲット プラットフォーム向けの FireMonkey アプリケーションは、最初、Mac で使用 可能な iOS シミュレータでテストされます。テスト工程の後半では、iOS デバイス ターゲット プラットフォームを使用するため、Mac に接続されたテスト用の iOS デバイスが必要になりま す。RAD Studio では、デバッグおよびテスト用に iOS アプリケーションをデバイスに配置す るために、プラットフォーム アシスタントを使用します。これは、Mac 上にインストールして 実行する必要があります。 このトピックでは、Mac に環境を構成した後で、開発環境をセットアップする手順を説明しま す。 RAD Studio 環境のセットアップ 以下の手順で構成を行うと、RAD Studio での iOS 開発の速度を向上することができます。 Mac 用の接続プロファイルを作成する 1. [ツール|オプション...|環境オプション|接続プロファイル マネージャ]を開きます。 2. [追加...]をクリックします。 Embarcadero Technologies 21 3. [接続プロファイルの作成]ウィザードが開きます。接続プロファイルの名前を "My Mac" などと指定します。 下図のように、ターゲット プラットフォームとして必ず[OS X]を選択したあと、 [次へ >>]をクリックします。 Embarcadero Technologies 22 4. [リモート マシン情報]ページで、ホストとなる Mac の名前または IP アドレス、使用 するポート番号(通常はデフォルト ポート 64211 で正常に動作)、パスワード(パス ワードを使用する場合に必要)を設定します。 5. [接続テスト]をクリックし、接続プロファイルがエラーもなく正常に動作することを 確かめます("'<ホスト名>' (ポート <ポート番号>) への接続に成功しました" というメ ッセージが表示されるはずです)。 Mac に接続された iOS デバイス用に開発システムに SDK を追加する 1. [ツール|オプション...|環境オプション|SDK マネージャ]を開きます。 Embarcadero Technologies 23 2. [追加...]をクリックします。 3. [新規 SDK の追加]ダイアログ ボックスで、[iOS デバイス]をプラットフォームに 選択します。 4. 接続するプラットフォーム([iOS デバイス]など)を選択します。 5. プラットフォームを選択すると、IDE によってプロファイル("My Mac" など)とター ゲット プラットフォームで使用可能な SDK バージョンのリストが SDK バージョンのコ ンボ ボックスに含められます。 Embarcadero Technologies 24 OK をクリックして、ダイアログを閉じます。 Embarcadero Technologies 25 関連項目 • FireMonkey iOS アプリケーションを作成する • Mac と PC を連携させる • iOS デバイスでの iOS アプリケーションの実行 • iOS シミュレータでの iOS アプリケーションの実行 • FireMonkey プラットフォームに必要な準備 • FireMonkey iOS アプリケーションの作成 • Mac OS X のアプリケーション開発 • FireMonkey アプリケーションの作成 • Apple Developer(developer.apple.com ページ) o o iOS Developer Library iOS Developer Library: 入門 o o iOS Dev Center iOS デバイスのプロビジョニング o iOS アプリケーションを App Store で配布する準備 o iAd Network Embarcadero Technologies 26 FireMonkey iOS アプリケーションを作成する このトピックでは、iOS ターゲット プラットフォーム用の "Hello World" FireMonkey アプリケ ーションの作成方法を説明します。 取りかかる前に RAD Studio を使って iOS アプリケーションを開発するには、重要な構成手順を実行し ておく必要があります。このチュートリアルでは、必要な以下のセットアップ手順がす べて終了していることを前提としています。 詳細については、以下を参照してください。 • Mac に開発環境をセットアップする • Windows PC に開発環境をセットアップする ステップ 1:iOS 用 FireMonkey アプリケーションを新規作 成する 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi]を選択しま す。 2. [空のアプリケーション]を選択します。 Embarcadero Technologies 27 FireMonkey モバイル フォーム デザイナに iOS アプリケーション用の新しいフォームが 表示されます。 ステップ 2:FireMonkey iOS フォームにコンポーネントを配 置する FireMonkey iOS アプリケーションを作成するには、まず、ユーザー インターフェイスを設計 します。これは、デスクトップ プラットフォームがターゲットである場合の最初のステップと 同様です。IDE では、ユーザー インターフェイスを作成するための再利用可能なコンポーネン トが数多く提供されています。 1. マウス ポインタを[ツール パレット]に移動し、[Standard]カテゴリのカテゴリ名 の横のプラス([+])アイコンをクリックして展開します。 2. TEdit コンポーネントを選択し、フォーム デザイナにドロップします。TEdit コンポー ネントのインスタンスがフォーム上に表示されます。 Embarcadero Technologies 28 この手順を繰り返して、今度は TLabel コンポーネントと TButton コンポーネントをフォーム に追加します。ボタンを選択し、[オブジェクト インスペクタ]で Text プロパティを「Say Hello」に変更します。 これで 3 つのコンポーネントがフォーム デザイナ上にあるはずです。 これらのコンポーネントをフォーム デザイナ上に配置すると、IDE によって自動的にコンポー ネントの名前が設定されます。 コンポーネントの名前を確認したり変更するには、フォーム デザイナでコンポーネントをクリ ックし、その Name プロパティを[オブジェクト インスペクタ]および[構造]ビューで探し ます。 Embarcadero Technologies 29 TButton コンポーネントの場合、コンポーネント名はデフォルトで Button1(あるいはそのア プリケーションで作成した TButton の数に応じて Button2、Button3 など)に設定されます。 コンポーネントが配置されているフォームにも名前が付いています。FireMonkey モバイル フ ォーム デザイナの背景部分を選択し、[オブジェクト インスペクタ]で Name プロパティを 選択します。フォームの名前 Form1(または Form2、Form3 など)が表示されています。また、 フォームの名前は[構造]ビューでも探すことができます。 フォーム デザイナ下部の[コード]タブを選択するか F12 キーを押すと、簡単にソース コー ドに移動できます。フォーム デザイナとコード エディタの間の切り替えは、好きなときにいつ でも行うことができます。 Embarcadero Technologies 30 コード エディタに移動すると、IDE によって生成されたソース コードを確認することができま す。3 つのコンポーネント(Edit1、Label1、Button1)が定義されていることがわかります。 Embarcadero Technologies 31 ステップ 3:ユーザーがボタンをクリックしたときのイベン ト ハンドラを Delphi で記述する 次に、TButton コンポーネントのイベント ハンドラを定義します。FireMonkey iOS アプリケー ションのイベント ハンドラの定義は、デスクトップ アプリケーションでイベント ハンドラを 定義する場合と同じ方法で行うことができます。TButton コンポーネントの場合、最も典型的 なイベントはボタンのクリックです。 フォーム デザイナでボタンをダブルクリックすると、ボタン クリック イベントのイベント ハ ンドラを実装するために使用できるスケルトン コードが、RAD Studio によって作成されます。 これで、Button1Click メソッドの begin 文と end 文の間に応答を実装できます。 次のコードでは、"Hello + <編集ボックスに入力された名前>" と書かれた小さなダイアログ ボ ックスを表示するという応答を実装しています。 Label1.Text := 'Hello ' + Edit1.Text + ' !'; Delphi で文字列リテラルを囲む引用符は、ストレート単一引用符(つまり '文字列')でなけれ ばなりません。また、プラス(+)記号を使用して文字列を連結することができます。文字列 内に単一引用符を含めたい場合には、文字列内に単一引用符を 2 つ続けて書くと、1 つの単一 引用符になります。 コードを入力していると、指定しなければならないパラメータの種類を示すツールチップ ヒン トが表示されます。また、クラスでサポートされているメンバの種類もこのツールチップ ヒン トで表示されます。 Embarcadero Technologies 32 ステップ 4:Mac(iOS シミュレータ)上で iOS アプリケー ションをテストする アプリケーションの実装が終わったので、これでアプリケーションを実行することができます。 IDE の[実行]ボタン( )をクリックするか、F9 キーを押すか、RAD Studio のメイン メニューで[実行|実行]を選択します。 FireMonkey iOS アプリケーションは、デフォルトで[iOS シミュレータ]ターゲット プラット フォーム上で動きます。ターゲット プラットフォームは[プロジェクト マネージャ]で確認で きます。 アプリケーションを実行すると、アプリケーションは Mac へ配置され、その後 Mac 上の iOS シミュレータへ配置されます。このアプリケーションの場合、編集ボックスとボタンを持つフ Embarcadero Technologies 33 ォームが表示されます。編集ボックスにテキストを入力し、[Say Hello]ボタンをクリックし ます。 ステップ 5:接続された iOS デバイス上で iOS アプリケーシ ョンをテストする プロジェクトの新規作成前に「Mac に開発環境をセットアップする」および「Windows PC に 開発環境をセットアップする」で説明する手順を終えている場合には、これで、Mac に USB ケ ーブルで接続された iOS デバイス上で iOS アプリケーションを実行することができます。 接続された iOS デバイス上で iOS アプリケーションを実行するには、プラットフォーム アシ スタントによってその iOS デバイス上にアプリケーションが配置されるよう、まず[iOS デバ イス]ターゲット プラットフォームを選択します。 Embarcadero Technologies 34 [iOS デバイス]ターゲット プラットフォームを選択したら、IDE の[実行]ボタンをクリッ クするか、F9 キーを押すか、[実行|実行]を選択して、iOS アプリケーションを実行します。 iOS アプリケーションにコード署名をする許可を求めるダイアログが、Mac 上に表示される可 能性があります。[Always Allow]または[Allow]を選択してアプリケーションに署名してく ださい。 その後、iOS デバイスに FireMonkey iOS アプリケーションが表示されるのを待ちます。 FireMonkey 起動画像($(BDS)\bin\Artwork\iOS にあります)が表示されるのを待ってください。 関連項目 • さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する • iOS モバイル アプリケーション開発 • Mac OS X のアプリケーション開発 • iOS サンプル コード Embarcadero Technologies 35 さまざまなスタイルを持つボタン コンポーネント を iOS アプリケーションで使用する FireMonkey iOS アプリケーションのボタン FireMonkey にはさまざまな種類のボタンが定義されていて、どの種類のボタンも以下の説明と 同じ手順で使用できます。FireMonkey のボタンには、TButton や TSpeedButton などがありま す。 以下は、ユーザー インターフェイスのさまざまな部分のボタン コンポーネントにさまざまなス タイルを適用した例です。 • フォーム上のボタン: o o • ナビゲーション バー上のボタン(ナビゲーション バーはツールバーと呼ぶこともありま す) o o o o o o Embarcadero Technologies 36 ボタン コンポーネントのルック アンド フィールを定義する FireMonkey モバイル デザイナに新しいボタンを配置したら、[オブジェクト インスペクタ] を使って、選択したコンポーネントの重要なプロパティを指定することができます。 コンポーネント(この場合はボタン)を選択し、以下のような一部のプロパティの値を参照し たり変更します。 • Text プロパティの値を更新して、ボタン表面に表示されるテキストを変更します。 • Position.X プロパティおよび Position.Y プロパティの値を変更します(またはマウスを 使ってコンポーネントをドラッグします)。 • Height プロパティや Width プロパティの値を変更します(またはマウスを使ってコン ポーネントの縁をドラッグします)。 • StyleLookup プロパティの下向き矢印をクリックします。 StyleLookup のドロップダウン リストで、あらかじめ定義されたスタイルの中からコン ポーネントの使い方に応じたものを選択することができます。 Embarcadero Technologies 37 ボタン コンポーネントを使用してセグメント コントロール を作成する FireMonkey では、ボタン コンポーネントを使ってセグメント コントロールを定義しています。 ユーザーはこの機能を使用して複数の選択肢から 1 つの値を選択することができます。 セグメント コントロールを定義する手順は以下のとおりです。 1. [ツール パレット]から TSpeedButton コンポーネントを 3 つ配置します。マウスを 使って TSpeedButton コンポーネントを隣り合わせに配置します。 Embarcadero Technologies 38 2. 1 番目のコンポーネントを選択し、StyleLookup プロパティを segmentedbuttonleft に 変更します。 3. 2 番目のコンポーネントを選択し、StyleLookup プロパティを segmentedbuttonmiddle に変更します。 4. 3 番目のコンポーネントを選択し、StyleLookup プロパティを segmentedbuttonright に変更します。これで、3 つすべてのボタンがセグメント コントロールとして表示され ます。 5. 各コンポーネントを選択し、Text プロパティを任意の値に変更します。 6. クリックして 3 つのボタンをドラッグし、これら 3 つのコンポーネントを選択します。 7. GroupName プロパティを LocationSegments などの一意の名前に設定します。 Embarcadero Technologies 39 8. コンポーネントの 1 つがデフォルトで押された状態に表示されるよう指定するには、1 つのコンポーネントの IsPressed プロパティを True に設定します。 Embarcadero Technologies 40 ツールバー コンポーネント上にスコープ バーを作成する ツールバー上にセグメント コントロールを定義することができます。これはスコープ バーとも 呼ばれるもので、検索範囲を制御するために使用できるセグメント コントロールです。 先ほどの手順と同じ TSpeedButton コントロールを使用しますが、StyleLookup プロパティに は以下の値を設定します。 toolbuttonleft toolbuttonmiddle toolbuttonright 関連項目 • FireMonkey iOS アプリケーションを作成する • FMX.StdCtrls.TButton FMX.Controls.TStyledControl.StyleLookup FMX.StdCtrls.TToolBar • • Embarcadero Technologies 41 iOS アプリケーションでカレンダー コンポーネン トを使用して日付を選択する FireMonkey iOS アプリケーションのカレンダー FireMonkey では、TCalenderEdit コンポーネントを使って、iOS ターゲット プラットフォーム 用のカレンダー コンポーネントや日付選択コンポーネントをラップしています。 TCalenderEdit コンポーネントは、次のような単純な手順で簡単に使用することができます。 1. [ツール パレット]で TCalenderEdit コンポーネントを選択し、そのコンポーネントを FireMonkey モバイル フォーム デザイナにドロップします。[ツール パレット]でコン ポーネントを探すには、検索ボックス( )に最初の数文字("Cale")を入力します。 コンポーネントをドロップすると、モバイル フォーム デザイナに TCalenderEdit コン ポーネントが表示されます。 Embarcadero Technologies 42 2. 基本的にそれだけです。iOS シミュレータまたは接続した iOS デバイスの上でアプリケ ーションを実行します。TCalenderEdit をタップするとカレンダー コントロールが現れ、 日付を選択することができます。 ユーザーによる日付変更のイベント ハンドラを実装する ユーザーが日付を変更すると、OnChange イベントが発生します。OnChange イベントのイベ ント ハンドラを実装して、ユーザーのアクションに応答することができます。 OnChange イベント ハンドラを実装するには: 1. TCalenderEdit コンポーネントを選択します。 2. [オブジェクト インスペクタ]で[イベント]ページを開き、OnChange の隣の空の 領域をダブルクリックします。 3. 次のようにコードを記述します。 procedure TForm25.CalendarEdit1Change(Sender: TObject); begin ShowMessage(FormatDateTime('dddddd', CalendarEdit1.Date)); end; このコードでは、選択した日付を示すメッセージ ダイアログを表示します。FormatDateTime 関数は、選択した日付を指定された形式(この場合の dddddd では長い形式の日付が返されま す)に変換します。 Embarcadero Technologies 43 関連項目 • さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する • iOS アプリケーションでコンボ ボックス コンポーネントを使用してリストから項目を 選択する • 日付および時刻のサポート • 型変換ルーチン Embarcadero Technologies 44 iOS アプリケーションでコンボ ボックス コンポ ーネントを使用してリストから項目を選択する FireMonkey iOS アプリケーションで選択コントロールを実 装する iOS プラットフォームでは、FireMonkey は選択コンポーネントを TComboBox コンポーネント でラップしています。 選択コントロールと選択対象のリスト項目を定義するには: 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi|空のアプリ ケーション]を選択します。 2. [ツール パレット]で TComboBox コンポーネントを選択し、FireMonkey モバイル フ ォーム デザイナ上にドロップします。 TComboBox を探すには、[ツール パレット]の検索ボックスに最初の数文字 ("Com")を入力します。 Embarcadero Technologies 45 3. コンポーネントをドロップすると、フォーム デザイナに TComboBox コンポーネント が表示されます。 TComboBox コンポーネントを右クリックし、[項目エディタ...]を選択します。 4. [項目の追加]を何度かクリックして、項目を定義します。 5. [構造]ビューで、ListBoxItem1(リスト内の最初の項目)を選択します。 6. [オブジェクト インスペクタ]で、ListBoxItem1 の Text プロパティを編集します。 この例(米国の 50 の州)では、リスト内の最初の項目は "Alabama" です。 Embarcadero Technologies 46 7. 他の項目も同様に編集します(Alaska、Arizona、Arkansas、California、Colorado な ど)。 8. [iOS シミュレータ]と[iOS デバイス]のどちらかのターゲット プラットフォームで アプリケーションを実行します。 TComboBox をタップすると選択コントロールが現れ、項目を選択することができます。 コードを使って項目のリストを構築する コードを使って項目のリストを構築するには、Add メソッドを使用します。 procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here ComboBox1.Items.Add('Virginia'); ComboBox1.Items.Add('Washington'); ComboBox1.Items.Add('West Virginia'); ComboBox1.Items.Add('Wisconsin'); Embarcadero Technologies 47 ComboBox1.Items.Add('Wyoming'); end; 特定の項目を表示する 現在選択されている項目は、ItemIndex プロパティで示されます。ItemIndex は整数値であり、 ゼロから始まるインデックスを使って指定されます(つまり最初の項目がゼロ)。 5 番目の項目(以下のサンプル コードでは "California")を選択した状態でリストを表示する には、ItemIndex を次のように指定します。 procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here // Index of 5th item is "4" ComboBox1.ItemIndex := 4; end; インデックスの値がわからない場合には、次のように IndexOf メソッドを使用すると値を知る ことができます。 procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here Embarcadero Technologies 48 ComboBox1.ItemIndex := ComboBox1.Items.IndexOf('California'); end; ユーザーによる選択のイベント ハンドラを実装する ユーザーが項目を選択すると、OnChange イベントが発生します。OnChange イベントのイベ ント ハンドラを実装して、ユーザーのアクションに応答することができます。 OnChange イベント ハンドラを実装するには: 1. TComboBox コンポーネントを選択します。 2. [オブジェクト インスペクタ]で[イベント]ページを開き、OnClick の隣の空の領域 をダブルクリックします。 3. コード エディタが開きます。次のようにコードを記述します。 procedure TForm27.CalendarEdit1Change(Sender: TObject); begin ShowMessage(Format('Item %s at Index %d was selected. ', [ComboBox1.Selected.Text, ComboBox1.ItemIndex])); end; このイベント ハンドラでは、選択された項目を示すメッセージ ダイアログを表示します。 Format 関数は、書式文字列と引数の配列から書式設定された文字列を組み立てて返します。 Embarcadero Technologies 49 関連項目 • iOS アプリケーションでカレンダー コンポーネントを使用して日付を選択する • iOS アプリケーションでタブ コンポーネントを使用してページを表示する • iOS モバイル アプリケーション開発 • Mac OS X のアプリケーション開発 Embarcadero Technologies 50 iOS アプリケーションで Web ブラウザ コンポー ネントを使用する iOS プラットフォーム上の FireMonkey では、Web ブラウザ コンポーネントは TWebBrowser コンポーネントとしてラップされています。このトピックでは、iOS 用の簡単な FireMonkey Web ブラウザ アプリケーションの作成方法を説明します。 ステップ 1:ユーザー インターフェイスを設計する 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi|空のアプリ ケーション]を選択します。 2. [ツール パレット]で TToolBar コンポーネントを選択し、FireMonkey モバイル フォ ーム デザイナにドロップします。TToolBar を探すには、[ツール パレット]の検索ボ ックスに数文字("tool" など)を入力します。 Embarcadero Technologies 51 3. コンポーネントをドロップすると、TToolBar コンポーネントがモバイル フォーム デザ イナの上部に表示されます。 4. [ツール パレット]で TButton コンポーネントを選択し、ツールバー上にドロップし ます。 5. モバイル フォーム デザイナでボタン コンポーネントを選択し、[オブジェクト インス ペクタ]の StyleLookup プロパティで priortoolbuttonbordered を選択します。 TButton の StyleLookup の値を priortoolbuttonbordered に設定すると、iOS スタイル の "戻る" ボタンのラベルが追加されます。 FireMonkey iOS アプリケーションでのスタイルの選択方法の詳細は、「さまざまなス タイルを持つボタン コンポーネントを iOS アプリケーションで使用する」を参照して ください。 6. [ツール パレット]で TEdit コンポーネントを選択し、ツールバー上にドロップします。 編集コントロールの幅がツールバーの領域いっぱいになるようにサイズを調整します。 Embarcadero Technologies 52 7. [ツール パレット]で TWebBrowser コンポーネントを選択し、フォーム上にドロップ します。 8. モバイル フォーム デザイナで Web ブラウザ コンポーネントを選択し、[オブジェク ト インスペクタ]の Align プロパティに alClient を選択します。 上記の手順が済むと、フォームは次の図のように表示されているはずです。 ステップ 2:ユーザーが編集コントロールで URL を変更する と Web ページを開くようイベント ハンドラを記述する デスクトップ プラットフォームとは異なり、モバイル デバイスでは、次の図のように仮想キー ボードを使用してテキストを入力します。ユーザーが "Done" または "Return" をクリックする とアクションが終了します。 Embarcadero Technologies 53 FireMonkey では、ユーザーが行うアクションのほとんどに対応できるよう、多様なイベント ハンドラが用意されています。"Done" ボタンが選択されると、FireMonkey フレームワークに よって TEdit コントロールに OnChange イベントが送信されます。それに対して、"Return" ボ タンには特定のイベントが存在しません。このセクションでは、両方のシナリオに対応するイ ベント ハンドラを実装します。 Web ページを開くための共通メソッドを実装する イベント ハンドラを実装する前に、まず、編集コントロールの Text プロパティを基に Web ペ ージを開く共通メソッドを実装します。 1. コード エディタで以下の新しい行を作成します。 { private 宣言 } の後に procedure OpenURL; Embarcadero Technologies 54 2. Ctrl+Shift+C を押して、ファイル末尾にプレースホルダを作成します。 3. OpenURL メソッドを次のコードのように実装します。 OnChange イベントのイベント ハンドラを実装する 1. モバイル フォーム デザイナで編集コントロールを選択し、[オブジェクト インスペク タ]([イベント]タブ)で OnChange イベントの隣の空白領域をダブルクリックし てイベント ハンドラを作成します。 [オブジェクト インスペクタ]によって Edit1Change というイベント ハンドラが新規 作成されます。 2. 以下のコードを追加して、イベント ハンドラを完成させます。 Embarcadero Technologies 55 Enter キーをサポートするイベント ハンドラを実装する Enter キーには特定のイベントが定義されていません。それでも、OnKeyDown イベントを使用 することで、そのようなイベントを監視できます。 OnKeyDown では、イベント ハンドラのいくつかのパラメータから、押されたキーの情報がわ かります。このイベントは次のように実装することができます。 "戻る" ボタンのイベント ハンドラを実装する Web ブラウザの戻るボタンの実装は、Web ブラウザ コンポーネントの GoBack メソッドを呼 び出すだけです。 これで、この Web ブラウザ アプリケーションの基本動作の実装が終わりました。iOS シミュ レータまたは iOS デバイスでアプリケーションを実行してみます。 Embarcadero Technologies 56 ステップ 3:Web ブラウザ アプリケーションに適したキーボ ードを選択する 初めての Web ブラウザ アプリケーションを実行すると、仮想キーボードが最適化されていな いことに気付きます。 iOS では、次のようないくつかの仮想キーボードが用意されています。 vktAlphabet vktDefault vktEmailAddress vktNamePhonePad vktNumberPad vktNumbersAnd Punctuation vktPhonePad vktURL 編集コントロールの KeyboardType プロパティで、適切な仮想キーボードとして vktURL を選 択します。 Embarcadero Technologies 57 関連項目 • iOS アプリケーションでコンボ ボックス コンポーネントを使用してリストから項目を 選択する • iOS アプリケーションでタブ コンポーネントを使用してページを表示する • TWebBrowser TToolBar TButton TEdit KeyboardType StyleLookup • • • • • Embarcadero Technologies 58 iOS アプリケーションでタブ コンポーネントを使 用してページを表示する FireMonkey iOS アプリケーションのタブ タブは FMX.TabControl.TTabControl で定義されます。これは、複数のタブ ページを保持でき るコンテナです。 • それぞれのタブ ページには、UI 要素として任意のコントロールを含むことができます。 • これらのページのタブを非表示にしたり、タブを表示せずにページを移動することがで きます。 タブごとに、定義済みアイコンやカスタムアイコン、テキスト ラベルを指定することができま す。 また、コントロールの上下どちらにでもタブを配置することができます。 フォーム デザイナを使用してタブ ページを設計する アプリケーションにタブ ページを作成するには、TTabControl コンポーネントを使用します。 手順は以下のとおりです。 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi|空のアプリ ケーション]を選択して HD FireMonkey モバイル アプリケーションを作成します。 iPhone 用のデフォルト ターゲット プラットフォーム([iOS シミュレータ])を使用 します。 2. [ツール パレット]から TTabControl を選択します。 Embarcadero Technologies 59 3. TTabControl をドロップすると、空のタブ コントロールが FireMonkey モバイル フォー ム デザイナに表示されます。 4. 通常、アプリケーションでタブ コントロールを使用する場合には、全画面を使ってペー ジを表示します。そのためには、タブ コントロールのデフォルトの位置揃えを変更する 必要があります。[オブジェクト インスペクタ]で、タブ コントロールの Align プロ パティを alClient に変更します。 Embarcadero Technologies 60 5. タブ コントロールを右クリックし、コンテキスト メニューから[項目エディタ...]を選 択します。 6. [項目の追加]を 3 回クリックします。すると、次の図のようにタブ項目のインスタン スが 3 つ作成されます。ダイアログ ボックスを閉じます。 7. FireMonkey モバイル フォーム デザイナで、最初のタブ項目を選択し、その StyleLookup プロパティを tabitembookmarks に変更します。 Embarcadero Technologies 61 8. 各ページには任意のコンポーネントを配置することができます。別のページに移動する には、フォーム デザイナ上で対象のタブをクリックするか、[オブジェクト インスペ クタ]で ActiveTab プロパティを変更します。 9. タブの位置を変更するには、タブ コントロール コンポーネントの TabPosition プロパ ティを選択します。各タブについて、TabPosition プロパティ用に以下のいずれかの値 を[オブジェクト インスペクタ]で選択できます。 Embarcadero Technologies 62 tpTop tpBottom tpDots tpNone タブが上部に表示され タブが下部に表示され タブは表示されませ タブやドットは、設計 ます。 ます。 ん。ただし、別のペー 時には表示されますが ジが存在することを示 実行時には表示されま すドットまたは省略記 せん。ページの変更 号([...])が表示さ は、コードまたはアク れます。 ションでしか行うこと ができません。 タブのカスタム アイコンを使用する タブ ページでは、カスタム アイコンやカスタム テキストを使用することができます。手順は 以下のとおりです。 1. タブ コントロールを配置し、位置揃え(Align プロパティ)を設定し、タブ コントロー ル上に複数のタブを作成します。 Embarcadero Technologies 63 2. タブを選択し、[オブジェクト インスペクタ]に移動して TTabItem の CustomIcon プ ロパティの Bitmap フィールドで参照ボタン([...])を選択します。 3. ドロップダウン メニューから[編集...]を選択します。 4. [ビットマップ エディタ]で[読み込み...]ボタンをクリックし、PNG ファイルを選択 します。推奨サイズは、標準解像度の場合には 30x30 ピクセル、高解像度の場合には 60x60 ピクセルです(BitmapHiRes アイコンは次のステップで設定します)。 Embarcadero Technologies 64 5. [ビットマップ エディタ]を閉じ、[オブジェクト インスペクタ]に戻って CustomIcon の BitmapHiRes(high-resolution)フィールドで使用したいアイコンを選 択します。 6. [オブジェクト インスペクタ]で StyleLookup プロパティに tabitemcustom を選択し ます。 7. Text プロパティでタブ上のテキストを変更します。 Embarcadero Technologies 65 このチュートリアルで使用しているカスタム グリフは、$(BDS)\Images\GlyFX ディレクトリ にあります。 カスタム アイコンを定義すると、FireMonkey フレームワークによって、指定した .png ファイ ルから選択時の画像と非選択時の(淡色表示の)画像が生成されます。この変換は、ビットマ ップ データのアルファ チャネルを使って行われます。たとえば、次のように生成されます。 元の画像 選択時の画像 非選択時の画像 タブ コントロール内のコントロールを定義する 既に説明したように、それぞれのタブ ページには、任意の数のコントロール(別のタブ コント ロールでもかまいません)を含むことができます。その場合には、さまざまなタブ ページを [構造]ビューで簡単に参照したり管理することができます。 Embarcadero Technologies 66 実行時にページを変更する ユーザーがタブをタップしたときに タブが表示されている(TabPosition プロパティが tpNone 以外に設定されている)場合は、エ ンド ユーザーがタブをタップすると、それだけでページが切り替わります。 Embarcadero Technologies 67 アクションとアクション リストを使用して アクションは、ユーザー インターフェイスの 1 つ以上の要素(メニュー コマンド、ツールバ ー ボタン、コントロールなど)に対応します。アクションには 2 つの機能があります。 • ユーザー インターフェイス要素に共通のプロパティを表します(コントロールが有効か、 チェック ボックスがオンになっているかなど)。 • コントロールが起動したときに応答します(アプリケーション ユーザーがボタンをクリ ックした、メニュー項目を選択したなど)。 ユーザーがボタンをクリックすることで別のタブ ページに移動できるようにする手順は次のと おりです。 1. FireMonkey モバイル アプリケーションにタブ コントロールを配置し、そこに複数のタ ブ項目(TabItem1、TabItem2、TabItem3 など)を追加します。 2. [ツール パレット]からフォームに TButton を追加し、さらに ActionList コンポーネン トを追加します。 Embarcadero Technologies 68 3. [オブジェクト インスペクタ]でボタン コンポーネントを選択し、Action プロパティ のドロップダウン メニューから[標準アクションの新規作成|タブ| TChangeTabAction]を選択します。ユーザーがこのボタンをクリックすると、ここで 定義したアクションが実行されます(タブ ページが切り替わります)。 4. [構造]ビューで ChangeTabAction1 を選択し、[オブジェクト インスペクタ]で Tab プロパティに TabItem2 を選択します。これで TabItem2 にリンクされるため、こ のアクションでページを TabItem2 に変更することができます。 Embarcadero Technologies 69 5. 前のステップが終わると、ボタンのキャプション(Text プロパティ)が自動的に "Security に移動" に変化しています(この例では TabItem2 のキャプションが "Security" であるため)。新しいキャプション テキストに合わせてボタンのサイズを変 更するか、ChangeTabAction1 コンポーネントの CustomText プロパティを次のように 変更します。 Embarcadero Technologies 70 6. ChangeTabAction では、ページ間の移行を示すスライド アニメーションもサポートし ています。このアニメーションを使用するには、Transition プロパティを ttSlide に設定 します。 ソース コードによって 次の 3 つのどの方法を使っても、ソース コードからアクティブなタブ ページを変更すること ができます。 • TTabItem のインスタンスを ActiveTab プロパティに代入します。 TabControl1.ActiveTab := TabItem1; • TabIndex プロパティを別の値に変更します。TabIndex プロパティはゼロから始まる整 数値です(0 と TabControl1.TabCount - 1 の間の任意の数値を指定することができ ます)。 TabControl1.TabIndex := 1; • ChangeTabAction が定義されている場合には、アクションをコードから実行すること もできます。 // You can set the target at run time if it is not defined yet. ChangeTabAction1.Tab := TabItem2; // Call the action ChangeTabAction1.Execute; Embarcadero Technologies 71 関連項目 • さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する • iOS アプリケーションで Web ブラウザ コンポーネントを使用する Embarcadero Technologies 72 iOS アプリケーションでリスト ボックス コンポ ーネントを使用してテーブル ビューを表示する iOS プラットフォームでは、FireMonkey は FMX.ListBox.TListBox コンポーネントを使用して iOS スタイルのテーブル ビューを表示します。たとえば次のようなリスト ボックスです。 このチュートリアルでは、FireMonkey iOS アプリケーションでテーブル ビューの項目を作成 する基本的な手順を説明します。 リスト ボックス コンポーネントに項目を作成する 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi|空のアプリ ケーション]を選択します。 2. [ツール パレット]で TListBox コンポーネントを選択し、FireMonkey モバイル フォ ーム デザイナ上にドロップします。TListBox を探すには、[ツール パレット]の検索 ボックスに数文字("tlist" など)を入力します。 Embarcadero Technologies 73 3. モバイル フォーム デザイナで TListBox コンポーネントを選択し、[オブジェクト イン スペクタ]の Align プロパティに alClient を選択します。 4. FireMonkey モバイル フォーム デザイナで TListBox コンポーネントを右クリックし、 [項目エディタ...]を選択します。 Embarcadero Technologies 74 5. [項目デザイナ]で[項目の追加]ボタンを何度かクリックし、リスト ボックスにいく つかの項目を追加します。 6. [項目デザイナ]を閉じます。これで TListBox コンポーネント上にリスト ボックス項 目が表示されています。たとえば次の図のようになっています。 ヘッダーを追加する 以下の手順で TListBox コンポーネントのヘッダーを定義することができます。 1. FireMonkey モバイル フォーム デザイナで TListBox コンポーネントを右クリックし、 [項目の追加|TListBoxHeader]を選択します。 Embarcadero Technologies 75 2. [ツール パレット]で TLabel コンポーネントを選択し、追加した TListBoxHeader コ ンポーネントの上にドロップします。 3. [オブジェクト インスペクタ]で、TLabel コンポーネントのプロパティを次のように 変更します。 プロパティ 値 Align alClient StyleLookup toollabel TextAlign taCenter Text (任意のテキスト値) Embarcadero Technologies 76 リストにグループ ヘッダー/フッターを追加する 以下の手順で TListBox の項目にグループ ヘッダーおよびグループ フッターを定義することが できます。 1. FireMonkey モバイル フォーム デザイナで TListBox コンポーネントを右クリックし、 [項目エディタ...]を選択します。 2. [項目デザイナ]でドロップダウン リストから TListBoxGroupHeader を選択し、[項 目の追加]をクリックします。 3. ドロップダウン リストから TListBoxGroupFooter を選択し、[項目の追加]を選択し ます。 4. 項目のリストで ListBoxGroupHeader1 を選択し、その項目がリストの先頭になるまで 上向き矢印ボタンを何度かクリックします。 Embarcadero Technologies 77 5. ダイアログ ボックスを閉じます。これで、TListBox コンポーネントにグループ ヘッダ ーとグループ フッターが追加されています。 リスト項目を別のグループ化された項目として表示する リスト ボックスの項目は、単純なリストとして表示することも、グループ化されたリストとし て表示することもできます。どちらにするかは GroupingKind プロパティと StyleLookup プロ パティによって決まり、次の図のように表示されます。 項目を単純なリストとして表示 gsPlain = GroupingKind プロパティの値 listboxstyle = StyleLookup プロパティの値 項目をグループ化されたリストとして表示 gsGrouped = GroupingKind プロパティの値 transparentlistboxstyle = StyleLookup プロパ ティの値 TListBox コンポーネントのこのようなスタイルは、[オブジェクト インスペクタ]で選択する ことができます。 Embarcadero Technologies 78 リスト ボックス項目にチェック ボックスなどのアクセサリ を追加する TListBox 内の各項目には、ItemData.Accessory プロパティを使ってチェック マークなどのアク セサリを設定することができます。次の図は、ItemData.Accessory に割り当てることができる 値と、表示されるアクセサリを示したものです。 フォーム デザイナでリスト ボックス項目を選択すると、[オブジェクト インスペクタ]で Accessory プロパティを選択することができます。 リスト ボックス項目にアイコンを追加する リスト ボックス コンポーネント内の各項目には、アイコンとしてビットマップ データを表示 することができます。これは ItemData.Bitmap プロパティで指定します。 Embarcadero Technologies 79 フォーム デザイナでリスト ボックス項目を選択すると、[オブジェクト インスペクタ]で Bitmap プロパティを選択することができます。 項目に詳細情報を追加する リスト ボックス コンポーネント上の各項目に、補足的なテキスト情報を追加することができま す。 補足テキストは ItemData.Detail プロパティに指定します。詳細テキストの表示場所は StyleLookup プロパティで選択します。次の表を参照してください。 StyleLookup プロパティ ルック アンド フィール listboxitemnodetail listboxitembottomdetail listboxitemrightdetail listboxitemleftdetail コードからリスト ボックスに項目を追加する 通常の項目をリスト ボックスに追加するには、次のコードのように、Items.Add メソッドを呼 び出すだけです。 Embarcadero Technologies 80 ListBox1.Items.Add('Text to add'); 単純な項目以外のものを作成する場合や他のプロパティを指定したい場合には、まず項目のイ ンスタンスを作成し、それからリスト ボックスに追加します。 この後のコードでは、図に示すような項目をリスト ボックスに追加しています。 procedure TForm40.FormCreate(Sender: TObject); var c: Char; i: Integer; Buffer: String; ListBoxItem : TListBoxItem; ListBoxGroupHeader : TListBoxGroupHeader; begin ListBox1.BeginUpdate; for c := 'a' to 'z' do begin // Add header ('A' to 'Z') to the List ListBoxGroupHeader := TListBoxGroupHeader.Create(ListBox1); ListBoxGroupHeader.Text := UpperCase(c); ListBox1.AddObject(ListBoxGroupHeader); // Add items ('a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', ...) to the list for i := 1 to 3 do begin // StringOfChar returns a string with a specified number of repeating characters. Buffer := StringOfChar(c, i); Embarcadero Technologies 81 // Simply add item // ListBox1.Items.Add(Buffer); // or, you can add items by creating an instance of TListBoxItem by yourself ListBoxItem := TListBoxItem.Create(ListBox1); ListBoxItem.Text := Buffer; // (aNone=0, aMore=1, aDetail=2, aCheckmark=3) ListBoxItem.ItemData.Accessory := TListBoxItemData.TAccessory(i); ListBox1.AddObject(ListBoxItem); end; end; ListBox1.EndUpdate; end; 検索ボックスを追加する リスト ボックスに検索ボックスを追加することができます。検索ボックスがあると、ユーザー は次の図のように、長いリストから選択肢を簡単に絞り込むことができます。 • リスト ボックス コンポーネントに検索ボックスを追加するには、TListBox コンポーネ ントを右クリックし、コンテキスト メニューから[項目の追加|TSearchBox]を選択 すればよいだけです。 Embarcadero Technologies 82 関連項目 • • FMX.ListBox.TListBox さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する • iOS アプリケーションで Web ブラウザ コンポーネントを使用する • iOS アプリケーションでタブ コンポーネントを使用してページを表示する Embarcadero Technologies 83 iOS アプリケーションでレイアウトを使用してフ ォームのさまざまなサイズや向きを調整する このチュートリアルでは、フォーム ファクタ(iPhone や iPad など)ごとに異なるフォームを 使用するのではなく、1 つの共通フォームをさまざまなフォーム ファクタに使用するための一 般的な方法を説明します。 デバイス上でアプリケーションを実行しなくても、FireMonkey モバイル フォーム デザイナで ユーザー インターフェイスのプレビューを確認することができます。右上のドロップダウンで デバイスや方向を変更すればよいだけです。 FireMonkey コンポーネントはどれも所有者、親、子を持つ ことができる まず、すべての FireMonkey コンポーネントに所有者、親、子という概念があります。コンポ ーネントをフォーム上に配置すると、フォームがそのコンポーネントの所有者および親になり ます。 コンポーネント(ボタン、ラベルなど)を別のコンポーネント(ツールバーなど)に追加する と、ツールバーがボタンやラベルなどの親および所有者になります。この親子関係は、[構造] ビューにツリー形式の図として表示されます。 子のレイアウトは、親に対する相対的な値で定義されます。次の図の Label1 は Toolbar1 の子 であり、Label1 のレイアウトは Toolbar1 に対して相対的に決められています。 Embarcadero Technologies 84 FireMonkey コンポーネントのレイアウト関連共通プロパテ ィを使用する Align プロパティを使用する コントロールの Align プロパティによって、初期表示の際および親がサイズ変更された際に、 親の 4 辺または中心に合わせて自動的に位置やサイズが変更されるかどうかが決まります。 Align プロパティのデフォルト値は alNone です。これは、自動計算が行われず、コントロー ルが元の位置にとどまることを意味します。 Align プロパティで一般的に使われる値は次のとおりです(青で示す部分が子の領域です)。 alNone alTop alBottom alLeft alRight alCenter alClient 1 つのコンポーネントの Align の値を alTop、alBottom、alLeft、または alRight にすると、他 のコンポーネントの Align プロパティは残りの領域を使用することになります。 残りの領域(alClient)のサイズや形も、デバイスの方向やフォーム ファクタ(iPhone または iPad)によって変化します。 次の図は、2 つのコンポーネントに alTop を、1 つのコンポーネントに alClient を指定したと きの、横方向と縦方向のレイアウトを示しています。 Embarcadero Technologies 85 Margins プロパティを使用する マージンを指定すると、親によって自動配置されるコントロールの間を離すことができます。 次の図では、右側のコンポーネント(alClient)に Margins プロパティが指定されていて、コ ンポーネントの周りに空間が確保されます。 Padding プロパティを使用する パディングを指定すると、親のコンテンツ ボックスの内側に空間が確保されます。[オブジェ クト インスペクタ]で、Padding に以下のそれぞれの値(ピクセル単位)を設定することがで きます。 Left Right Bottom Top 次の図では、親コンポーネント(2 つの領域を含む)に Padding プロパティを指定して、親コ ンポーネントの内側に空間を確保しています。 Embarcadero Technologies 86 Anchors プロパティを使用する コントロールがその親の端から特定の距離に位置を保たなければならない場合や、自分の端と 親の端との距離を当初の値に保ちながら拡大しなければならない場合に、アンカーが必要にな ります。アンカーが設定されたコントロールは、コンテナの辺に '固定' され、指定された場合 は伸び縮みします。 編集コントロールの Anchors プロパティ ツールバーの上に編集コントロールを置く場合、編集コントロールの右端とフォーム(ツール バー)の端との距離を一定に保ちたいことがあります。Anchors を使用すると、親の辺に対し て固定の位置にコントロールを保つよう指定することができます。 編集コントロールをツールバー(親)に対して同じ位置に保ちたい場合には、Anchors プロパ ティを akLeft, akTop, akRight に設定します。ツールバーのサイズを変更すると、Anchors の 設定に応じて編集コントロールのサイズも変更されます。 ボタン コントロールの Anchors プロパティ ツールバーの右端にボタン コントロールを置く場合、ボタンの右端とフォームの端との距離を 一定に保ちたいことがあります。ただし、ボタン コントロールの左端とフォームの左端の距離 は一定に保ちたくありません。この場合には、Anchors プロパティを akTop, akRight に設定 する(akLeft の選択を解除する)と、ボタン コントロールの上および右がツールバー(親)に 対して同じ距離を保つようになります。 Embarcadero Technologies 87 TLayout コンポーネントを使用する TLayout は、実行時には表示されないコンポーネントです。これを使用して子コントロールを 集合にまとめ、全体として操作することができます。たとえば、レイアウトの Visible プロパテ ィを設定すると、コントロールの集合の可視性を一度に設定できます。TLayout によって、子 のプロパティが自動的に設定されることはありません。 選択したコントロールを TLayout の子にするには、[構造]ビューを使用します。 移動したいコントロールを選択して強調表示します。その一連のコントロールをドラッグして、 親となるコントロールの上にドロップします。これで、[構造]ビューを見ると、コントロー ルの集合が新しい親の子になっています。 1. 元の状態 2. 移動対象のコントロ ールを選択 3. 親の上にドロップ TLayout の Align、Padding、Margins、Anchors などのプロパティを使用して、特定の領域の レイアウトを定義することができます。TLayout コンポーネントは、HTML の DIV タグと同じ ように使用できます。 多くの項目を含むインターフェイスの扱い:TVertScrollBox コンポーネントを使用する ユーザーがユーザー インターフェイスをスクロールする必要が生じる可能性があるため、フォ ームに多くの項目を持たせすぎることは一般に好ましくありません。たいていは、複数のペー ジを持つタブ コントロール コンポーネントを使用することで、スクロールを回避できます。 Embarcadero Technologies 88 フォーム上に多くの項目を置く必要がある場合には、TVertScrollBox コンポーネントを使用し て、次のようにスクロール領域を定義します。 1. FireMonkey モバイル フォーム デザイナで[カスタム デバイス]を選択します。 2. デザイナの端をドラッグして、カスタム デバイスを必要な形およびサイズに変更します。 3. TVertScrollBox コンポーネントをドロップし、Align プロパティを alClient に設定しま す。これで TVertScrollBox がクライアント領域いっぱいに配置されます。 4. TVertScrollBox コンポーネント上にコンポーネントを配置します。 Embarcadero Technologies 89 実行時にユーザー インターフェイスをスワイプすると、フォームをスクロールすることができ ます。 関連項目 • iOS アプリケーションでリスト ボックス コンポーネントを使用してテーブル ビューを 表示する • iOS デバイスの位置センサを使用する • チュートリアル:FireMonkey レイアウトを使用する • FireMonkey のレイアウト戦略 • FireMonkey コントロールの配置 • FireMonkey でのジェスチャ Embarcadero Technologies 90 iOS アプリケーションで写真を撮って共有する このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • さまざまなスタイルを持つボタン コンポーネントを iOS アプリケーションで使用する このチュートリアルでは、iOS アプリケーションで写真を使用するための、代表的な以下の処 理を扱います。 iOS デバイスのカメラで写真を撮 iOS デバイスのフォト ライ る ブラリの写真を使用する 写真を共有または印刷する この機能はアクションとして提供されていて、どの処理もコードを 1 行書けばよいだけです。 アクションは、ユーザー インターフェイスの 1 つ以上の要素(メニュー コマンド、ツールバ ー ボタン、コントロールなど)に対応します。 アクションには 2 つの機能があります。 • ユーザー インターフェイス要素に共通のプロパティを表すことができます(コントロー ルが有効か、チェック ボックスがオンになっているかなど)。 • コントロールが起動したときに応答することができます(ユーザーがボタンをクリック した、メニュー項目を選択したなど)。 このチュートリアルでは、サポートしたい機能ごとに、アクションをユーザー インターフェイ ス要素(ボタンなど)に割り当てる方法を学びます。 Embarcadero Technologies 91 アプリケーションのユーザー インターフェイスを構築する このサンプル アプリケーションのユーザー インターフェイスは、次の図に示すとても単純なも のです。 フォーム デザイナに以下のコンポーネントを配置します。 • TToolBar コンポーネント o 3 つの TButton コンポーネント。各ボタンに異なるアイコンを使用します。 o 3 つのボタンの StyleLookup プロパティを、それぞれ cameratoolbuttonbordered、searchtoolbuttonbordered、 actiontoolbuttonbordered に設定します。 • TImage コンポーネント o • Align プロパティを alClient に設定します。 TActionList コンポーネント iOS デバイスのカメラで写真を撮る iOS デバイスのカメラを使って写真を撮るアクションを定義することができます。手順は以下 のとおりです。 1. フォーム デザイナでボタン(写真撮影用)を選択します。 2. [オブジェクト インスペクタ]で、Action プロパティのドロップダウン リストを選択 します。 Embarcadero Technologies 92 3. [標準アクションの新規作成|メディア ライブラリ|TTakePhotoFromCameraAction] を選択します。 4. [イベント]タブで Action ノードを展開し、OnDidFinishTaking イベントをダブルクリ ックします。 5. OnDidFinishTaking イベント ハンドラに以下のコードを追加します。 procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap); begin Image1.Bitmap.Assign(Image); end; このコードでは、iOS デバイスのカメラで撮った写真を TImage コンポーネントの Bitmap プ ロパティに割り当てています。 iOS デバイスのフォト ライブラリの写真を使用する フォト ライブラリの写真を使用するアクションを定義することができます。手順は以下のとお りです。 Embarcadero Technologies 93 1. フォーム デザイナで、使用したいボタン(写真選択用)を選択します。 2. [オブジェクト インスペクタ]で Action プロパティのドロップダウン リストをクリッ クし、[標準アクションの新規作成|メディア ライブラリ| TTakePhotoFromLibraryAction]を選択します。 3. [イベント]タブで Action ノードを展開し、OnDidFinishTaking イベントをダブルクリ ックします。 4. OnDidFinishTaking イベント ハンドラに以下のコードを追加します。 procedure TForm1.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap); begin Image1.Bitmap.Assign(Image); end; このコードでは、フォト ライブラリから取得した写真を TImage コンポーネントの Bitmap プ ロパティに割り当てています。 写真を共有または印刷する iOS アプリケーションから、ソーシャル ネットワーキング サイト(Facebook や Twitter など) で写真を共有したり、写真をプリンタに送信したり、写真を電子メールの添付ファイルにした り、連絡先に設定することができます。 Embarcadero Technologies 94 このマルチシェア サービスはシェア シート機能と呼ばれるもので、以下の手順で実装すること ができます。 1. フォーム デザイナでボタン(写真共有用)を選択します。 2. [オブジェクト インスペクタ]で Action プロパティのドロップダウン リストをクリッ クし、[標準アクションの新規作成|メディア ライブラリ|ShowShareSheetAction] を選択します。 3. [イベント]タブで Action ノードを展開し、OnBeforeExecute イベントをダブルクリ ックします。 4. OnBeforeExecute イベント ハンドラに以下のコードを追加します。 procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject); begin ShowShareSheetAction1.Bitmap.Assign(Image1.Bitmap); end; このコードでは、TImage コンポーネントの写真を "シェア シート機能" に割り当てています。 サービスの一覧から[Facebook]を選択すると、コメントを付けて写真を Facebook に投稿す ることができます。 関連項目 • iOS デバイスの位置センサを使用する • iOS デバイスの通知センターを使用する • FireMonkey のアクション • FMX.StdCtrls.TButton FMX.Objects.TImage • Embarcadero Technologies 95 • • FMX.MediaLibrary http://appleinsider.com/articles/12/02/16/share_sheets_twitter_integration_to_make_m ountain_lion_more_social/ Embarcadero Technologies 96 iOS デバイスの位置センサを使用する このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • iOS アプリケーションでリスト ボックス コンポーネントを使用してテーブル ビューを表示 する • iOS アプリケーションで Web ブラウザ コンポーネントを使用する • iOS アプリケーションでレイアウトを使用してフォームのさまざまなサイズや向きを調整す る このチュートリアルでは、(緯度と経度を使用して)iOS デバイスの位置を確認し、逆ジオコ ーディングによって次の図のような人が読み取れる住所に変換します。 Embarcadero Technologies 97 ユーザー インターフェイスを設計する このデモ アプリケーションの設計には、2 つの主要コンポーネントが含まれています。 TListBox(左側)と TWebBrowser です。 • TListBox の Align プロパティを alLeft に設定して、UI の左側を確保します。その後、 リスト ボックスの下に次のサブコンポーネントを作成します。 o 以下のサブコンポーネントを含む TListBoxHeader コンポーネント タイトル "Location Demo" を表示するための TLabel コンポーネント TLocationSensor のオン/オフを選択するための TSwitch(Switch1)コン ポーネント o テキストが "Your Location" の TListBoxGroupHeader o 名前が "ListBoxItemLatitude"、テキストが "Latitude" の TListBoxItem o 名前が "ListBoxItemLongitude"、テキストが "Longitude" の TListBoxItem o テキストが "Current Address" の TListBoxGroupHeader o 名前が "ListBoxItemAdminArea"、テキストが "AdminArea" の TListBoxItem o 名前が "ListBoxItemCountryCode"、テキストが "CountryCode" の o TListBoxItem 名前が "ListBoxItemCountryName"、テキストが "CountryName" の o TListBoxItem 名前が "ListBoxItemFeatureName"、テキストが "FeatureName" の o TListBoxItem 名前が "ListBoxItemLocality"、テキストが "Locality" の TListBoxItem Embarcadero Technologies 98 • o 名前が "ListBoxItemPostalCode"、テキストが "PostalCode" の TListBoxItem o 名前が "ListBoxItemSubAdminArea"、テキストが "SubAdminArea" の o TListBoxItem 名前が "ListBoxItemSubLocality"、テキストが "SubLocality" の TListBoxItem o 名前が "ListBoxItemSubThoroughfare"、テキストが "SubThoroughfare" の o TListBoxItem 名前が "ListBoxItemThoroughfare"、テキストが "Thoroughfare" の TListBoxItem Web ページ(Google マップ)を表示するための TWebBrowser コンポーネント (WebBrowser1)。Align プロパティを alClient に設定します。 これらのコンポーネントを作成したら、すべての TListBoxItem 項目を選択し、StyleLookup プ ロパティに listboxitemleftdetail を選択します。これによって TListBoxItem にラベルと詳細テ キストの両方が表示されます。 位置センサ 位置センサは、TLocationSensor コンポーネントにラップされています。 デバイスで移動が検出されると、TLocationSensor で OnLocationChanged イベントが発生し ます。TLocationSensor の感度は Distance プロパティで調整することができます。Distance を "10" に設定すると、"10 メートル" 移動したときに TLocationSensor で OnLocationChanged イベントが発生します。 位置センサ コンポーネントから位置情報(緯度、経度)を読 み取る まず、TLocationSensor コンポーネントをアクティブ化して使用できるようにしなければなり ません。TSwitch コンポーネントや他のアプリケーション イベントなどの入力によって、 TLocationSensor をオン/オフすることができます。 次に示すのは、TSwitch コンポーネントの値が変化すると、それに合わせて TLocationSensor を制御するコードです。 procedure TForm44.Switch1Switch(Sender: TObject); begin Embarcadero Technologies 99 LocationSensor1.Active := Switch1.IsChecked; end; 先ほど述べたように、iOS デバイスを動かすと、TLocationSensor で OnLocationChanged イ ベントが発生します。このイベント ハンドラでパラメータを使用して現在の位置(緯度と経度) を表示することができます。 procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); begin // Show current location ListBoxItemLatitude.ItemData.Detail := NewLocation.Latitude.ToString; ListBoxItemLongitude.ItemData.Detail := NewLocation.Longitude.ToString; end; TWebBrowser コンポーネントで Google マップを使用して 現在の位置を表示する 「iOS アプリケーションで Web ブラウザ コンポーネントを使用する」で説明したように、 TWebBrowser コンポーネントには iOS 用の Web ブラウザがラップされています。 次の URL パラメータを使用すると、TWebBrowser コンポーネントから Google マップを呼び 出すことができます。 https://maps.google.com/maps?q=(Latitude-value),(Longitude-value)&output=embed そのため、この URL を先ほど作成したイベント ハンドラ OnLocationChanged に追加します。 コードは次のようになります。 procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); var URLString: String; begin Embarcadero Technologies 100 // code for previous step goes here // Show Map using Google Maps URLString := Format( 'https://maps.google.com/maps?q=%s,%s&output=embed', [NewLocation.Latitude.ToString, NewLocation.Longitude.ToString]); WebBrowser1.Navigate(URLString); end; 逆ジオコーディングを使用する TGeocoder は、ジオコーディング(または逆ジオコーディング)サービスをラップするオブジ ェクトです。 ジオコーディングとは、住所や郵便番号などの地理データを地理座標に変換する処理です。逆 ジオコーディングとは、地理座標をそれ以外の住所などの地理データに変換する処理です。 ここでは、TGeocoder を使用して、位置(緯度と経度)を "逆ジオコーディング" し、人が読 み取れる住所情報にします。 TGeocoder を使った作業の基本的な手順は次のとおりです。 1. TGeocoder のインスタンスを作成します。 2. イベント OnGeocodeReverse を定義して、後でイベントを受け取れるようにします。 3. "逆ジオコーディング" を実行するためのデータを設定します。 4. TGeocoder でネットワーク上のサービスにアクセスして住所情報を解決します。 5. TGeocoder で OnGeocodeReverse イベントを発生させます。 6. iOS アプリケーションで、OnGeocodeReverse イベントのパラメータから住所情報を受 け取り、ユーザー インターフェイスを更新します。 TGeocoder はコンポーネントではないため(ただのクラスです)、これらの手順をコードで 定義する必要があります(コンポーネントをドロップしたり[オブジェクト インスペクタ]で イベント ハンドラを割り当てることはできません)。 まず、フォームの private セクションに新しいフィールド "FGeocoder: TGeocoder" を定義し ます。また、"OnGeocodeReverseEvent 手続き" も定義します。コードは次のとおりです。 Embarcadero Technologies 101 type TForm44 = class(TForm) // IDE defines visible (or non-visual) components here automatically private { Private declarations } FGeocoder: TGeocoder; procedure OnGeocodeReverseEvent(const Address: TCivicAddress); public { Public declarations } end; この 2 行を定義したら、<wiki-bold>OnGeocodeReverseEvent</wiki-bold> の行で Ctrl+Shift+C キーを押します。すると、コード中に次の手続きが作成されます(これは後で 使用します)。 procedure TForm44.OnGeocodeReverseEvent(const Address: TCivicAddress); begin end; これで、後のコードで示すように、TGeocoder のインスタンスを作成し、データをセットア ップすることができます。 TGeocoder.Current からは、ジオコーディング サービスを実際に実装しているクラスの型が返 されます。"TGeocoder.Current.Create" のコードでは、指定された型のコンストラクタ (Create)を呼び出し、FGeocoder フィールドに保存しています。また、TGeocoder の逆ジ オコーディングが完了したときに発生するイベント ハンドラを指定する必要もあります。 OnGeocodeReverseEvent(前のステップで定義したもの)を FGeocoder.OnGeocodeReverse に代入します。 最後に、TGeocoder のインスタンスの作成が成功していて、かつ TGeocoder が動作していな ければ、位置情報を渡して TGeocoder.GeocodeReverse を呼び出します。TGeocoder がデー タを受け取ると、OnGeocodeReverseEvent イベントが発生します。 Embarcadero Technologies 102 procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); begin // code for previous steps goes here // Setup an instance of TGeocoder if not Assigned(FGeocoder) then begin if Assigned(TGeocoder.Current) then FGeocoder := TGeocoder.Current.Create; if Assigned(FGeocoder) then FGeocoder.OnGeocodeReverse := OnGeocodeReverseEvent; end; // Translate location to address if Assigned(FGeocoder) and not FGeocoder.Geocoding then FGeocoder.GeocodeReverse(NewLocation); end; Embarcadero Technologies 103 リスト ボックス コンポーネントに人が読み取れる住所を表 示する 先ほど述べたように、逆ジオコーディングが完了すると OnGeocodeReverseEvent が発生しま す。 次に、住所パラメータ TCivicAddress に含まれるプロパティを代入して、人が読み取れる住所 情報をリスト ボックス フィールドに表示します。 procedure TForm44.OnGeocodeReverseEvent(const Address: TCivicAddress); begin ListBoxItemAdminArea.ItemData.Detail := Address.AdminArea; ListBoxItemCountryCode.ItemData.Detail := Address.CountryCode; ListBoxItemCountryName.ItemData.Detail := Address.CountryName; ListBoxItemFeatureName.ItemData.Detail := Address.FeatureName; ListBoxItemLocality.ItemData.Detail := Address.Locality; ListBoxItemPostalCode.ItemData.Detail := Address.PostalCode; ListBoxItemSubAdminArea.ItemData.Detail := Address.SubAdminArea; ListBoxItemSubLocality.ItemData.Detail := Address.SubLocality; ListBoxItemSubThoroughfare.ItemData.Detail := Address.SubThoroughfare; ListBoxItemThoroughfare.ItemData.Detail := Address.Thoroughfare; end; 関連項目 • iOS アプリケーションでレイアウトを使用してフォームのさまざまなサイズや向きを調 整する • iOS デバイスの通知センターを使用する • System.Sensors.TGeocoder FMX.Sensors.TLocationSensor • Embarcadero Technologies 104 iOS デバイスの通知センターを使用する このチュートリアルでは、iOS デバイス上で通知センターを使用する基本的な手順を説明しま す。 3 つの基本的な通知(警告)方法 ユーザーが iOS デバイスでアプリケーションの通知を設定している場合には、ここに示す 3 つ の基本的な方法でアプリケーションから通知を配信することができます。バナーが表示される のは一時的ですが、ダイアログはユーザーが消す必要があります。 アプリケーション アイコンのバッジ iPad の通知バナー 通知ダイアログ iPad の通知センター 次の図に示すのは iPad の通知センターです。ユーザーがリストをプルダウンすると最近の通知 すべてを見ることができます。 Embarcadero Technologies 105 通知サービスにアクセスする 通知サービス インターフェイス(IFMXNotificationCenter)は、FireMonkey プラットフォーム サービス(TPlatformServices)の 1 つとして定義されています。 通知サービスにアクセスするには、次の 2 つの作業を行います。 次の 2 つのユニットが uses 句に含まれていない場合には追加します。 • uses FMX.Platform, FMX.Notification; 次のコードを使って FireMonkey プラットフォーム サービスの問い合わせを実行します。 • var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Use the Notification Service end; Embarcadero Technologies 106 IFMXNotificationCenter インターフェイスには、アイコン バッジの数字や通知を使用するため の基本サービスが用意されています。 コードからアイコン バッジの数字を設定する IFMXNotificationCenter には、アイコン バッジの数字を定義するための SetIconBadgeNumber メソッドがあります。 procedure TForm1.SerIconBadgeNumber; var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Reset Icon Badge Number if Assigned(NotificationService) then NotificationService.SetIconBadgeNumber(18); end; アイコン バッジの数字を 18 に設定すると、iOS ホーム画面に表示されます。 アイコン バッジの数字は、ResetIconBadgeNumber メソッドを使ってリセットすることもでき ます。 procedure TForm1.ResetIconBadgeNumber; var NotificationService: IFMXNotificationCenter; Embarcadero Technologies 107 begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Set Icon Badge Number if Assigned(NotificationService) then NotificationService.ResetIconBadgeNumber; end; 通知のスケジュールを設定する ScheduleNotification メソッドを使って通知メッセージのスケジュールを設定することもでき ます。 通知メッセージを表示するには、TNotification クラスのインスタンスを作成し、名前(識別子) とメッセージを定義する必要があります。 procedure TForm1.ScheduleNotification; var NotificationService: IFMXNotificationCenter; Notification: TNotification; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then begin Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; // Fired in 10 second Notification.FireDate := Now + EncodeTime(0,0,10,0); Embarcadero Technologies 108 // Send notification in Notification Center NotificationService.ScheduleNotification(Notification); finally Notification.Free; end; end end; 通知メッセージを設定すると、iOS ホーム画面の上部に表示されます。 スケジュールされた通知メッセージを更新またはキャンセル する スケジュールされた個々の通知メッセージは、TNotification オブジェクトの Name プロパテ ィで識別することができます。 スケジュールされた通知を更新するには、同じ名前(Name プロパティ)を持つ TNotification のインスタンスを引数にして ScheduleNotification をもう一度呼び出します。 スケジュールされた通知をキャンセルするには、使用した識別子を引数にして CancelNotification メソッドを呼び出すだけです。 procedure TForm1.CancelNotification; var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then Embarcadero Technologies 109 NotificationService.CancelNotification('MyNotification'); end; 通知メッセージをすぐに表示する PresentNotification を使用して、通知メッセージをすぐに表示することもできます。 通知メッセージを表示するには、TNotification クラスのインスタンスを作成し、名前(識別子) とメッセージを定義する必要があります。 procedure TForm1.PresentNotification; var NotificationService: IFMXNotificationCenter; Notification: TNotification; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then begin Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; // Set Icon Badge Number as well Notification.ApplicationIconBadgeNumber := 18; // Show Notification Message NotificationService.PresentNotification(Notification); finally Notification.Free; end; end; end; Embarcadero Technologies 110 通知バナーと通知ダイアログ デフォルトでは、アプリケーションによって通知バナーが表示されます。 • iPad の通知バナー • 通知ダイアログ 通知バナーの代わりに通知ダイアログを使用するには、エンド ユーザーが通知センタ―の構成 ページで通知のスタイルを変更する必要があります。 Embarcadero Technologies 111 Embarcadero Technologies 112 通知ダイアログにアクションを追加する ダイアログをカスタマイズしてアクション ボタンを追加することもできます。 ダイアログのアクションをカスタマイズするには、アクションを AlertAction プロパティに設 定し、その後、HasAction プロパティを True に設定します。コードは次のとおりです。 Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; Notification.AlertAction := 'Code Now!'; Notification.HasAction := True; // Fired in 10 seconds Notification.FireDate := Now + EncodeTime(0,0,10,0); // Show Notification Message NotificationService.ScheduleNotification(Notification); finally Notification.Free; end; 関連項目 • iOS アプリケーションで写真を撮って共有する • iOS デバイスの位置センサを使用する • FMX.Notification.IFMXNotificationCenter Embarcadero Technologies 113 iOS アプリケーションで InterBase ToGo を使用 する このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • iOS アプリケーションでリスト ボックス コンポーネントを使用してテーブル ビューを表示 する このチュートリアルでは、dbExpress フレームワークを使って iOS デバイス上で InterBase ToGo の管理するデータを参照する基本手順を説明します。 dbExpress を使用してデータベースに接続する dbExpress は、Delphi で書かれた非常に高速なデータベース アクセス フレームワークです。 RAD Studio では、InterBase、Oracle、DB2、SQL Server、MySQL、Firebird、SQLite、ODBC など、ほとんどの主要データベース用にドライバを用意しています。データベースは違っても、 ここで説明するものと同様の手順でこれらのデータベースにアクセスすることができます。 Embarcadero Technologies 114 • iOS プラットフォームの場合、dbExpress では InterBase ToGo および SQLite をサポー トしています。これらのデータベース製品は iOS デバイス上で動かすことができます。 • それ以外の Oracle などのデータベースでは、少なくともクライアント ライブラリが必 要です。Windows プラットフォームでは、クライアント ライブラリは DLL として提供 されていて、それに対して接続します。そのため、iOS デバイスからこれらのデータベ ース製品に接続するには、DataSnap などの中間層技術を使ってアプリケーションを開 発する必要があります。 iOS デバイス上でクライアント ライブラリを使用せずにエンタープライズ データベースに接続 する方法は、別のチュートリアルで説明しています。「iOS クライアント アプリケーションか らエンタープライズ データベースに接続する」を参照してください。 ユーザー インターフェイスを設計しセットアップする このチュートリアルでは、1 つの TListBox コンポーネントを UI 要素として使用します。 以下の手順でリスト ボックス コンポーネントをセットアップします。 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi|空のアプリ ケーション]を選択して HD FireMonkey モバイル アプリケーションを作成します。 2. フォーム上に TListBox コンポーネントをドロップします。 3. [オブジェクト インスペクタ]で、リスト ボックスの次のプロパティを設定します。 o Align プロパティを alClient に設定して、リスト ボックス コンポーネントがフ ォーム全体を占めるようにします。 o DefaultItemStyles.ItemStyle プロパティを listboxitembottomdetail に設定します。 4. TListBox コンポーネントをデザイナまたはエディタで右クリックし、[項目の追加]を 選択して以下のコンポーネントを追加します。 o TListBoxHeader コンポーネント。 o TSearchBox コンポーネント。 Embarcadero Technologies 115 5. [項目デザイナ]を閉じます。 6. TLabel コンポーネントを TListBoxHeader に追加し、[オブジェクト インスペクタ]で 以下のプロパティを設定します。 o TLabel コンポーネントの Align プロパティを alClient に設定します。 o StyleLookup プロパティを toollabel に設定します。 o TextAlign プロパティを taCenter に設定します。 o Text プロパティを「DB DEMO」に設定します。 データに接続する dbExpress を使ってデータベース内のデータに接続する基本手順は以下のとおりです。 1. [ツール パレット]で TSQLConnection コンポーネントをダブルクリックします。 2. [オブジェクト インスペクタ]で TSQLConnection の以下のプロパティを設定します。 1. このアプリケーションでは InterBase ToGo を使用するため、Driver プロパティ を IBLite/ToGo に設定します。 2. LoginPrompt プロパティを False に設定して、ユーザーにログインを求めるプ ロンプトを表示しないようにします。 Embarcadero Technologies 116 3. Params プロパティの参照([...])ボタンをクリックして、Database の値を 「 C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb 」 (データベースの場所)に設定し、ダイアログ ボックスを閉じます。 4. Connected プロパティを True に設定します。 メモ: 開発環境でエラー([unavailable database.])が発生したら、それは現在 InterBase のライセンスがないことを示しています。一部の製品エディションでは、 InterBase Developer Edition のライセンスが製品に含まれています。詳細は「トラブル シューティング」を参照してください。 3. フォームに TSQLDataSet コンポーネントを追加し、以下のプロパティを設定します。 1. SQLConnection プロパティを SQLConnection1(前のステップで追加したもの) に設定します。 2. CommandText プロパティを「select COMMON_NAME, SPECIES_NAME from BIOLIFE order by COMMON_NAME」に設定します。 3. Active プロパティを True に設定します。 4. [LiveBinding デザイナ]を開き、データとユーザー インターフェイスを次のように接 続します。 1. SQLDataSet1 の COMMON_NAME をクリックし、マウス カーソルを ListBox1 の Item.Text へとドラッグします。 Embarcadero Technologies 117 2. SQLDataSet1 の SPECIES_NAME をクリックし、マウス カーソルを ListBox1 の Item.Detail へとドラッグします。 Embarcadero Technologies 118 アプリケーションを iOS に配置する ここまでは、デスクトップで InterBase を使用してきました。つまり、実際のデータベースは、 ローカルのハード ディスク ドライブ上(C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb など)にあります。iOS デバイスでは、アプリケー ションはサンドボックス化されるため、通常はアプリケーション フォルダの下の Documents フォルダにあるデータしか読み書きできません。 iOS 上でローカル データベースに接続するには、以下の作業を実施する必要があります。 • データベースを iOS デバイスに配置する。 • (データベース ファイルに接続するための)構成を Documents フォルダ下のローカル ファイルに変更する。 InterBase ToGo、dbExpress ドライバ、データベース ファイルを iOS に 配置する iOS でアプリケーションを実行するには、以下のファイルを配置する必要があります。 Interbase ToGo • InterBase 用 dbExpress ドライバ • データベース ファイル(dbdemos.gdb) 1. [プロジェクト|配置]を選択して配置マネージャを開きます。 2. 配置マネージャの上部にあるターゲット プラットフォームのドロップダウン リストか ら[すべての構成 - iOS シミュレータ プラットフォーム]を選択します。 3. [機能ファイルの追加]( )を選択します。 4. 以下のデータベース モジュールを選択し、[OK]をクリックして[機能ファイル]ダ イアログ ボックスを閉じます。 o InterBase ToGo。アプリケーションをデバイスに配置するときに使用するライ センスを選択する必要があります。使用可能なライセンス ファイルは、[機能 ファイル]ダイアログに reg_*.slip というパターンの名前で表示されます。この Embarcadero Technologies 119 チュートリアルでは、次の図のように、IBToGo と IBLite のライセンス ファイル を選択します。 o dbExpress の Interbase ドライバ 5. [ファイルの追加]を選択し、データベース ファイル (C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb など)を 選択します。 6. dbdemos.gdb を選択し、[リモート パス]を「StartUp\Documents\」に変更します。 7. [プラットフォーム]の列を選択して次の作業を行います(dbdemos.gdb の行で参照 ([...])ボタンをダブルクリックします)。 1. dbdemos.gdb について、[iOSSimulator]と[iOSDevice]が含まれていることを確認し ます。 2. [Win32]が含まれている場合にはリストから削除します(データベース ファ イルを Win32 プラットフォームにコピーする必要はありません)。 [すべての構成 - iOS デバイス プラットフォーム]を選択し、dbdemos.gdb が StartUp\Documents\ に配置されるよう設定されていることを確認します。 Embarcadero Technologies 120 ここで構成したとおり、データベース ファイル(dbdemos.gdb)は iOS アプリケーションの サンドボックス領域にある Documents フォルダに配置されます。 iOS 上のローカル データベース ファイルに接続するようコードを変更する 前のステップで説明したように、TSQLConnection コンポーネントはローカル ファイル システ ム上のデータベースに対して絶対パスで接続します。そのため、データベースに接続する前に ファイルの場所を置き換える必要があります。手順は以下のとおりです。 1. フォーム デザイナで SQLConnection1 コンポーネントを選択します。 2. [オブジェクト インスペクタ]で、BeforeConnect イベントの値のフィールドをダブ ルクリックします。 3. このイベント ハンドラに次のコードを追加します。 procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject); begin {$IFDEF IOS} SQLConnection1.Params.Values['Database'] := GetHomePath + PathDelim + 'Documents' + PathDelim + 'dbdemos.gdb'; {$ENDIF} end; GetHomePath 関数からは、iOS アプリケーションの実際のホームの場所が返されます。 PathDelim 定数を使用することが推奨されています。これは、\ や / などの区切り文字をハー ドコードするのではなく、PathDelim によってターゲット プラットフォームの固有のパス区切 り文字を使用できるためです。 Embarcadero Technologies 121 iOS シミュレータまたは iOS デバイス上でアプリケーション を実行する これでアプリケーションを実行する準備が整いました。IDE 内で実行したときと同様に、デー タを参照することができるはずです。また、2 番目の画像に示すように、検索ボックスを使用 してリストを絞り込むこともできます。 Embarcadero Technologies 122 トラブルシューティング InterBase のライセンスの問題 開発環境でデータベースに接続したときにエラー([unavailabale database.])が発生したら、 それは現在 InterBase のライセンスがないことを示しています。 一部の製品エディションでは、InterBase Developer Edition のライセンスが製品に含ま • れています。 登録済みの RAD Studio で InterBase Developer Edition のライセンスを認証するには、 • [Embarcadero 製品ライセンス マネージャ]を使用します([スタート|すべてのプロ グラム|Embarcadero InterBase XE3]をクリックしてください)。 例外処理の問題 アプリケーションで例外が発生して適切な例外処理コードがない場合、iOS アプリケーション は実行時にそのままクラッシュします(消えてしまいます)。クラッシュが発生した場合、問 題のトラブルシューティング時に手動でデータベースに接続することができます。手順は以下 のとおりです。 1. SQLConnection1 コンポーネントを選択し、Connected プロパティを False に変更しま す。 2. ボタンをフォームにドロップし、データベースに手動で接続するための次のようなイベ ント ハンドラを作成します。 procedure TForm1.Button1Click(Sender: TObject); begin try SQLConnection1.Connected := True; SQLDataSet1.Active := True; except on e: Exception do begin ShowMessage(e.Message); end; end; end; Embarcadero Technologies 123 Embarcadero Technologies 124 よくあるエラーと解決方法 以下に挙げるのは、データベースへの接続時に発生しがちなエラーと、その問題を解決するた めの案です。 iOS でのエラー 解決方法 データベース ファイル(dbdemos.gdb)が 'StartUp\Documents\' に 配布されているかを確認します。 InterBase ToGo のライセンス ファイルが配布されているかを確認し ます。 ローカル ファイルを指定しているかを確認します(SQLConnection1 コンポーネントの OnBeforeConnect イベントに対するイベント ハン ドラを追加します)。 関連項目 • dbExpress での InterBase ToGo の使用 • • http://www.embarcadero.com/products/interbase/product-editions iOS アプリケーションで SQLite を使用する • iOS クライアント アプリケーションからエンタープライズ データベースに接続する Embarcadero Technologies 125 iOS アプリケーションで SQLite を使用する このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • iOS アプリケーションでリスト ボックス コンポーネントを使用してテーブル ビューを表示 する このチュートリアルでは、dbExpress フレームワークにより iOS デバイス上のローカル データ ストレージとして SQLite を使用する基本手順を説明します。 dbExpress を使用してデータベースに接続する dbExpress は、Delphi で書かれた非常に高速なデータベース アクセス フレームワークです。 RAD Studio では、InterBase、Oracle、DB2、SQL Server、MySQL、Firebird、SQLite、ODBC Embarcadero Technologies 126 など、ほとんどの主要データベース用にドライバを用意しています。データベースは違っても、 ここで説明するものと同様の手順でこれらのデータベースにアクセスすることができます。 • iOS プラットフォームの場合、dbExpress では InterBase ToGo および SQLite をサポー トしています。これらのデータベース製品は iOS デバイス上で動かすことができます。 • それ以外の Oracle などのデータベースでは、少なくともクライアント ライブラリが必 要です。Windows プラットフォームでは、クライアント ライブラリは DLL として提供 されていて、それに対して接続します。そのため、iOS デバイスからこれらのデータベ ース製品に接続するには、DataSnap などの中間層技術を使ってアプリケーションを開 発する必要があります。 iOS デバイス上でクライアント ライブラリを使用せずにエンタープライズ データベースに接続 する方法は、別のチュートリアルで説明しています。「iOS クライアント アプリケーションか らエンタープライズ データベースに接続する」を参照してください。 Windows 環境で開発用にデータベースを作成する まず、開発用の Windows プラットフォームで SQLite データベース ファイルを作成します。モ バイル フォーム デザイナを使って iOS アプリケーションのユーザー インターフェイスを設計 できるよう、以下の手順を実施します。 [データ エクスプローラ]でデータベースを作成する 1. [データ エクスプローラ]で[SQLite]ノードを右クリックし、[新規接続を追加]を 選択します。 2. 接続の名前を定義します。たとえば「ShoppingList」とします。 3. データベース ファイルの場所を指定します。 Embarcadero Technologies 127 4. [詳細]ボタンをクリックして[拡張プロパティ]ダイアログを開きます。 5. FailIfMissing プロパティを「False」に変更してダイアログを閉じます。 メモ: FailIfMissing を「False」に設定すると、ファイルが存在しない場合に[データ エクスプローラ]によって新しいデータベース ファイルが作成されます。 6. [接続テスト]ボタンをクリックします。この操作を行うと、ファイルが存在しない場 合に新しいデータベース ファイルが作成されます。 [データ エクスプローラ]でテーブルを作成する 1. [データ エクスプローラ]で、[SQLite]セクションの ShoppingList ノードを選択し、 コンテキスト メニューから[テーブルの新規作成]を選択します。 Embarcadero Technologies 128 2. 値が TEXT の「ShopItem」という列を指定します。 3. [保存]ボタンをクリックし、テーブル名を指定します(「Item」など)。 ユーザー インターフェイスを設計しセットアップする このチュートリアルでは、1 つの TListBox コンポーネントを UI 要素として使用します。 Embarcadero Technologies 129 以下の手順でリスト ボックス コンポーネントなどの UI 要素をセットアップします。 1. [ファイル|新規作成|FireMonkey モバイル アプリケーション- Delphi]を選択して FireMonkey モバイル アプリケーションを作成します。 2. フォーム上に TToolBar をドロップします。 3. ツールバー コンポーネント上に TButton をドロップします。 4. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Name プロパティを「ButtonAdd」に設定します。 o StyleLookup を addtoolbuttonbordered に設定します。 5. ツールバー コンポーネント上に TButton をドロップします。 6. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Name プロパティを「ButtonDelete」に設定します。 o StyleLookup を deletetoolbutton に設定します。 o Text を「Delete」に設定します。 o Visible を False に設定します。 7. ツールバー コンポーネント上に TLabel をドロップします。 8. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Align を alClient に設定します。 o StyleLookup を toollabel に設定します。 o Text を「Shopping List」に設定します。 o TextAlign を taCenter に設定します。 9. フォーム上に TListBox コンポーネントをドロップします。 10. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Align プロパティを alClient に設定して、リスト ボックス コンポーネントがフ ォーム全体を占めるようにします。 データに接続する [データ エクスプローラ]で既に定義したデータベース内のデータに接続する基本手順は以下 のとおりです。 1. [データ エクスプローラ]の Item テーブルを選択し、フォーム デザイナへとドラッグ します。 Embarcadero Technologies 130 メモ: これによって、2 つのコンポーネント(ShoppingList: TSQLConnection および Item: TSQLDataSet)がフォーム上に作成されます。 2. フォームで ShoppingList コンポーネントを選択し、Connected プロパティを True に変 更します。 3. フォームで Item コンポーネントを選択し、Active プロパティを True に変更します。 4. [表示|LiveBinding デザイナ]を選択して[LiveBinding デザイナ]を開きます。 5. Item コンポーネントの ShopItem を選択し、ShopItem を ListBox1 へとドラッグします。 この手順を実施すると、アプリケーションのユーザー インターフェイスが SQLite データベー スのデータに接続されます。データが既に含まれたテーブルをこのチュートリアルで使用して いる場合には、これでフォーム デザイナに実際のデータが表示されるはずです。 Embarcadero Technologies 131 ユーザーがリストの項目を選択したときに削除ボタンを表示 するためのイベント ハンドラを作成する [Delete]ボタンの Visible プロパティは False に設定されています。そのため、このボタンは デフォルトでエンド ユーザーから見えなくなっています。次のようにすると、ユーザーがリス トの項目を選択したときにこのボタンを表示することができます。 • ListBox1 を選択し、OnItemClick イベント用に以下のイベント ハンドラを定義します。 procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin ButtonDelete.Visible := ListBox1.Selected <> nil; end; リストにエントリを追加するための追加ボタン用のイベント ハンドラを作成する Embarcadero Technologies 132 次のステップでは、項目をショッピング リストに追加する機能をアプリケーションに追加しま す。 1. フォーム上に TSQLQuery コンポーネントをドロップします。 2. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Name プロパティを「SQLQueryInsert」に設定します。 o SQLConnection プロパティを ShoppingList に設定します。 o SQL プロパティを次のように設定します。 INSERT INTO ITEM (ShopItem) VALUES (:ShopItem) o Params プロパティの拡張([...])ボタンを選択します。 o ShopItem パラメータを選択し、DataType を ftString に設定します。 3. フォーム デザイナで AddButton コンポーネントをダブルクリックします。このイベン ト ハンドラに次のコードを追加します。 procedure TForm1.ButtonAddClick(Sender: TObject); var TaskName: String; begin try if InputQuery('Enter New Item', 'Name', TaskName) and (TaskName.Trim <> '') then begin SQLQueryInsert.ParamByName('ShopItem').AsString := TaskName; SQLQueryInsert.ExecSQL(); Item.Refresh; ButtonDelete.Visible := ListBox1.Selected <> nil; Embarcadero Technologies 133 end; except on e: Exception do begin ShowMessage(e.Message); end; end; end; InputQuery 関数は、エンド ユーザーにテキストの入力を求めるダイアログ ボックスを表示し ます。この関数からはユーザーが[OK]を選択したときに True が返されるため、ユーザーが [OK]を選択し、かつ、テキストにデータが含まれている場合にのみ、データベースにデータ を追加することができます。 Embarcadero Technologies 134 リストからエントリを削除するための削除ボタン用のイベン ト ハンドラを作成する 次のステップでは、項目をショッピング リストから削除する機能をアプリケーションに追加し ます。 1. フォーム上に TSQLQuery コンポーネントをドロップします。 2. [オブジェクト インスペクタ]で以下のプロパティを設定します。 o Name プロパティを「SQLQueryDelete」に設定します。 o SQLConnection プロパティを ShoppingList に設定します。 o SQL プロパティを次のように設定します。 delete from Item where ShopItem = :ShopItem o Params プロパティの拡張([...])ボタンを選択します。 o ShopItem パラメータを選択し、DataType を ftString に設定します。 3. フォーム デザイナで DeleteButton コンポーネントをダブルクリックします。このイベ ント ハンドラに次のコードを追加します。 procedure TForm1.ButtonDeleteClick(Sender: TObject); var TaskName: String; begin TaskName := ListBox1.Selected.Text; try SQLQueryDelete.ParamByName('ShopItem').AsString := TaskName; SQLQueryDelete.ExecSQL(); Item.Refresh; ButtonDelete.Visible := ListBox1.Selected <> nil; except on e: Exception do begin SHowMessage(e.Message); end; end; end; Embarcadero Technologies 135 iOS 上のローカル データベース ファイルに接続するようコー ドを変更する このアプリケーションの基本的な機能の実装はこれで終わりです。[データ エクスプローラ] で作業をしたときに、Windows 上にデータベース ファイルを作成しました。このデータベー ス ファイルは、iOS デバイスにコピーするかその場で作成しなければ、iOS デバイス上で使用 できません。 SQLite のデータベースおよびテーブルは次の手順で作成することができます。 iOS デバイス上での SQLite データベースの場所を指定する 1. フォーム デザイナで ShoppingList コンポーネントを選択します。 2. [オブジェクト インスペクタ]で BeforeConnect イベントをダブルクリックします。 3. このイベント ハンドラに次のコードを追加します。 procedure TForm1.SQLConnectionSQLiteBeforeConnect(Sender: TObject); begin {$IFDEF IOS} ShoppingList.Params.Values['Database'] := GetHomePath + PathDelim + 'Documents' + PathDelim + 'shoplist.s3db'; {$ENDIF} end; GetHomePath 関数からは、iOS アプリケーションの実際のホームの場所が返されます。定数 System.SysUtils.PathDelim を使用することが推奨されています。これは、\ や / などの区切り 文字をハードコードするのではなく、PathDelim によってターゲット プラットフォームの固有 のパス区切り文字を使用できるためです。 テーブルが存在しなければ作成する SQLite では、CREATE TABLE IF NOT EXISTS 文を使用すると、テーブルが存在しない場合に 作成することができます。テーブルの作成は、TSQLCOnnection コンポーネントがデータベー スに接続した後、TSQLDataSet コンポーネントがテーブルに接続する前に行うことができます。 手順は次のとおりです。 1. フォーム デザイナで ShoppingList コンポーネントを選択します。 2. [オブジェクト インスペクタ]で AfterConnect イベントをダブルクリックします。 Embarcadero Technologies 136 3. このイベント ハンドラに次のコードを追加します。 procedure TForm1.ShoppingListAfterConnect(Sender: TObject); begin ShoppingList.ExecuteDirect('CREATE TABLE IF NOT EXISTS Item (ShopItem TEXT NOT NULL)'); end; Embarcadero Technologies 137 iOS シミュレータまたは iOS デバイス上でアプリケーション を実行する これでアプリケーションを実行する準備が整いました([実行|実行]を選択します)。 アプリケーション実行時に問題が発生した場合には、「トラブルシューティング」で説明して いる手順を実施してください。 関連項目 • iOS アプリケーションで InterBase ToGo を使用する • iOS クライアント アプリケーションからエンタープライズ データベースに接続する • XE3 での SQLite のサポート Embarcadero Technologies 138 iOS クライアント アプリケーションからエンター プライズ データベースに接続する このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。 • iOS アプリケーションでリスト ボックス コンポーネントを使用してテーブル ビューを表示 する • iOS アプリケーションで InterBase ToGo を使用する このチュートリアルでは、iOS クライアント アプリケーションからエンタープライズ データベ ースに接続する方法を説明します。 エンタープライズ データベースに接続するには、クライアント ライブラリが必要です。クライ アント ライブラリは、たいてい、データベース ベンダから DLL 形式で提供されています。し かし、iOS デバイスの場合はクライアント ライブラリが提供されていないため、この方法は使 用できません。この問題を解決するには、エンタープライズ データベースに接続するための中 間層を開発して、iOS アプリケーションがその中間層と通信できるようにします。RAD Studio では、ほとんどコーディングしないで中間層を開発できるよう(そして中間層にアクセスでき るよう)、DataSnap フレームワークを提供しています。このチュートリアルでは、中間層を 開発し、その後 iOS クライアントを開発する手順を説明します。 Embarcadero Technologies 139 中間層(DataSnap サーバー)を作成する まず、データベース サーバーのテーブルを公開する DataSnap サーバーを作成します。このチ ュートリアルでは DataSnap サーバー VCL フォーム アプリケーションを DataSnap サーバーと して使用します。 メモ: このチュートリアルの DataSnap サーバー(VCL アプリケーション)は、多層データベ ース アプリケーションの中間層として機能します。DataSnap サーバーのインスタンスを作成 して後で削除することは簡単にできます。基本の手順を理解した後で、中間層を Windows サ ービス アプリケーションに変換することができます。 DataSnap サーバー VCL アプリケーションを作成する 1. 新規プロジェクトを作成します。[ファイル|新規作成|その他...]を選択し、[新規 作成]ダイアログで[Delphi プロジェクト|DataSnap Server|DataSnap Server]を選 択して、新しい Delphi プロジェクトを作成します。 2. [DataSnap サーバーの新規作成]ウィザードが開くので、それに沿って進みます。変 更しなければならないパラメータはそれほど多くありません。 Embarcadero Technologies 140 3. [DataSnap サーバーの新規作成]ウィザードで、次のように指定します。 1. 最初のステップで、アプリケーションの種類に[VCL フォーム アプリケーショ ン]を選択します。 2. 2 番目のステップで、[サーバーの機能]の一覧から、[TCP/IP]プロトコルと、 [サーバー メソッド クラス]および[サンプル メソッド]を選択します。 3. 3 番目のステップでは、TCP/IP 通信ポートをデフォルトの 211 のままにします。 こうしておくと、クライアントとサーバーの間の通信が、デフォルトの DataSnap ポートを通じて行われます。 4. 最後の(4 番目の)ステップで、[サーバー メソッド クラスの上位クラス]に [TDSServerModule]を選択します。 4. フォーム ユニットを「DataSnapServerUnit.pas」という名前で保存します。 5. DataSnapServerUnit に移動し、フォームの Name プロパティを「DSServerForm」に変 更します。 6. サーバー メソッド ユニット(デフォルトではウィザードによって ServerMethodsUnit1 という名前で作成されています)を「ServerModuleUnit.pas」という名前で保存します。 Embarcadero Technologies 141 7. サーバー コンテナ ユニット(デフォルトではウィザードによって ServerContainerUnit1 という名前で作成されています)を「ServerContainerUnit.pas」 という名前で保存します。 8. 新しいプロジェクトを「DataSnapServerProject.droj」という名前で保存します。 9. [プロジェクト マネージャ]で ProjectGroup1 を選択し、プロジェクトを 「DataSnapTutorialProjectGroup.groupproj」という名前で保存します。 DataSnap サーバー上のデータセットを定義する 1. ServerContainerUnit.pas ファイルに移動し、implementation セクションの uses 句を 「uses Winapi.Windows, ServerModuleUnit;」に置き換えます。 2. ServerModuleUnit.pas ファイルに移動します。 3. フォーム デザイナで、サーバー モジュールの Name プロパティを 「DSServerModule_EMPLOYEE」に変更します。 4. サーバー モジュール上に以下のコンポーネントを構成します。 o TSQLConnection コンポーネントをサーバー モジュール上にドロップし、以下 のプロパティを設定します。 TSQLConnection は、データベース サーバーへの dbExpress 接続をカプセル化したも のです。 Name プロパティを「SQLConnection_EMPLOYEE」に設定します。 LoginPrompt プロパティを False に設定します。 Driver を InterBase に設定します。 Driver ノードを展開し、DataBase プロパティを 「C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\EMPLOYEE.GDB」に設定します。 Connected プロパティを True に設定します。エラーが発生したら、 Driver 以下のプロパティを再確認してください。 Embarcadero Technologies 142 o TSQLDataSet コンポーネントをサーバー モジュール上にドロップし、以下のプ ロパティを設定します。 TSQLDataSet は、dbExpress を使って取得されたデータを表します。 Name プロパティを「SQLDataSet_EMPLOYEE」に設定します。 SQLConnection プロパティを SQLConnection_EMPLOYEE に設定しま す。 CommandType プロパティを ctTable に設定します。 CommandText プロパティを「EMPLOYEE」に設定します。 Active プロパティを True に変更します。エラーが発生したら、設定し たプロパティを再確認してください。 o TDataSetProvider コンポーネントをサーバー モジュール上にドロップし、以下 のプロパティを設定します。 TDataSetProvider では、データセットのデータをパッケージにまとめ、転送可能なデ ータ パケット(複数可)を DataSnap クライアントに渡します。 Name プロパティを「DataSetProvider_EMPLOYEE」に設定します。 DataSet プロパティを SQLDataSet_EMPLOYEE に設定します。 Embarcadero Technologies 143 メモ: このチュートリアルでは、例として InterBase を使用します。ただし、どのようなデー タベース サーバーにも同じ手順で接続できます。適切なドライバを選択し、使用するデータベ ースを指すよう他のプロパティを設定してください。 DataSnap サーバーのデータセットを公開する これで、データセットと次のレイヤ向けにデータをパッケージ化するデータセット プロバイダ とを含んだ新しいサーバー モジュールを作成できました。次のステップでは、サーバー モジュ ールを DataSnap クライアントに公開します。 1. フォーム デザイナで ServerContainerUnit を開きます。 2. DSServerClass1 を選択し、OnGetClass イベントの既存のイベント ハンドラを更新し ます。DSServerClass1 のイベント ハンドラに以下のコードを追加します。 procedure TServerContainer1.DSServerClass1GetClass(DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); begin PersistentClass := TDSServerModule_EMPLOYEE; end; このイベント ハンドラで、DataSnap サーバーは、プロバイダとこのクラスの public メソッド 群を DataSnap クライアントに対して公開します。前のセクションの手順を実施していると、 これで DataSetProvider_EMPLOYEE データセット プロバイダ コンポーネントを DataSnap ク ライアントに公開することになります。 DataSnap サーバーを実行する DataSnap サーバーの実装は終了しました。DataSnapServerProject.exe を右クリックし、 [デバッガを使わずに実行]を選択します。 Embarcadero Technologies 144 これで、お使いの Windows マシン上で DataSnap サーバーが動作していることがわかります。 DataSnap サーバーには UI 要素がないため空のフォームのように見えますが、この時点ではそ れで問題ありません。 DataSnap サーバーに接続する iOS アプリケーションを作成 する 次のステップでは iOS クライアント アプリケーションを作成します。 1. [プロジェクト マネージャ]で DataSnapTutorialProjectGroup を右クリックし、[新 規プロジェクトを追加...]を選択します。 2. [Delphi プロジェクト]ページで[FireMonkey モバイル アプリケーション]を選択し ます。 Embarcadero Technologies 145 3. 新しいユニットを「DataSnapClientUnit.pas」という名前で保存します。 4. 新しいプロジェクトを「DataSnapClientProject.droj」という名前で保存します。 5. DataSnapClientUnit を開き、フォームの Name プロパティを「DSClientForm」に変更 します。 6. 以下のコンポーネントを FireMonkey モバイル フォーム デザイナにドロップします。 o TSQLConnection コンポーネント(SQLConnection1) TSQLConnection は、データベース サーバーへの dbExpress 接続をカプセル化したも のです。DataSnap サーバーもサポートされています。 Driver プロパティを DataSnap に設定します。 Driver プロパティを展開し、HostName プロパティを DataSnap サーバ ーのホスト名に設定します。 LoginPrompt プロパティを False に設定します。 Connected プロパティを True に設定します。 エラーが発生したら、設定したプロパティを再確認してください。 o TDSProviderConnection コンポーネント(DSProviderConnection1) TDSProviderConnection コンポーネントでは、dbExpress を使った DataSnap サーバー への接続を提供しています。 SQLConnection プロパティを SQLConnection1 に設定します。 ServerClassName を「TDSServerModule_EMPLOYEE」に設定します。 この名前は、DataSnap サーバーのサーバー モジュールのクラス名と一 致する必要があります。 Connected プロパティを True に設定します。 Embarcadero Technologies 146 o TClientDataSet コンポーネント(ClientDataSet1) TClientDataSet は、データベース非依存のデータセットを実装したもので、別のデータ セットから取り出したレコードのローカルのインメモリ バッファとして使用できます。 RemoteServer プロパティを DSProviderConnection1 に設定します。 ProviderName プロパティを DataSetProvider_EMPLOYEE に設定します。 この名前は、DataSnap サーバーのプロバイダの名前と一致する必要があ ります。 o Active プロパティを True に設定します。 TListBox コンポーネント Align プロパティを alClient に設定します。 7. [LiveBinding デザイナ]を開き、データとユーザー インターフェイスを次のように接 続します。 1. ClientDataSet1 の FULL_NAME をクリックし、マウス カーソルを ListBox1 の Item.Text へとドラッグします。 2. これで、iOS 上に DataSnap クライアントを作成し、構成できました。 DataSnap サーバーから取り出されたデータを IDE で確認できるはずです。 Embarcadero Technologies 147 MIDAS ライブラリを iOS シミュレータに配置する iOS シミュレータでアプリケーションを実行するには、以下のファイルを配置する必要があり ます。 • MIDAS ライブラリ 1. [プロジェクト|配置]を選択して配置マネージャを開きます。 2. [機能ファイルの追加]( )を選択します。 3. 次のモジュールを選択して[OK]をクリックし、配置マネージャを閉じます。 o MIDAS ライブラリ Embarcadero Technologies 148 iOS シミュレータまたは iOS デバイス上でアプリケーション を実行する これでアプリケーションを実行する準備が整いました。 [プロジェクト マネージャ]で[iOS シミュレータ]または[iOS デバイス]のターゲット プ ラットフォームを選択し、アプリケーションを実行します。IDE 内で実行したときと同様に、 データを参照することができるはずです。 関連項目 • iOS アプリケーションで InterBase ToGo を使用する • iOS アプリケーションで SQLite を使用する • DataSnap アプリケーションの開発 • 多層データベース アプリケーションを理解する • Datasnap.DSServer.TDSServer Embarcadero Technologies 149