【C1】Delphi/C++チュートリアルセッション「RAD Studio XE5によるマルチ言語／マルチデバイス開発の進め方」
エンバカデロ・テクノロジーズ
エヴァンジェリスト 高橋智宏

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アジェンダ• RAD Studio XE5の概要– Delphi or C++– Intel or ARM– Windows / OS X / iOS / Android• プロジェクトとは?

– FireMonkey HD アプリ– FireMonkey Mobile アプリ• ユニットとは?
• データモジュールとは?
• Tips– 複数フォームの表示・非表示– Androidの[Back]キー• まとめ2

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

13

RAD Studio XE5の概要

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi XE5 / C++Builder XE5
統合開発環境– マルチOS, マルチデバイス対応のビジュアルRADツール•

単一コードベースで Windows, OS X, iOS, Android に対応– アイデアを素早くカタチに••多数用意されたコンポーネントをドラッグ＆ドロップして効率的にアプリを開発可能
もちろん、自作コンポーネントの作成&登録も可能!!

– 真のネイティブコード
•中間コードや仮想マシンを必要としない、CPU/GPUの性能を100%活用したハイパフォーマ
ンスなネイティブアプリを生成
統合開発環境 (IDE)

Delphi XE5 / C++Builder XE5 のマルチプラットフォーム対応状況:
Win32

Win64

OS X

iOS

Android

Delphi

■

■

■

■

■

C++Builder■

■

■

■

New!

なぜ、マルチデバイス&OS対応が可能なのか?
• FireMonkey（FM）フレームワーク– CPU / GPU ネイティブ– コンポーネントレイヤーがデバイスの差異を吸収– しかしライブラリはネイティブ
Delphi / C++言語

アプリケーション開発者レベルでは基本的にデバイスの差は存在しない
アプリケーションレイヤーに対し共通のインターフェイスを提供

FireMonkeyフレームワーク
Win固有WindowsMac固有OS XiOS
固有iOS

Android
固有Android※ Androidは現在Delphi言語のみでサポート

OSごとの差異はフレームワーク内で吸収
アプリケーションコードはネイティブ

Windowsアプリの構造
統合開発環境(IDE)(エディタ、デバッガ、フォームデザイナ etc.)
Intel/AMD x86用
Delphi/C++ コンパイラ

Delphi/C++ RTL

FireMonkey

Win32/Win64 APIIntel/AMD x64用
Delphi/C++ コンパイラ
各種コンポーネント

DirectX

XP, Vista, 7, 8, 2008, 2012
6

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Windowsアプリ実行&デバッグの仕組み
IDE
リモートWindows用
実行&デバッグ用ブリッジ（PAServer）
PAServer = リモートデバッガプロセス

IDEとWindowsプロセスを仲介する役目

ローカル

Win32アプリ

Win64アプリ

Win32アプリ

Win64アプリ

OS Xアプリの構造
統合開発環境(IDE)(エディタ、デバッガ、フォームデザイナ etc.)
Intel x86用
Delphi/C++ コンパイラ

Delphi/C++ RTL

FireMonkey

OS X API / POSIX

各種コンポーネント

OpenGL

Lion, Mountain Lion, Mavericks
8

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

OS Xアプリ実行&デバッグの仕組み
IDE
リモートMacマシン(OS X)用
実行&デバッグ用ブリッジ（PAServer）
PAServer = リモートデバッガプロセス

OS XアプリIDEとOS Xプロセスを仲介する役目

iOSアプリの構造
Delphi 統合開発環境(IDE)(エディタ、デバッガ、フォームデザイナ etc.)
New!

iOSシミュレータ(Intel x86)用
Delphi コンパイラ

Delphi/C++ RTL

10

iOSデバイス(ARMv7)用
Delphi/C++ コンパイラ

FireMonkey

各種コンポーネント

iOS API / POSIX

OpenGL ES

iOSシミュレータ(6.x,7.0)

iOSデバイス(iOS 6.x,7.0)

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

iOSアプリ実行&デバッグの仕組み
署名
IDE
リモートMacマシン(OS X)用
実行&デバッグ用ブリッジ（PAServer）
PAServer = リモートデバッガプロセス

IDEとiOSプロセスを仲介する役目

USB
ケーブル

iOS
シミュレータ

iOS実機
iOS 6.0〜7.0

Androidの場合
Delphi 統合開発環境(IDE)(エディタ、デバッガ、フォームデザイナ etc.)

Android(ARMv7 + NEON)用 Delphi コンパイラ
Delphi RTL

FireMonkey

各種コンポーネント

Android SDK

Android NDKOpenGL ES

Androidエミュレータ
12Androidデバイス(2.3.3〜4.4)

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Androidアプリ実行&デバッグの仕組み
署名

実機用のUSBドライバは適宜自分でインストール

IDE

USB
ケーブル

Android
エミュレータ(ARM/GPUサポート)

Android実機(2.3.3〜4.4)

実機側で、USBデバッグのオプションを有効する

214

プロジェクトとは?

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphiプロジェクト• FireMonkey HD アプリケーション– Win32– Win64– OS X

ビルド構成
- Debug- Release• FireMonkey モバイル アプリケーション– iOS シミュレータ– iOS デバイス
– Android– Win32
15

ビルド構成- Debug- Release

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

プロジェクトマネージャ

C++プロジェクト• FireMonkey HD アプリケーション– Win32– Win64– OS X

ビルド構成- Debug- ReleaseNew!

• FireMonkey モバイル アプリケーション– iOS デバイス
– Win3216

ビルド構成- Debug- Release

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

プロジェクトマネージャ

モバイル特有のプロジェクト設定• iOSの[バージョン情報]– UIDeviceFamily• iPhone• iPad• iPhone および iPad

• Androidの[バージョン情報]– package• デフォルトの com.embarcadero.$(ModuleName) を変更• Androidの[使用する権限]– アプリの利用する機能により適宜有効に!!
17

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

IDEの設定• 自動保存の設定の[エディタファイル] を ON
• 接続プロファイルマネージャ– OS X : リモートでOS XアプリとiOSアプリを実行– 32ビットWindows : リモートでWin32アプリをDebug– 64ビットWindows : リモートでWin64アプリをDebug• プロビジョニング– [iOSデバイス – デバッグ]に指定する証明書の文字列の意味• デフォルトは iPhone Developer だが…

• SDKマネージャ– Androidは、ローカルのWindowsマシン内のSDK/NDK/JDKを利用• フォームデザイナのデバイスマネージャ
18

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

プロジェクトグループ• 複数のプロジェクトをまとめるプロジェクトのこと– 拡張子は .groupproj• プロジェクトのビルド順も管理– プロジェクトマネージャ内で上から下の順にビルド• プロジェクト構成の例– ProjectGroupA• Delphi iOS(iPhone&iPad) & Android両用プロジェクト• Delphi Win32/Win64両用プロジェクト– ProjectGroupB• Delphi iOS(iPad)専用プロジェクト• Delphi Android専用プロジェクト
19

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

320

ユニットとは?

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi• プロジェクトマネージャで管理するモジュールの単位• クラスや関数のみの場合– Unit1.pas• フォーム(Unit2)の場合– Unit2.pas + Unit2.fmx• データモジュール(Unit3)の場合– Unit3.pas + Unit3.dfm• プロジェクトオプションの[フォーム]は要注意!!
– メインフォーム : アプリ起動時に最初に表示されるフォーム– 自動生成フォーム : データモジュールも含む– 使用可能フォーム
21

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++• プロジェクトマネージャで管理するモジュールの単位• クラスや関数のみの場合– Unit1.cpp + Unit1.h• フォーム(Unit2)の場合– Unit2.cpp + Unit2.fmx + Unit2.h• データモジュール(Unit3)の場合– Unit3.cpp + Unit3.dfm + Unit3.h• プロジェクトオプションの[フォーム]は要注意!!
– メインフォーム : アプリ起動時に最初に表示されるフォーム– 自動生成フォーム : データモジュールも含む– 使用可能フォーム
22

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4
23

データモジュールとは?

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

データモジュール• フォームデザイナ内で非ビジュアルコンポーネントをD&D– GUIコンポーネントは配置できません• GUIに依存しない機能をカプセル化– クラスインターフェース等を外部に公開• 複数プロジェクト間で共有できる– プラットフォーム依存のコードは条件定義などで書き分けても良い• Delphi言語、C++言語のどちらでも使える
Win32
Win64
OS X
24

iPhoneデータモジュール

iPadAndroid

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ- 複数デバイス対応 -25

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Tips

26

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

複数フォームの場合• Windows / OS X
– Show() : 子ウィンドウをモードレス表示– ShowModal() : 子ウィンドウをモーダル表示• iOS / Android– Show() : フルスクリーンのフォームをモードレス表示• 最前面に覆い被さる– ShowModal(無名メソッド)• 同じくモードレス表示だが閉じると無名メソッドが呼ばれる

http://blog.marcocantu.com/blog/xe5_anonymous_showmodal_android.html

27

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Androidの[Back]キーへの対応• 基本は、アプリはバッググラウンドに移動– キーボードが表示されている場合– 子フォームが表示されている場合• 画面内のGUI更新に使えます– 前ページに戻る etc…

• AndroidのFormのOnKeyUpイベント– vkHardwareBack を監視– 0 を代入して、[Back]キーを自分で処理する

28