【A5】Delphiテクニカルセッション

クロスプラットフォーム開発で役立つ
Delphi 新機能活用ポイント
第34回 エンバカデロ・デベロッパーキャンプ

株式会社シリアルゲームズ
App Div 3 マネージャー
取締役 細川 淳

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

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

アジェンダ IDE の新機能
 コマンドラインツール
 Delphi / Object Pascal の新機能※機能が多すぎたためすべては紹介できません！
特に RTL / VCL / FMX については全てを省略しました。

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

3

IDE の新機能

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

フォームのスナップショット: XE～ / VCL + FMX△ IDE のフォームデザイナにフォーカスがあるときに Ctrl + C
 VCL• スナップショット画像• コンポーネントストリーム形式のテキスト

 FMX• コンポーネントストリーム形式のテキスト

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

5フォームのスナップショット: XE～ / VCL + FMX△
普通に Alt + PrintScreen して
Photoshop でトリミングしたもの

トリミングが面倒！

Ctrl + C でスナップショットを取ったもの

楽！
ただし、VCL フォームのみ※赤い四角の囲み文字は IDE の機能拡張（CnPack の機能）
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

6

フォームのスナップショット: XE～ / VCL + FMX△
 テキスト形式• 選択されているコンポーネントのコンポーネントストリーム形式のテキス
トが取得できる• Form が選択されていればフォーム全体の、コントロールが選択されていればコントロールだけのコンポーネントストリーム形式テキストを取得

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

7フォームのスナップショット: XE～ / VCL + FMX△VCL フォーム

object Form1: TForm1
Left = 0
Top = 0Caption = 'Form1'
ClientHeight = 281
ClientWidth = 387
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 8
Top = 130
Width = 185
Height = 33
Caption = 'Button1'
TabOrder = 0end
object Memo1: TMemo
Left = 8
Top = 8Width = 185
Height = 89
Lines.Strings = ('Memo1')
TabOrder = 1
end
object Edit1: TEdit
Left = 8
Top = 103
Width = 185
Height = 21
TabOrder = 2
Text = 'Edit1'endendVCL コントロールを選択
object Button1: TButton
Left = 8
Top = 130
Width = 185
Height = 33
Caption = 'Button1'
TabOrder = 0end

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

FMX フォーム

object Form1: TForm1
Left = 0
Top = 0Caption = 'Form1'
ClientHeight = 351
ClientWidth = 473
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
object Memo1: TMemo
Touch.InteractiveGestures = [Pan, LongTap,DoubleTap]
DataDetectorTypes = []Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 225.000000000000000000
Size.Height = 201.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
Viewport.Width = 221.000000000000000000
Viewport.Height = 197.000000000000000000
end
object Edit1: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 2
Position.X = 8.000000000000000000
Position.Y = 216.000000000000000000
Size.Width = 225.000000000000000000
Size.Height = 22.000000000000000000
Size.PlatformDefault = False
end
object Button1: TButton
Position.X = 8.000000000000000000
Position.Y = 248.000000000000000000
Size.Width = 225.000000000000000000
Size.Height = 41.000000000000000000
Size.PlatformDefault = False
TabOrder = 3
Text = 'Button1'
end
end
8

フォームスクリーン位置プレビュー: XE～ / VCL + FMX
 右下に画面内での位置が表示されます• つかんで移動すると Left, Top が変わります

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

9非ビジュアル コンポーネントを非表示にする: 10 Seattle～
 非ビジュアルコンポーネントが邪魔になるときは、この機能で非表示にできます。
消えました

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

10

変更済みファイルの再読み込みを要求: XE～
 外部（Gitなど）で変更されたファイルの再読込を制御
通常は変更されるとダイアログが表示されます

このチェックを外すとダイアログは表示されなくなり、自動的に再読込されます

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

11

デザインデバイス: XE5～ / FMX
 設計時に各 OS の見た目でコントロールが表現されます
Windows

AndroidmacOS

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

iOS

12

FireUI: XE7～ / FMX
 フォームを継承する仕組み• コントロールはすべてマスタに置く必要があります• コントロールのプロパティは継承先で自由に変更できます• 例えば Visible を False にすればコントロールが表示されなくなります• また、Form.StyleBook に別のスタイルを設定すれば、OS や対象機種によって別の見た目を表現できます。

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

13

FireUI: XE7～ / FMX

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

14

FireUI: XE7～ / FMX
 ソースには $R コンパイラ指令でリソースを読み込むように記述が追加されます。
var
Form1: TForm1;
implementation{$R *.fmx}{$R *.LgXhdpiTb.fmx ANDROID}{$R *.iPhone4in.fmx IOS}{$R *.LgXhdpiPh.fmx ANDROID}{$R *.iPhone55in.fmx IOS}
end.

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

15

マルチデバイスプレビュー: XE8～ / FMX FireUI で追加されたデバイスでの見た目を一気にプレビューできます

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

16

デバイスマネージャ: XE8～ / FMX FireUI に表示するデバイスを追加・編集・削除できる機能です

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

17

FireUI Live Preview: 10.1 Berlin～ / FMX
 フォームデザイナの画面を直接実機に表示する機能です。

• 実機で見るとフォントの違いからデザイン画面と見え方が異なることがあり、大変便利です。
• 実際に使用する場合は、AppStore / Play Store で配布されている “FireUIApp Preview” アプリのインストールが必要です。
• 拙作 Qiita の記事
Delphi 10.1 Berlin で実装された FireUI App Preview
http://qiita.com/pik/items/e8f75f5df7238e5c0c73

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

18

FireUI Live Preview: 10.1 Berlin～ / FMX

フォントの違いでフォームデザイナと表示が異なっています。

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

19

構造強調表示(Castalia): XE8～
 コードエディタで構造を表示
してくれる機能です

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

20

メソッドの有害度値: 10.1 Berlin～ メソッドの有害度を表示します。

• 例えば、長すぎるメソッドだったり、引数が多い、また、どれだけ複雑な実行経路があるかを示したりできます。
• 保守のためにメソッドを分割するなどのリファクタリングに役に立ちます。

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

21

ブックマークスタック: 10.1 Berlin～ スタックのようなブックマークの機能です• しおりとは別物です。
• デバッグに役立ちそうです

ブックマークの設定
CTRL + K + Ctrl + G

CTRL + K + Ctrl + G

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

22

ブックマークスタック: 10.1 Berlin～
ブックマークを逆順にたどりながらブックマークを削除する
CTRL + Q + Ctrl + G

CTRL + Q + Ctrl + G

ブックマークのところに自動的にカーソルが移動します。
（移動後、そのブックマークは消えます）

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

23

[使用箇所の検索］ダイアログ ボックス: XE～ / VCL + FMX
 コードエディタで右クリック
 クラスエクスプローラのメンバを右クリック

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

24

スレッド名の設定: XE (2010？) ～ 実行中のスレッドに名前を設定できます。

• コレによってスレッドの識別がしやすくなりデバッグに役立ちます。

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

25

ビットマップスタイルデザイナ: XE3～ / VCL, XE5 ～ / FMX
 ビットマップ形式のスタイルを作成するエディタです• 最初は VCL Style のみをサポートしていました

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

26

スタイルデザイナ: XE4～ / FMX TStyleBook のエディタです

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

一時期無くなっていた
適用ボタンが復活しました27

配置マネージャ: XE5～
 アプリケーションの動作に必要なファイルをアプリのパッケージに含めて、初回起動時に指定の場所に配置してくれる機能です。

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

28

構造ビュー: XE4～

 フォームやコードの構造を表示するビューです• フォームデザイナか、コードエディタか、で内容が変わります。
• フォームデザイナでは、親子関係や順序をドラッグ＆ドロップで変更できます。
フォームデザイナ時

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

29

構造ビュー: XE4～
 フォームやコードの構造を表示するビューです

Drag & Drop で親子関係を変更

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

30

構造ビュー: XE4～
 フォームやコードの構造を表示するビューです• コードエディタではクラスエクスプローラのような表示になります。
コードエディタ時

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

31

GetIT: 10 Seattle
 パッケージマネージャです

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

32

プロジェクトマネージャの新機能: XE以降まとめて ターゲットプラットフォーム• マルチプラットフォームになったことでビルドするターゲットOSを指定できるようになりました

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

33

プロジェクトマネージャの新機能: XE以降まとめて
 アプリの動作に必要なファイルの配置• 配置マネージャではなくプロジェクトマネージャに追加して配置することも可能です。

ドロップすると自動的に配置マネージャに追加されます
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

34

プロジェクトマネージャの新機能: XE以降まとめて
 ビルド構成• Release / Debug はもちろんカスタムのビルド構成も作れます。

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

35

プロジェクトマネージャの新機能: XE以降まとめて
 Android 向け組み込み RAD Studio Java ライブラリの無効化• 作成しているアプリに必要の無いライブラリを無効化して容量を削減できるようになりました

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

36

その他の機能 選択範囲の拡張: 10.1 Berlin～• 構造的なブロック単位で拡張できます エディタのフォントサイズ変更: 10.0 Seattle～• Ctrl + Num + / Ctrl + Num – で変更できます Version Insight: XE～• Git / Subversion / Mercurial と連携できます。

 Visual LiveBindings: XE3～

• LiveBindings をビジュアルに編集できます。

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

37

その他の機能 設定移行ツール: XE8～

• Delphi のバージョンを上げる際に、旧バージョンからレジストリの内容などを持ってきて、新バージョンのレジストリに書き込み移行を手助けします。

 ListView 項目デザイナ: 10.1 Berlin～ / FMX• 設計モードを使って設計時にビジュアルな外観をカスタマイズできるようになりました

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

38

コマンドラインツール

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

PASever: XE2～
 言わずと知れた Platform Assistant Server です。

• Win32 以外の OS でデバッグ実行する時などに使います。
• 主に macOS / iOS のデバッグで macOS にインストールされ使われます• 起動後 v + Enter を入力すると詳細表示モードになり、PAServer が受け取り実行した内容が表示されるようになります。
• これによって iOS の署名失敗時などの理由が解るようになりました。
MyMac:~ myname$ /Applications/PAServer-16.0.app/Contents/MacOS/paserver ; exit;
Platform Assistant Server Version 7.0.1.40
Copyright (c) 2009-2015 Embarcadero Technologies, Inc.
Connection Profile password <press Enter for no password>:
Acquiring permission to support debugging...succeededStarting Platform Assistant Server on port 64211
Type ? for available commands>

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

40

PAServer Manager: XE7～
 複数のバージョンの PAServer を切り替えるアプリケーションです• macOS で動作します。

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

41

Java2OP: XE5～
 Android API や class / jar
ファイルからブリッジファイルを生成します

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

42

SDKTransform: 10.1 Berlin～ iOS / macOS の framework にアクセスするためのブリッジファイルを生成するツール群です 詳しい説明がどこにもない孤高のツールです。
• 詳しくは拙作の Qiita で…

SDKTransform について
http://qiita.com/pik/items/52fbbbfa0f391ad95c92
この記事中で SDKTransform を GUI で操作するツールを作成しています。

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

43Object Pascal

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

Unit Scope: XE2～
 Unit 名の前に接頭辞 “Unit Scope” を指定できるようになりました。
• 例えば System.SysUtils や Vcl.Controls, FMX.Objects などです
• Unit Scope によって簡単なグループ分けができます。

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

45

動的配列に対する操作: XE7～
 動的配列に対して文字列のような操作ができるようなりました
var
A: array of integer;
Begin
A:=[1,2,3];
A:= A + [4,5]; // + 演算子で追加// System.Insert, Delete, Concat が利用可能Insert(5,A,2);
Delete(A,1,2);
A := Concat([1,2,3],[4,5,6]);
end;

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

46

unsafe, volatile, weak: 10.1 Berlin すべてのコンパイラで属性 unsafe / volatile / weak が使えるようになりました• Berlin 以前ではこれらの属性はモバイルコンパイラ向けでデスクトップコンパイラでは無視されていました

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

47

Class Helper の Scope: 10.1 Berlin～
 Class Helper のアクセス範囲が変更されました• class helper を使った private へのアクセスができなくなりました。

type
TMyClass = classprivateFPrivateInt : Integer;
end;
TMyHelper = class helper for TMyClass
procedure Foo;
end;procedure TMyHelper.Foo;
begin
Writeln(FPrivateInt); // Seattle までは OK, Berlin 以降はコンパイルエラー
end;

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

48

付録
 Object Pascal の Delphi 7 以降の新機能抜粋

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

Delphi 7 以降の Object Pascal の機能
 演算子 overload
 Class Helper / Record Helper strict private / strict protected 高度な record 型
 abstract / sealed 修飾子

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

50

Delphi 7 以降の Object Pascal の機能
 クラス定数 クラス内のユーザー定義型
 ネストしたクラス
 クラスフィールド クラスプロパティ
 final / sealed メソッド
 静的クラスメソッド(static)
 for-in ループ

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

51

THANKS!
www.embarcadero.com/jp
第34回 エンバカデロ・デベロッパーキャンプ

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