What's New

提供: RAD Studio
移動先: 案内検索

メインページ への移動

以前のリリースでの新機能 への移動

RAD Studio 12.0 Athens リリースでは、以下のような新機能の追加や既存機能の改良が行われています。

目次

インストーラの機能拡張

新しい機能マネージャ

RAD Studio 12.0 Athens では、インストールの選択肢をシンプルにすることで、UI、プラットフォームや他の項目のインストール時の動作を改善しています。 機能マネージャのダイアログ(旧:プラットフォーム マネージャ)を使い、インストール内容を選択します。

インストールする機能やオプションはすべて 1 つの画面にまとめられ、その画面の中央部分には、言語(Delphi または C++)、ターゲット プラットフォーム(Windows、iOS など)のオプションが表示されます。 追加項目は、右のサイドバーにリストとして表示されます。

最後に、インストーラの下部バーには補足情報が表示されており、使用後になると想定されるディスク容量と現在の量の差分が n GB 形式で、また、エラーを表示する場所では、新たに エラー ボタンが使用可能になります。 このボタンを使用すると、ログをプレビューし、エクスプローラでインストール ログ ファイルの場所が開かれます。

Feature Manager.jpg

ライブラリへの更新

次は、メイン インストーラに含まれるライブラリへの更新です。

  • 統合されている DUnitX のバージョンを、最新のライブラリ バージョンへ更新。
  • RAD Studio に同梱されている Indy のバージョンを、オフィシャル Indy GitHub リポジトリにある最新バージョンに更新。

GetIt の品質の向上

RAD Studio 12.0 Athens は、ハード ドライブ上の単一のフォルダから、複数の GetIt パッケージを同時に読み込むことができます。 GetIt パッケージ マネージャ ダイアログ ボックスを開き、新しい[複数のパッケージを読み込む] ボタンを使用してファイル ダイアログを開き、GetIt パッケージ設定で複数の JSON ファイルを選択します。

その他の品質改善:

  • GetItCmd コマンドライン ツールが GetItInstall.log にログ出力します。
  • GetIt パッケージ依存関係を含むプロジェクトをコンパイルする際の、エラー メッセージや回避策が改善されました。
  • インストールが「オフライン」で行われる場合(ISO イメージを使用して)、ウェルカム ページから GetIt パッケージをインストールします。

新しい IDE の拡張

次のセクションでは、IDE のさまざまな部分に対して行われた、改善や拡張について説明します。

廃止予定の機能の移動

RAD Studio 12.0 Athens では、一部の古くサポート外となったツールを、製品の中心機能のインストールからはずし、アドオンとして追加できるようにしました:

  • VCL トランスレーションのサポート
  • モデリング。 Delphi のコード整形を使用したい場合には、これをインストールする必要がある点に注意してください。これはインストーラの[技術]セクションから入手可能です。

検索

[ファイル内の検索] ダイアログには、[サブディレクトリ除外マスク]オプションがつき、[指定ディレクトリ内][サブディレクトリを含める]などの機能を使用する際、特定のフォルダを検索対象からはずすことができるようになりました。 Delphi と C++ の両方にデフォルトの除外項目があり、新しいコンテンツに合わせてダイアログが拡大されています。

Searching screen.png

GDI リソース使用状況

GDI ビットマップ数が IDE を全体で減少するようになりました。 1 分以上使用されなかった場合、画像を休止状態(Dormant)にできるようになりました。 ツールバーやメニュー、パレットのコンポーネント イメージなどを含むすべての IDE イメージ リストは、使用されていないときはイメージを休止状態にします。

メモ: 遅延後にイメージを休止状態にするシステムは、遅延後に VCL の Dormant()メソッドを呼び出すため、VCL ではなく IDE に組み込まれています。

CodeInsight と DelphiLSP

RAD Studio 12.0 Athens には、コード補完の自動起動機能の新しいバージョンが含まれています。 10.4 より前の Delphi では、RAD Studio に短い入力遅延の後に自動で呼び出される LSP とコード補完がありました。 つまり、記号を数文字入力して待つと、補完ウィンドウが表示されていました。

RAD Studio バージョン 12.0 では、自動起動機能が再び実装されています。つまり、次の場合にコード補完が表示されます:

  • 11.3 のときと同様、〔Ctrl+Space〕を押下、または “.”(ドットのみ)を入力したとき
  • 何かしら入力し、少し待ったとき
  • 識別子の中で入力したとき(以前は先頭でのみ呼び出されていた)

[自動起動]機能はデフォルトでは有効になっていません。有効にするには、[オプション...|エディタ|言語|Delphi|支援機能と遷移し、[自動起動]のチェックボックスにチェックがついていることを確認してください。そして、時間遅延オプションをドロップダウン メニューから選択します。チェックボックスにチェックがついていなかったとしても、デフォルトでは、「.」を押すと表示されます。

補完ウィンドウが現れる速さを設定したり、“.”(ドットのみ) や〔Ctrl+Space〕の入力時にのみ表示される以前の動作を使用するようにすることもできます。

(, [,< の押下時にも、自動的にコード補完が実行されるようにすることができます。 つまり、メソッド呼び出し、ジェネリック、または配列アクセサを入力すると、補完が自動的に表示されます。 DelphiLSP はまた、汎用の <> 宣言内で有効な型の表示を試行します。

コード補完には、配列のかっこ [ ] が配列型に追加され、、中にキャレットが配置されるようになりました。 コード補完ウィンドウには、補完に影響を与えるキーを表示できます(Enter, Space, Esc など)

Code Completion invoke.png

最後に、バージョン 12.0 では、[検索]メイン メニューに、[実装に移動]または[宣言に移動]するためのメニュー項目が追加されました。エディターでの Ctrl+Shift+Up/Down に対応します(注: どちらの矢印でも構いません。両ショートカットとも同じように機能し、単純に場所が切り替わります) これにより、目に見えないショートカットよりもキーの操作がより明確になります。

コード キーワード

RAD Studio 12.0 Athens には、補完リストに言語キーワードが含まれています。 キーワードは識別子よりも先に自動選択されます。 これは、入力した内容がコード補完によって自動的に呼び出される場合でも、それが有効である限り正しく完了することを意味します。

DelphiLSP CodeKeywords.png

Delphi LSP の品質

  • 必要に応じて LSP サーバーを再起動するためのメニュー項目を[ツール]メニューに追加しました。
  • コード補完のための色定数表現が改善されました。 色定数を完成させると、色が四角形で大きく表示されます。16 進値と RGB 値が表示されます。また、システム カラーが正しく表示されます(IDE テーマではなく、システム テーマに従います)。 これには、TColor と TAlphaColor の両方が含まれます。

Visual Assist for C++

メモ: エディタ キャレットを、機能を呼び出したいシンボルの中に配置します。 たとえば、宣言の作成では、メソッド本体だけでなく、実装を作成するメソッド名の中にもキャレットを配置する必要があります。 これには、Delphi のクラス補完や関連機能に慣れている開発者がつまづくかもしれません。場所について比較的神経質ではなく、カーソルから多くのことを推測することに慣れているためです。

RAD Studio 12.0 Athens では、これまで Visual Studio でしか利用できなかった、世界をリードする C++ 生産性ツールである Visual Assist のインテグレーションが導入されています。 Visual Assist は大規模な製品であり、このリリースには、コード補完の分野で生産性を高めるための、主要で便利な機能に加え、検索、ナビゲーション、およびリファクタリングのサブセットが含まれています。

RAD Studio において、Visual Assist が C++Builder および C++ にもたらす機能は次のとおりです:

  • 支援機能(デフォルトでオン。必要に応じて以前の LSP cquery 実装をオンにすることも可能):
    • コード補完、パラメータ補完、ツールチップ インサイト
  • リファクタリング:
    • 名前の変更: プロジェクト グループ全体におよぶシンボル(メソッド、クラスなど)の名前変更。
    • インクルードの追加: 「vector」や「TButton」などのシンボルを右クリックすると、VA は、ユニットの一番上にある include 文に正しいヘッダー ファイルを追加できます。
    • 宣言の作成と実装の作成: メソッドの作成を支援します。 形宣言にメソッドを入力して VA に自動的に空の実装を作成させるか、実装を入力して VA に宣言を型に追加させます。
  • ナビゲーション:
    • シンボルの検索: プロジェクトやプロジェクト グループとヘッダーの両方で任意のシンボル(VA が解析により認識している任意のシンボル)を検索します。

Find Symbol.png

    • 参照の検索: シンボル(メソッド、クラスなど)が使用されている場所を、プロジェクト グループ全体にわたって検索します。また、現在のユニット内で参照を検索するミニ バージョンもあります。
    • 実装へ移動 と インターフェイスへ移動: メソッドの宣言と実装の間で切り替えるのに便利で、Delphi の機能と同等です(これを C++ に実装することは、最も要望の多かったコード エディタ機能の 1 つでした)。
    • 関連へ移動: シンボル(メソッド、型、インクルードなど)に関連する便利なものすべてに移動できる、非常に便利な優れた機能です。これには、型のコンストラクタ、上位/下位の型、仮想メソッドの上位/下位のオーバーライドなどがあります。

GoTo related.png

Visual Assist の機能は、非常おに強力な生産性ツールのセットであり、この最初の統合を非常にうれしく思っています。

C++ 用の新しい WinAPI アプリ ウィザード

RAD Studio 12.0 Athens では、C++ Builder 用の新しい WinAPI アプリケーション ウィザードが導入されています。

WinAPI App.png

これを作成するには、シンプルに、[ファイル|新規作成|WinAPI] と開くか、ドキュメント ページ にアクセスして、ウィザードの指示に従ってください。

一般的な IDE の強化

新しいデザイナ

RAD Studio 12.0 Athens は、KSVC ライブラリのデザイナの一部を、コア製品に移行しました。 これらには、次のようなデザイナが含まれます:

IDE 全体での構文の強調表示

RAD Studio 12.0 Athens では、IDE カラー パレットを使用した構文の強調表示が追加されています:

  • デバッガ ツールチップにも強調表示が追加されました。
  • 構造ペインのエラー インサイトのメッセージにも構文の強調表示が追加されました。
  • 構造体ビューでは、メソッドと型が強調表示されます。

Structure highlight.png

  • ナビゲーション ツールバーでは、メソッドと型が強調表示されます。
  • 呼び出しスタックでは、メソッド、アドレス、またはモジュールが構文の強調表示されます。

Call stack.png

ナビゲーション ツールバー

エディタの一番上にあるナビゲーション ツールバーでは、機能をより直感的に使用でき、またその結果をより明確に理解できることを目的として、いくつかの機能強化が行われています。 以下に一部の強化機能を示します:

  • テキストがまだ入力されていない場合でも、ドロップダウンにはその機能に関する視覚的な手がかりが表示されるようになりました:

Visual clues.png

  • 型またはメソッドを検索すると、まずはすべての結果が表示されます(以前は、結果ウィンドウが空白で開き、検索語を入力した場合のみ結果が表示されていました)。
  • 検索結果は構文が強調表示され、現在の検索一致が示されます。

Syntax highlight.png

ナビゲーション ツールバーも、IDE テーマではなくエディタのテーマ色に従います:

Editor theme colors.png

一般的な IDE の改善点

  • [オプション...|IDE|保存とリカバリからのページには、エディタの状態を保存するための新しいチェックボックスがあります。
  • エディタ タブに [ファイル パスのコピー >] メニュー項目が追加され、そのサブ項目に、[完全パス]、[ファイル名のみ]、[フォルダのみ]が追加されました。
  • エディタでは、行の高さをフォントサイズの倍数で(例:1.1)、設定できるようになりました。
  • [エディタ]オプションは、ユーザー インターフェイスの下にありましたが、IDE オプション ダイアログの一番上の項目となりました。
  • Delphi リファクタリングの [検索] 項目は、次のサブメニューに移動されました: [検索(メイン メニュー)|検索|シンボルの検索]。 これにより、メニューを開くパフォーマンスが向上しています。
  • ガターのアイコン(ブレークポイントなど)が、フォント サイズをベースに、エディタのスケールに合わせて拡大縮小されるようになりました。 ToolsAPI INTACodeEditorState290 に、新たに CharWidth、CharHeight プロパティと、Refresh メソッドができました。
  • 呼び出しスタックとデバッグ イベント ログは、ユーザーが、そのコンテキスト メニューから、クリップボードにコピーしたり、すべて選択したりできるようになりました。
  • 「Mimic Windows」がオンで、IDE が Windows 11 で動作している場合、淡色モードと濃色モード共に、VCL デザイナで使用できる新しいスタイルがあります。

IDE の品質向上

次のような領域で、多くの品質向上が行われています:

  • エディタのインライン検索
  • 高 DPI フォーム デザイン。フォームのサイズ変更や非ビジュアル コンポーネントの配置、またさらに複数のウィンドウ間でのフォーム デザイナのドラッグなど。

デバッガの改善

以前のバージョンでは、可能性のある問題が表示されるまでのタイムアウトが延長されていました。 RAD Studio バージョン 12.0 では、これらのタイムアウトは大幅に短縮され、初期タイムアウトは 6 秒となっています。 [待機]ボタンをクリックするごとに待機時間が 3 秒ずつ延長され(つまり、9秒、12秒)、最大 15 秒となります。

デバッグ カーネルが応答しない場合には、ダイアログ画面が表示され、ユーザーはプロセスを[待機][停止]させることができます。 この改善は、Win64、macOS、Linux、iOS、Android に適用されます。

その他のデバッガの改善

  • デバッグは、iOS 17 の iOS シミュレータでは機能しますが、iOS 17 を使用したデバイス上でのデバッグはサポートされていません。 これは、Apple 以外の複数のベンダーに影響を与える iOS の変更によるものです。
  • アプリケーション実行で、Xcode 15 がサポートされました。
  • macOS LLDB が更新されました。
  • Linux LLDB も合わせて更新されています。
  • PAServer メッセージ(ヒントを含む)が、IDE メッセージ ペインに表示されるようになりました。
  • OS スレッド ハンドルが[スレッド]ビューに表示されるようになりました。
  • Intel Mac での FPU レジスタの表示が改善されました。
  • 匿名メソッドを使用して Delphi コードをデバッグすると、キャプチャされた変数が表示されます。
  • エディタのデバッガ ツールチップが、フォント サイズに従って拡大縮小され、構文が強調表示されるようになりました。
  • FPU および XMM レジスタが、LLDB、macOS、および Linux で、Windows 64 ビットで正しく表示されるようになりました。
  • ST および XMM レジスタは、両 Win64 C++ プラットフォームで正しく読み込まれます。
  • Linux および macOS での FPU および ST.XMM レジスタの変更。

Skia インテグレーション

RAD Studio 12.0 では、FireMonkey がサポートするすべてのプラットフォームに対して、Skia サポートが追加されています。 Skia ライブラリは、RAD Studio Athens がサポートするすべてのプラットフォームを、C++Builder と Delphi の両方で完全サポートしており、これには、最近追加された iOS シミュレータ ARM および macOS ARM 64 ビットも含まれています。

RAD Studio は、Skia4Delphi オープンソース プロジェクトを利用して Skia とやりとりしていますが、Vulkan ドライバなど、オープンソース プロジェクトにはない追加機能が含まれています。

Skia とは

Skia4Delphi は、 Google の Skia グラフィック ライブラリに基づく、Delphi および C++Builder 用のクロスプラットフォーム 2D グラフィック API です。 モバイル、サーバー、デスクトップ モデル全体で、画像をレンダリングするための包括的な 2D API を提供します。 すべての RAD Studio フレームワーク(コンソール、FMX、VCL)およびプラットフォームと互換性があります。

OpenGL、Vulkan、DirectX、Metal など、背後で使用される低レベル ライブラリの実装における複雑さを抽象化し、最適化と新機能を実装することにより、汎用的な 2D API を提供しています。 すべての主要機能の説明、および Skia インテグレーションを有効にする方法については、Skia のドキュメントを参照してください。

Skia ベースの UI コントロール

Skia ライブラリ インテグレーションにより、新たに固有のネイティブ コントロールやコンポーネントも提供されています。 これらのコントロールは、Skia が有効であり、ターゲット プラットフォームに展開されている場合にのみ使用できます。

  • TSkAnimatedImage: アニメーション イメージ(ベクタ アニメーションを含む)の読み込みとレンダリングを行うコントロール。
  • TSkLabel: TLabel でサポートされていないか、実装が困難であった次のような新機能を実装します:
    • フォント ファミリ(CSS でのようなフォント フォールバック リスト)
    • フォントの太さと傾き
    • テキスト内の複数のスタイルのサポート
    • BiDi(右から左)のサポート
    • 水平方向の位置揃えのサポート
    • テキストの一部の背景色のサポート
    • 自動サイズ オプション
    • 高度な装飾(波線の下線、上線、破線など)

TSKLabel.png

  • TSkPaintBox: OnDraw イベントを使用して、Skia API を使用して画面上に直接ペイントするためのコントロール。
  • TSaAnimatedPaintBox: アニメーションの継続時間を設定し、OnAnimationDraw イベントを通じて Skia API を使用してこのアニメーションの進行状況を描画できるようにします。
  • TSkSVG: SVGを表示するためのコントロール。

FireMonkey Skia レンダリング

Skia のサポートにより、FMX のデフォルトのキャンバスを Skia ベースのキャンバスに置き換えることができます。 Skia が一度有効になると、すべての FMX コントロールは Skia ベースの実装を使用して自動的にペイントされます。 FMX(主にモバイル)およびライブラリ全体の描画のパフォーマンスと品質を向上させます。

Skia を使用してアプリのレンダリングを有効にするには、Skia のドキュメント ページを参照してください。

Vulkan バックエンド

注意: これは、オープンソース プロジェクトにはない独自の機能です。

RAD Studio での Skia は、Android に対する Vulkan バックエンド サポートを、また任意で Windows に対しても提供します。 RAD Studio を使用した Skia Canvas は Android 上の Vulkan を自動的に利用するため(サポートされている場合)、OpenGLES と比較してグラフィック パフォーマンスとエネルギー効率が向上します。 サポートされている場合に Windows で Vulkan を有効にするには、初期化セクションで ブール値の FMX.Types.GlobalUseVulkan を True に、FMX.Skia.GlobalUseSkiaRasterWhenAvailable を False に設定します。

uses
  System.StartUpCopy,
  FMX.Forms,
  FMX.Types,
  FMX.Skia,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  GlobalUseSkia := True;
  GlobalUseSkiaRasterWhenAvailable := False;
  GlobalUseVulkan := True;
  Application.Initialize;
  ...
メモ: Android での Vulkan バックエンドの設定は、Windows で有効にするのと同じブール値 GlobalUseVulkan を使用してでき、無効にするには False に設定します。

Skia シェーディング言語(SKSL)

注意: これは、オープンソース プロジェクトにはない独自の機能です。

ラスタライズではなく GPU アクセラレーションを使用して Skia アプリのレンダリングを使用する場合、FireMonkey はエフェクトとフィルタをレンダリングするために、強力な SKSL を利用します。 この方法は、現在の方法と比較して優れたパフォーマンスを提供し、Skia Canvas の効率を高めます。

エフェクトやフィルタの作成に SKSL を使用する主な利点の 1 つは、メンテナンスが簡素化されることです。 単一のシェーダー コードベースがすべてのプラットフォームで一貫して動作するため、各バックエンドの API に固有のコードの複数記述する必要がなくなり、統一された動作が保証されます。

アニメーション コーデック: WebP エンコーダー

RAD Studio と統合された Skia バージョンは、アニメーション WebP のエンコードをサポートしています。 FireMonkey の新しいアニメーション コーデック基盤を使用すると、エンコードおよび/またはデコードが可能な新しいエンコーダーを登録できます。

WebP は、JPEG に比べて圧縮率が優れているため、Web 上で最も広く使用されている形式の 1 つであり、高品質を維持しながらファイル サイズが小さくなります。 また、GIF に似たアニメーション機能も提供しますが、ロスレス フレームを使用しているため、つまり、品質の損失や圧縮がなくなります。 さらに、透明性もサポートしているため、汎用性の高い形式になります。 例と詳細については、Skia のアニメーション コーデックのドキュメントを参照してください。

プリンタのサポートと PDF への印刷

Skia が有効になっている場合、FireMonkey の Windows 用ネイティブ プリンタは物理プリンタのバックエンドとして Skia を使用し、PDF ドキュメントの印刷を通じて他のすべてのプラットフォームを確実にサポートします。ターゲットが Windows の場合はオプションの XPS 印刷も利用できます。 iOS および Android では、プリンタは印刷可能なファイルを生成し、完了すると自動的に共有されます。 例と詳細については、Skia FireMonkey プリンタ のドキュメントを参照してください。

Skia C++ Builder のサポート

RAD Studio Athens は、ユーザーの実装を支援するために C++ で作成されたプロジェクトのメイン デモを含む、C++ Builder 用の Skia4Delphi サポートを提供しています。 RAD Studio のインストール中にデモにアクセスするには、サンプルをインストールするか、[Embarcadero 社の GitHub] リポジトリにアクセスしてダウンロードしてください。

Skia デモ

次の Skia デモがインストールに含まれています。

Delphi コンパイラ

次のセクションでは、Delphi コンパイラの改善と更新について紹介します。

長い複数行の文字列リテラル

RAD Studio 12.0 Athens では、Delphi コンパイラが文字列リテラルを処理する方法に、一連の大幅な変更が導入されています。文字列リテラルは、Delphi の初期バージョン以来、古典的な Pascal 文字列(短い文字列)の設計のままでした。

文字列リテラルは現在、255 文字を超えることができるようになりました。つまり、文字列リテラルは従来の Pascal ShortString 型に限定されません。 リテラル文字列の長さは、エディタの制限(1 行あたり 4K 文字)によって依然として制限される可能性があることに注意してください。 構文に変更はありません。リテラル文字列を引用符なしで、255 文字以上シンプルに指定することができます。

Long multine string.png

この言語では、複数行の文字列のサポートが追加されています。 複数行の文字列は三重引用符 (’’’) と新しい行で指定でき、ソース コードの複数行を生成することができ、行内にその前にテキストがない最後の三重引用符で終わります。 最初の行の三重引用符を超えてテキストを追加することは無効であることに注意してください。 重要な点は、これまでとは異なり、+ 記号で複数の行を 1 つの行に連結する必要がないことです。

Multiline string.png

長い文字列リテラルと複数行の文字列リテラル、およびインデント規則の詳細については、文字列型 のドキュメント ページを参照してください。

弱いエイリアスとしての NativeInt

RAD Studio 12.0 Athens では、主に一部の整数型のオーバーロードの動作と 32 ビット コードと 64 ビット コードの互換性に影響を与えるコンパイラの大幅な変更が行われています。 Delphi コンパイラには、NativeInt(または NativeUInt)と呼ばれる「浮動」型があり、これはプラットフォームのビット数に一致します。

RAD Studio 12.0 以降、NativeInt は「弱いエイリアス」となり、ユーザーはそれを使用できなくなるか、別の型を使用することとなります。 この使用方法については、NativeInt ページの例を参照してください。

IEEE の要件による NaN 比較のサポート

IEEE では、NaN を含むすべての比較演算が false を返すことを必須としています。 ルールでは次のように定められています: 「IEEE 754 では、NaN を伴うすべての関係式に値を割り当てます。C の構文では、x または y、もしくはその両方が NaN の場合、述語 x != yTrue だが、他すべて(x < y, x <= y,x == y , x >= yx > y)は False とする。」

Delphi Win32 コンパイラはこのルールに従って動作するようになりました。 詳細については、内部データ形式 のドキュメント ページを参照してください。

ジェネリック型クラスの警告の改善

状況によって、ジェネリック クラスのコードに、非ジェネリック コードと同じ警告が表示されませんでした。 現在では、コンパイラは、ジェネリック型のメソッドまたはジェネリック メソッドを分析して、通常のメソッドと同様にヒントと警告を生成し、次のメッセージを表示します:

W1035 Return value of function '%s' might be undefined
W1036 Variable '%s' might not have been initialized
H2077 Value assigned to '%s' never used
H2164 Variable '%s' is declared but never used in '%s'

The following are specific warning message examples from our test code).

以下は、テスト コードからの警告メッセージの例です:

Warning: W1035 Return value of function 'TEStatic.Func<T1,TResult>.[0]' might be undefined
Warning: W1035 Return value of function 'TEStatic.Func<T1,T2,TResult>.[0]' might be undefined
Hint: H2077 Value assigned to 'G<T>.foo' never used

新しい LLVM シンボル

RAD Studio Athen 12.0 では、すべての LLVM ベースの Delphi コンパイラに LLVM事前定義シンボル が追加されました。 コンパイラのバックエンドに応じてコードを作成しやすくなりました。 最近のバージョンで EXTERNALLINKER シンボルを使用すると、同様のチェックを実行できますが、明確性と判読性はあまりよくありません。

Delphi による GraphViz ファイルへの利用グラフのエクスポート

Delphi コンパイラには、ユーザーがプロジェクトの構造を理解し、不必要な循環ユニット参照を避けるのに役立つ新しい機能があります。ただしこれにより、コンパイルが遅くなり、他の言語機能と組み合わせるとコンパイラ自体にマイナスの副作用が生じる可能性があります。 uses ステートメント グラフを(別個の解析ツールを使用せずに)コンパイラ レベルで直接生成できる機能は、一般にアプリケーションの構造を理解するために他の多くのシナリオで役立ちます。

コンパイラには新しい --graphviz オプションがあり、これは.gv GraphViz ファイルにユニットの依存関係グラフを生成します。このファイルは、さまざまなツールや online、あとから処理をすることができます。

また、ユーザーはグラフからユニットを(個人または家族ごとに)除外することができます:

  • --graphviz: <exename>.gv ファイルを出力
  • --graphviz-exclude:<UnitList>: 特定のユニット名を出力から除外

For the --graphviz-exclude:<UnitList> のパターンには '*' ワイルドカードを含めることができ、<UnitList>';' 区切りで複数のユニット名からなるパターンを指定することができます。.

たとえば、 --graphviz-exclude:System.*;VCL.*;FMX.* は、SystemVCLFireMonkey のすべてのユニットを除外します。

メモ: 必須ユニットである System、SysInit、System.Variants は常に除外されます。

たとえば、メイン フォーム、セカンダリ ダイアログ ボックス、およびデータ モジュールを備えた単純なアプリケーションを考えてみましょう。 これらは、interface セクションや implementation セクションの uses ステートメントを介して、相互に参照します。 次のコマンドラインでビルドします(システム ユニットを除く)。

 dcc32 --graphviz --graphviz-exclude=System.*;Vcl.*;WinApi.* GraphTest.dpr

次の .gv ファイルが生成されます。このファイルでは、implementation セクションの uses ステートメントに style=dashed が使用されています:

 digraph GraphTest {
	GraphTest -> { GT_mainform GT_dialog GT_datamodule }
	GT_mainform -> { GT_datamodule GT_dialog }
	GT_datamodule
	GT_dialog -> { GT_datamodule GT_mainform } [arrowhead=open,style=dashed]
 }

.gv ファイルには、ユニット間の関係に関する詳細情報が含まれています。 これは、カスタム コードで解析して単位サイクルに関する情報を抽出できるテキスト ファイルです。 これを直接使用してグラフを生成することもできます(ただし、大規模なプロジェクトでは非常に複雑になる可能性があります)。 この具体的な例では、次のようなグラフが生成されます:

GraphViz.png

品質の向上

最も関連性の高いコンパイラの品質向上には次のものがあります:

  • 除数が定数の場合の div 演算用に生成されるコードが最適化されました。
  • コンパイラは、想定通り、XMLDoc 成果物のために XML ドキュメント出力ディレクトリを使用するようになりました。 これまでは、C++ .hpp フォルダを使用していました。
  • オープン配列パラメータの非表示の「上限」パラメータ型が、ターゲット CPU に応じて、Integer から NativeInt(Integer または Int64 のエイリアス)に変更されました。 これは、64 ビット コンパイラのオープン配列パラメータの長さ、高値、低値が、64 ビット値を返すようになったということを意味します。

C++Builder

次のセクションでは、C++ Builder の改善と更新について紹介します。

削除された iOS と Android

RAD Studio Athens は、iOS 64 ビット プラットフォームと Android 32 ビット プラットフォームを削除しました。これは、プラットフォームが ストアへのアプリの配置をサポートしていない場合、そのプラットフォームをサポートできないためです。 C++ を使用して iOS または Android 用にビルドするには、11.3 を使用してください。

Clang のアップグレード

RAD Studio 12.0 は、アップグレードされた Clang Win64 コンパイラのプレビュー バージョンを提供します。 プレビュー コンパイラとそのツールチェーンはインストーラーに含まれています。 現在(Clang 5)とプレビュー(Clang 15)の両方の Win64 ツールチェーンが 12.0 で利用可能です。 特性の詳細については、Clang Win64 のページの例を参照してください。

ツールチェーンの情報

  • Clang 15 を使用
  • LLVM’s lld をリンカとして使用
  • Itanium ABI (Microsoft ABI ではない)を使用
  • LLVM の libc++ STL を使用
  • C ランタイムには UCRT を使用
  • C++ ランタイムには LLVM と Mingw を組み合わせて使用
  • コマンドライン ツールのみ。 IDE からのコンパイルやリンクは許可されていないため、bcc64x を手動で実行します。
  • ユーザーは IDE からデバッグ可能。 [実行|プロセスの読み込み]または[実行|プロセスへのアタッチ]を使用して、正しいデバッガ 「Embarcadero Windows 64-bit(Modern)Debugger」が選択されているか確認します。
    • [実行|プロセスにアタッチ|モダン LLDB] デバッガ オプションで PDB 形式のデバッグ情報を出力し、PDB デバッグ情報を使用して C++ アプリケーションをデバッグします。

Delphi RTL とデータの改善

Delphi RTL

RAD Studio 12.0 では、RTL ライブラリに多くの重要な機能強化が加えられています。

GetCompilerVersion と GetRTLVersion

RAD Studio 12.0 では、System ユニットに新しい関数が 2 つ追加されています:

  • GetCompilerVersion - コンパイル時のこのシステム ユニットのコンパイラ バージョン番号を返します。 上位バイトにはコンパイラのメジャー バージョンが保持され、下位バイトにはコンパイラのマイナー バージョンが保持されます。
  • GetRTLVersion - このシステム ユニットのコンパイル時の RTL バージョン番号を返します。 上位バイトには RTL のメジャー バージョンが保持され、下位バイトには RTL のマイナー バージョンが保持されます。

すべてのプラットフォームで浮動小数点例外を無効にする

RAD Studio 12.0 では、次の RTL 浮動小数点の例外設定のデフォルト値が変更されました: Default8087CWDefaultMXCSRDefaultFPSCRDefaultFPSCR。 浮動小数点演算で問題が検出された場合に、デフォルトですべての浮動小数点例外を無効にすることを目的としています。 すべてのプラットフォーム(Windows、macOS、iOS、Android、Linux)と C++Builder が影響を受けます。 ユーザーは、アプリケーションの FP 例外をスレッド レベルで手動で再度有効にすることができます。

この変更により次のような影響があります:

  • 基本的な四則演算(加算、減算、乗算、除算)を含む式:
    • Windows/32 および 64 プラットフォームは、浮動小数点例外を抑制するように変更されます。
    • 他のプラットフォームと Windows FMX アプリケーションは変わりません(以前の動作では例外が発生しませんでした)。
  • 三角関数(sin、cos、tan)および超越関数(ln、exp)を含む数学関数:
    • Windows/32 および 64 およびその他のほとんどのプラットフォームは、浮動小数点例外を抑制するように変更されています。
    • macOS/Arm64 および Windows FMX アプリケーションのみは、すでに例外を抑制しているため、変更されません。

アプリケーションが浮動小数点例外を予期している場合は、次のことを試してください:

  • 以前の動作を復元します
  • 例外を回避するためにコードを更新します(Windows 以外の新しいプラットフォームと Windows の将来のリリースをサポートすることをお勧めします)。

詳細については、ドキュメント ページ「浮動小数点演算子の例外マスク」を参照してください。

リスト、配列、コレクションの改善

以下は改善点のリストです:

  • TList とその下位クラスの場合、「List Index out of bounds」エラー メッセージが拡張され、使用されているインデックスと有効範囲(または、その構造体が空という状況)も含まれるようになりました。 クラス名も含まれます。
  • TSparseArray.Add 関数の最適化
  • 新しい TArray メソッドの追加: IndexOfLastIndexOfContains
  • TDictionary による、キー タイプのハッシュと同じサイズのハッシュ キーを作成する方法を変更。 また、GetHashCode 関数の一部が改善されました。
  • System.Generics.Collections, System.Generics.Default, and System.Classes.TList は、すべてのインデックスに対して、NativeIntInteger の代わりに使用するようになりました。

BOM なし UTF ファイルに対するサポートの改善

RAD Studio 12.0 では、BOM エンコーディングなしの UTM テキスト ファイルに対するサポートが改善されました。

新しい TEncoding.UseBOM プロパティ(すべてのサブクラスで利用可能)は、以前のバージョンの動作を変更することができます。 この値は、新しいオーバーロード コンストラクタに、パラメーターとして渡すことができます。 コードでは、ストリームの読み取りおよび書き込み時に使用されます。

新しい TEncoding.IsBufferValid オーバーロード メソッド(入力値が異なる)もあります。 目的は、指定されたバッファに指定されたエンコーディングの有効なデータが含まれているかどうかを確認することです。 これは、BOM のないテキスト ファイルが UTF-8 であるか ASCII であるかを判断する場合に特に関係します。 主な機能は、このメソッドを TUTF8Encoding クラスに対して実装することです。

TEncoding.IsBufferValid コードは、Bjoern Hoehrmann アルゴリズムを使用しており、高速なクロスプラットフォーム ソリューションを提供します。

その他の RTL の向上

他にも多くの改善が RAD Studio 12.0 で導入されています:

  • System.UIConsts.Colors(StringToColor および ColorToString 関数で使用)に色が追加され、オブジェクト インスペクタに表示されるようになりました。
  • TMessageManagerFListeners が protected 指定となりました。
  • System.Generics.Collections.TArray に追加されたのは、要素のリストを、指定された書式設定と区切り文字での文字列表現に変換する簡単な方法です。
class function ToString<T>(const Values: array of T; const AFormatSettings: TFormatSettings; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
class function ToString<T>(const Values: array of T; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
  • Zip サポートの改善:
    • TZipHeader.ModifiedTime プロパティの追加と、TZipFile での Deflate64 のサポート。
    • Win64 における 4GB 以上のファイルに対するサポートの追加。
    • IZipCryptor インターフェイスの追加(メソッド Decrypt と Encrypt と共に)により、ユーザーは Zip ファイルに暗号化サポートをプラグインできるようになりました。
  • 並列プログラミング ライブラリ
    • TThreadPool は、次のプロパティを使用して、スレッドを初期化する方法が提供されています。
    • RAD Studio 12.0 では、スレッド プールに新しい設定が追加されており、TThreadPool クラスの新しい UnlimitedWorkerThreadsWhenBlocked プロパティ(デフォルト値は True)を使用します。 False に設定すると、動作は元に戻り、MaxWorkerThreads しきい値に到達した場合に、システムにハード制限を強制するようになります。
  • System.IOUtilsTPath.Combine には、複数のオーバーロードができました。
  • 新しいデフォルト パス アクセス メソッドの追加: TPath.GetDesktopPathTPath.GetAppPath.
  • 新しい CreateImplementation メソッドが TRttiInvokableType クラスに追加。
  • ファイルのコンテンツを読み取る新しい列挙型の追加。

データとインターネット

次のセクションでは、データとインターネット領域に追加された改善について説明します。

JSON と JSON データ バインディング ウィザード

新たに JSON データ バインディング ウィザードがあります。 [新規作成|項目の新規作成|Delphi|Web]より利用可能です。 JSON データ バインディング ウィザードでは、JSON データ構造に基づいて、Delphi データ型を作成することができます。

iOS シミュレータ用 IBLite/IBToGo

RAD Studio が Delphi iOS シミュレータ プラットフォームに対して、InterBase 組み込みバージョンをサポートするようになりました。

RAD サーバー

RAD サーバー エンジンは FastMM5 メモリ マネージャでビルドされており、特に、特に負荷の高いマルチスレッド シナリオでのパフォーマンスを向上させます。 平均して、5% のパフォーマンス向上が見られます。 次のセクションでは、RAD サーバー領域における更なる改善点について説明します。

ページの改善

RAD Studio 12.0 では、パラメータで動的ページ サイズを指定するために、TEMSDataSetResource に送信される LIST リクエストのオプションが追加されています。 これは、次の 2 つの新しいプロパティで行われます:

URL の Sqid

デフォルトでは、データ構造(データベース テーブルなど)をナビゲートする際、RAD サーバーはレコードについて特定の情報を含む可能性のある URL を公開します。 これは、内部の詳細を共有しているという事実から、レコード ID の公開により潜在的なセキュリティへの影響まで、多様な観点から理想的とは言えません。

このため、RAD サーバーでは Sqids を導入しました。これは、機密データをエンコードするための、Hashids の強化バージョンです。 この詳細については、hereを参照してください。

これを行うために、RAD Studio 12.0 では、System.NetEncoding.TSqidsEncoding という新しいクラスが導入されています。 hereをクリックして、使用方法を参照してください。

RAD サーバーのセッション認証の改善

TBackendAuth コンポーネントを使用すると、ユーザー名とパスワードを指定することができます。 一旦 RAD サーバーにログインしたら、ユーザーはセッション トークンを取得しますが、これは管理が困難です。 RAD Studio 12.0 では、次の新しいメソッド群によって、このトークンの管理方法が改善されています:

  • TCustomBackendAuth.ExportLogin - ログイン情報(トークンと関連する詳細など)を文字列としてエクスポート、任意で暗号化します。
  • TCustomBackendAuth.ImportLogin - 以前エクスポートしたログイン情報を、文字列からインポートします。 文字列の引数が指定された場合、それはデコードされます。

RAD サーバーの品質

  • RAD サーバー コンソールを、RAD Studio IDE の[ツール]メニューに追加しました。
  • TBackendAuth.LoggedInValue.ExpiresAt は、認証トークンの有効期限が切れると、現地時間を返すようになりました。
  • OnValidateCertificate イベントと同じ、クライアント側の OnNeedClientCertificate イベントを提供するようになりました。

インターネット全般の改善

  • FormatXMLData には、インデントに使用するスペースの数を示すパラメーターが含まれるようになりました。 デフォルト値は 2 スペースです。
  • TWinHTTPClient.DoExecuteRequest メソッドは、4 GB 以上のデータ転送をサポートします。
  • コンテンツを含む HTTP DELETE メソッドのサポートが追加されました。
    • AStream 引数を持つ THttpClient.Delete/BeginDelete オーバーロード メソッド。
    • AStream 引数を持つ TNetHTTPClient.Delete オーバーロード メソッド。
  • REST クライアント ライブラリの改善には次のものがあります:
    • RESTClient は、Content-Type が application/vnd.retailer.v8+json の場合に、レスポンスを JSON として認識します(11.3 ホットフィックス 1 より有効)
    • 新たに OnBeforeExecute イベントが TCustomRESTRequest に追加されました。
  • より良いリダイレクトと cookie 管理のために、RAD Studio 12.0 では次のイベントが追加されています:
  • TMultipartFormData クラス(System.Net.Mime ユニット内)での大きなファイルのサポートを改善するために、RAD Studio 12.0 では次のものが追加されています:
  • TMultipartFormData.AddStream オーバーロード メソッド
  • TMultipartFormData メソッド での新しい AHeaders:TStrings = nil 引数。
  • System.Classes での新しい TProxyAggregateStream クラス。
  • HTTP クライアント ライブラリは、基礎となるオペレーティング システム API を使用して、デフォルトで HTTP(S)リクエストを実行します。 このライブラリは、Linux 上の Linux 固有の HTTP ライブラリではなく、クロスプラットフォームである libcurl を使用します。 このため、RAD Studio 12.0 では、他のプラットフォームに対して Curl サポートが追加されています。 これにより、プラットフォームの制限の一部を回避できます。 THTTPClient が Windows 上で libcurl を使用するには、ユーザーは uses 句に System.Net.HttpClient.Linux を追加しなければなりません。
  • HTTP(または REST)リクエストで受信中にデータにアクセスできる機能を追加しました。これは、単一の HTTP リクエスト内の論理チャンクにおいてデータを返すサーバーがあることを考慮したものです(AI に焦点を当てた REST API など)。 RAD Studio 12.0 では、同様のシナリオを考慮して以下が追加されています:

FireDAC

QBE

RAD Studio 12.0 では、QBE(query by example)に対する FireDAC サポートが導入されています。これは、Query-by-example コンポーネントを表す TFDQBE と呼ばれる新しいコンポーネントによって実現されています。

  • FDQBE.Edit を使用した後、コンポーネントは、フィールドのセットがメイン データセットと同じであるが、すべてのフィールドが ftString であるメモリ内データセットを作成します。 このメモリ内データセットは、TDataSource.DataSet を置き換えます。
  • ユーザーは、データベース対応コントロールまたはグリッドのフォームに、フィルタの基準を入力できます。 基準言語にはフィールド名は必要なく、他の簡略化が行われています。 たとえば、"OrderID < 10255" でフィルターするには、"< 10255"、等しい場合は "10255" のみ、"いいね" の場合は "1025%" などと記述します。
  • FDQBE.Post メソッドが呼び出されると、コンポーネントは元の FDQuery クエリまたは Filter プロパティを変更し(FDQBF.Language プロパティに応じて)、入力された値に基づいて新しいクエリを作成します。

これは、永続フィールドを持つアクティブまたは非アクティブなデータセットで機能します。 このアプローチでは、ルックアップ フィールドなどでフィルタリングすることもできます。

FireDAC SQLite のバージョンの更新

RAD Studio 12.0 では、SQLite 3.31.1 を FireDAC 暗号化(FDE)と共に使用する選択肢を残しつつ、SQLite 3.42 へのサポートが追加されています。 バージョン 3.42 以降、SQLite では FireDAC が暗号化サポートに使用していたメカニズムが削除されているため、使用できなくなっています。 このため、FireDAC で SQLite を使用するには 3 つの方法があります:

  1. 最新バージョンを FireDAC 暗号化なしで使用する。
  2. 有料の SQLite EE(ネイティブ SQLite 暗号化のサポートがついている)を使用する。これは、RAD Studio 11.0 以降 FireDAC がサポートしています。
  3. SQLite 3.31.1 以前のバージョンを FireDAC 暗号化(FDE)と共に使用する。
メモ: SQLite から、Embarcadero の InterBase のマルチプラットフォーム組み込みバージョンである InterBase ToGo への移行を検討してください。これは、より高度な暗号化サポートを提供します(DB 全体だけでなく、機密データを含む特定のテーブルや列に対しても)。

FireDAC とセキュリティ

RAD Studio 12.0 では、FireDAC に対してセキュリティ関連の機能を追加しています。 これらの機能と全体的なセキュリティの優れた実践は、より安全なデータベース アプリケーションの開発に貢献できます。 次のプロパティは、TFDSecurityOptions で利用可能です:

  • AllowedCommandKinds - SQL コマンドの実行を制限し、ハッカーがクエリを変更したり、データベースに不要な変更を加えたりすることを防ぎます。
  • AllowMultiCommands - 複数の SQL コマンドの実行を有効または無効にします。 これはデフォルトで有効になっており、一致する機能を提供するデータベース(SQLite、PostgreSQL、MySQL)でのみ動作します。
  • AllowSQLChange - この設定を有効にすると、実行時に FireDAC SQL クエリのテキストが変更されなくなります。 DoSQLChanging のようなメソッドは CheckCanChangeSQL を呼び出し、(他の条件の中でも特に)特定の設定を確認します。
  • ExactUpdatedRecsNum - これは整数で、デフォルト値が -1 です。 次と合わせて > 0 に設定すると、
FDQuery.FetchOptions.Mode := fmExactRecsMax;
FDQuery.FetchOptions.RecsMax := 1;

FireDAC は、追加チェックで SQL UPDATE コマンドをラッピングします。

FireDAC の機能強化

  • FireDAC 接続オブジェクトに新しいプロパティ TFDCustomConnectionCommandsExecuted があります。 これは UInt64 値であり、ユーザーは接続が新しいか(接続プーリングの場合など)、またはリサイクル中でデータベースとの対話にすでに使用されているかどうかを判断するために使用できます。 理想的には、これが 0 の場合、この接続ではコマンドが実行されていません。
  • ユニット FireDAC.Phys.SQLiteWrapper.Stat.pas は、最新バージョンである SQLite 3.42 を使用します。
  • 新しいユニット FireDAC.Phys.SQLiteWrapper.FDEStat.pas は SQLite バージョン 3.31.1 を使用しますが、FireDAC 暗号化(FDE)は引き続き利用できます。
  • FireDAC では、Decimal128 のサポートが MongoDB に追加されました。
  • FireDAC では、HTTP プロトコルのサポートが Datasnap に追加されました。
  • FireDAC では、SQL サーバー に対する {INTO } エスケープシーケンス のサポートが追加されました(RETURNING 句の統一サポート(FireDAC) を参照)。
  • TSQLiteEngineLinkage の更新:
    • slFDEStatic - FireDAC.Phys.SQLiteWrapper.FDEStat.pas
    • slStatic - FireDAC.Phys.SQLiteWrapper.Stat.pas
    • FDE を使用する SQLite バージョン 3.31.1 では、デフォルトのリンケージ モードは静的です。

Android、Linux、および iOS プラットフォームの場合、プロジェクトに同時に含めることができる静的リンケージ ユニットは 1 つだけです。 つまり、FireDAC.Phys.SQLiteWrapper.Stat または FireDAC.Phys.SQLiteWrapper.FDEStat のいずれかを使用できますが、同じプロジェクトで両方を使用することはできません。 これを行うと、シンボルの重複によりリンカによってエラーが生成されます。

新しいバージョンの SQLite に移行することにより、FireDAC は、列の DROP を含む ALTER TABLE といった、最近のデータベース バージョンに追加された DDL コマンドを使用できるようになりました。

VCL および FireMonkey における変更

VCL

RAD Studio バージョン 12.0 では、VCL ライブラリに多くの重要な機能強化が加えられています。

HighDPI とスタイルの MID 再作業

RAD Studio 12.0 では、VCL MDI(Multi Document Interface)サポートが大幅に改良され、MDI ウィザード によって生成されるコードが更新されました。 新しい MDI タブ付きフォーム アーキテクチャが導入されており、新しい TFormTabsBar コントロールの利用が可能です。

MDI tabs.png

このセクションでは、いくつかの具体的な機能強化と残りの注意事項を示します。

MDI 子ウィンドウのカスタム境界線

Windows 10 および 11 システムでは、MDI 子フォームに新しいモダンなフラット枠を設定できるようになりました。 具体的には以下のとおりです:

  • 境界線にはシステム サイズとスクロールバー付きのシステム領域があります(VCL デザイナーと同様)。
  • 境界線は固定のデフォルト システム カラーを使用し、clBtnFace カラーおよび同様のライト/ダーク グレー カラーと互換性があります。これらは、通常 MDI クライアント領域に使用されます。
  • 境界線は Windows 10 と 11 システムで同じように見え、機能します。
  • システム フレームはプライマリ モニターの DPI サイズのみを使用するため、最小化状態ではフォーム DPI を使用してカスタム フレームを描画します。
  • 無効化された境界線アイコンは描画されません(VCL スタイルで使用されるのと同じソリューションです)。 たとえば、biMinimize 値が BorderIcons にない場合、[最小化]ボタンは非表示となります。
  • 子ウィンドウの境界線の処理を無効にする新しいグローバル設定、TStyleManager.ChangeChildFormSystemBorder が追加されました。これにより、子境界線に関する変更が無効になります。
  • このソリューションには PerMonitorV2 高 DPI サポートがあります。

親が割り当てられたプロパティを持つフォームのカスタム境界線

枠線のあるフォームは WM_NCActivate メッセージを取得して処理する必要がありますが、オペレーティング システムはこのメッセージを親フォームとともに Windows に送信しません。 このシナリオを機能させるには、親コントロールでフォームのアクティベーションをエミュレートし、高 DPI および PerMonitorV2 サポートに関するすべての問題を修正し、VCL スタイルに変更を追加する必要があります。

詳細

  • TWinControl クラス用の新しい TWinControlHandler クラスと、TCustomForm クラスで使用する TChildMessageHandler クラスが導入されました。 これにより、MDI 子フォームおよび親プロパティが割り当てられたフォームのカスタム枠を持つことがサポートされます。
  • 最小化された状態には MDI の子と同じ制限があり、ユーザーは新しい TFormTabsBar コントロールを使用して最小化されたフォームを非表示にしたり管理したりできます。
  • フォームは、親コントロール内のコントロールとして機能します。 これらのコントロールにフォーカスをあてると、個別のフォームではなく、一番上の親フォームとなります。
  • これらのフォームの作成と初期化は固有に行います(Visible プロパティはデフォルトは False でなければなりません。親と初期スケーリングの設定はさまざまなシナリオに応じて手動で行います)。
  • フォームには MDI の子とするモダン ボーダーが付いています。
  • フォームは親コントロール内で最大化して、それに合わせてサイズを変更できます。
  • 親コントロール上における、フォームのアクティブ化/非アクティブ化の完全なエミュレーションが追加されました。

TCustomForm クラスの IFormVisualManager インターフェイスと VisualManager プロパティ

フォームを管理する新しいコントロールを追加するために、Athens 12.0 で新しい IFormVisualManager インターフェイスが導入されています。 これには、フォームからメッセージとアクションを取得して管理するための TCustomForm クラスと統合された基本メソッドが含まれています。

バージョン 12.0 には、IFormVisualManager 型の新しい TCustomForm.VisualManager プロパティと、インターフェイスの実装に必要なメソッドも含まれています。

総括的な目的は、開発者が TFormTabsBar コントロールに実装されている派生コントロールまたはコンポーネント クラスに IFormVisualManager インターフェイスを実装することで、ビジュアル マネージャ コントロールを作成できるようにすることです。

TFormTabsBar コントロール

RAD Studio Athens 12.0 では、モダン タブといったユーザー インターフェイスで、複数の子フォームをホストするため、すぐに使用できる汎用ソリューションとして、新しい FormTabsBar コントロールが追加されています。これは、既存の MDI アプリケーションの最新化パスとしてだけでなく、VCL でのまったく新しいアプリケーションを作成するための一つの方法として提供されています。

新しい FormTabsBar コントロールは IFormVisualManager から継承されており、TForm クラスおよび TScreen クラスと動作し、Screen.Forms からのすべてのフォームに反映できます(コントロールのメイン フォームと親フォームの代わりに)。 新しいコントロールは、MDI フォームだけでなく、親が割り当てられている SDI フォームでも動作します。これは、境界線の有無にかかわらずです。 子フォームで自動的に使用できるように、メイン/親フォームにコントロールを設定することができます。 また、TFormTabsBar には、コントロールへのフォームの受け入れを調整するための AcceptMode プロパティと OnAcceptForm イベントがあります。

その他の詳細事項:

  • 各 TForm は、ハンドルの作成時にタブとして TFormTabsBar に追加できます。 ハンドルの破壊時に、タブも削除されます。
  • コントロールは、表示および非表示されるフォームを示します。 タブをクリックすると、フォームが表示され、アクティブになります。
  • TFormTabsBar は、最小化されたフォーム(MDI および SDI)を非表示にし、タブのクリックでそれらを復元およびアクティブ化できます。 この機能により、誤ったシステム動作や最小化されたフォームのサイズが回避されます。
  • 非表示または最小化されたフォームを、コントロール内でマークして、そのフォームが現在非表示であることを示すことができます。
  • タブまたはアイコン領域を右クリックして、システム ウィンドウ メニューを呼び出します。
  • タブはドラッグ可能であり、ユーザーはコントロール内の任意のタブの位置を変更できます。
  • タブの幅は、固定値で調整することも、フォーム キャプションに応じて幅を自動計算して調整することもできます(この場合は、タブの最小幅と最大幅を定義します)。 さらに、長く切り詰められたキャプションのヒントを有効にするプロパティもあります。
  • タブには、TForm.Close メソッドを呼び出す閉じるボタンを含めることができます。
  • コントロールには、すべてのタブを備えたメニューを呼び出してフォームの 1 つをすばやく選択するための特別なボタンを表示できます。
  • コントロールはフォーカスとキーボードのサポートを持つこともできますが、これは Tab キーでフォーカスされている(つまり、TabStop が True)の場合に限られます。 この場合、ユーザーは Enter キーまたはスペース キーを使用してタブを選択、スクロールし、タブをアクティブにすることができます。
  • このコントロールは高 DPI PerMonitorV2 をサポートしており、すべての DPI で正しく動作します。
  • VCL スタイルは十分にサポートされています。 一部の要素では、スタイル カラーを使用して特定の要素を描画します(閉じるボタンやセパレーターなど)。

MDI ウィザードの更新

RAD Studio 12.0 では、Delphi および C++Builder の MDI ウィザード プロジェクトも更新されました。 ウィザードによって生成されたコードは以下を使用します:

  • TActionMainMenuBar コンポーネント(TMainMenu コンポーネントの代替)
  • TImageCollection と TVirtualImageList の組み合わせ(TImageList コンポーネントの代替)
  • TFormTabsBar コントロール

フォントと画面

VCL ライブラリには、DPI スケーリングから独立したフォント拡大縮小のサポートが、新たに改訂されています。 この変更は主に VCL ライブラリの TFont クラスで行われています。

RAD Studio Athens では、TFont クラスに次の新しいメソッドとプロパティが追加されています:

  • TFont.IsDPIRelated - TFont.PixelsPerInch プロパティを使用し、ホスト コントロールの CurrentPPI に応じてプロパティを変更できるようにします。
  • TFont.IsScreenFont - TScreen クラスでのグローバル フォント用です。
  • TFont.ChangeScale - TControl.ChangeScale メソッド内で呼び出され、DPI 関連のフォントを拡大縮小します。
  • TFont.ScaleForDPI - フォントを任意の DPI に適用するためのコードで使用されます。 IsDPIRelated プロパティをチェックし、フォントの高さを調整します。

主な変更点は、Size の使用方法と、TFont.Assign を呼び出す際にに DPI と IsScreenFont 値が考慮される点です。 この変更は既存のコードに影響し、VCL ライブラリは新しいフォント スケーリングをサポートするように適応されました。 たとえば、次のようなコードは:

Font.Height := MulDiv(Font.Height, M, D)

次のように変更します:

Font.ChangeScale(M, D, isDpiChanged)

また、新しいアプローチでは、TFont.PixelsPerInch プロパティがチェックされるため、フォントのダブル スケーリングは回避する必要があります。

プラットフォームのインテグレーション

RAD Studio 12.0 では、WinRT API と WebView 2 コントロールを最新バージョンに更新することで、Windows API と WinRT API のマッピングを刷新しました。

WinMD メタデータからの WinAPI Delphi ヘッダー

RAD Studio 12.0 では、Microsoft が WinMD 形式で利用できるメタデータを使用して、クラシック Windows API の Delphi 定義を生成できる内部インポート ツールを作成し、生成されたユニットの最初のバージョンを GetIt で利用できるようにしました。

GetIt パッケージ マネージャ を開き、パッケージ「Windows API from WinMD 」を検索します。

WinMD API.png

これは、41 MB の Delphi コードである 311 ヘッダー ファイルを、次のフォルダにインストールします: C:\Users<name>\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0

これらの新しいヘッダーははるかに拡張性に優れ、コア RTL で利用可能なセットに比べ、最新の API すべてをカバーしています。

Edge ブラウザ

RAD Studio 12.0 では、WebView 2 コントロール API が最新バージョン、WebView2 SDK 1.0.1774.30 に更新されています。 これにより、WebView 2 コントロールを基盤とする多くの新しい機能のサポートが追加されており、次のものがあります:

  • UserAgent は ICoreWebView2Settings で利用可能です。
  • ICoreWebView2Profile2 には、メソッド ClearBrowsingData、ClearBrowsingDataAll、ClearBrowsingDataInTimeRange が含まれています。

さらに、TEdgeBrowser には新しいメソッドがあり、ナビゲーション時の送信データや追加リクエスト ヘッダーが提供されます。 ARequest のヘッダーは、WebView2 ランタイムによって追加されたヘッダーをオーバーライドします(Cookie ヘッダーは除く)。 Web リソース リクエスト メソッドは、GET または POST でなければなりません。

function NavigateWithWebResourceRequest(const ARequest:
  ICoreWebView2WebResourceRequest): Boolean;

TListView でのタイル ビューのサポート

VCL ライブラリは、基盤とするプラットフォーム コントロールで利用できるこのオプションに対してサポートを追加しました。 内容は次のとおりです:

  • vsTile 値を TViewStyle 列挙型に追加。
  • OnCancelEdit イベントを TListView コントロールに追加。
  • タイル項目を調整するため、新しい TileOptions プロパティをコントロールに追加。 このプロパティには次のものがあります:
    • SizeType: 項目のサイズ型を定義(自動または固定サイズ)。
    • タイルの WidthHeight(固定サイズ型が設定されている場合)。
    • LabelMargins: 項目の内部のラベル(すべてのテキスト行)の余白。
    • SubLineCount: 項目のキャプションの下に入れられる行数。
  • 新たに TileColumns プロパティが追加されました。 項目内の追加行を調整して、列のサブ項目のテキストが表示されるようにします。 コントロールの TileColumns プロパティは、リスト内のすべての既存の項目のタイル情報を自動的に調整します。

TControl 列挙子

RAD Studio Athens では、TControl 列挙子が VCL ライブラリと TComponent 列挙子に追加されています。 TComponent の場合、指定されたコンポーネントが所有するコンポーネントをスキャンするロジックとなっています。 TControl 列挙子の場合、子コントロールをスキャンします。 GetControls ページの例を参照してください。

TControlEnumeratorFilterType ページにて、コントロールの列挙子のさまざまなフィルタについても参照してください。

新しい ShowInTaskbar フォーム プロパティ

TForm クラスに新たに ShowInTaskbar プロパティが追加されており、フォームがメイン フォームでなくても、Windows タスク バーに一致するエントリを持つ必要があるかどうかを制御します。

デスクトップ Windows マネージャの機能強化

RAD Studio Athens では、Windows 11 の高度なデスクトップ管理機能の一部のサポートが追加されています。 これらの機能は、古いバージョンのオペレーティング システムでは動作しません。

Winapi.DwmApi.pas ユニットのバージョン 12.0 では、新しいプラットフォーム機能の一部をアクティブにするために使用される、新しい DWMWA_xxx 定数がいくつか追加されています。 これらの機能をアクティブにするには、同じユニットで DwmSetWindowAttribute API を呼び出します。

さらに、VCL フォームにおいて、Windows 11 の イマーシブ ダーク モードをサポートするようになりました。 これを有効にするには、TForm クラスの 新しいメソッド EnableImmersiveDarkMode を呼び出します。

新しいダブル バッファ モード

RAD Studio 12.0 では、すべてのコントロールに対して、新しい列挙型 TDoubleBufferedMode が導入されており、その型の新しい DoubleBufferedMode プロパティ、新しいCanUseDoubleBuffering メソッドも導入されています。

TButton、TCheckBox、TRadioButton といったテーマ付きコントロールで DoubleBuffering を有効にすると、コントロールの状態が変化するときにネイティブ システムのアニメーションが中断されます。 このため、CanUseDoubleBuffering メソッドを導入し、TButtonControl コントロール クラスに対してそれをオーバーライドして、ダブル バッファリングが無効化されています。

FireMonkey

FireMonkey ライブラリに対して、RAD Studio は新たに Skia ライブラリ インテグレーション 機能を追加しています。 ただし、RAD Studio バージョン 12.0 では、そのほかにも新しい機能追加や改善が行われています。

Android ターゲット API レベル 33

RAD Studio バージョン 12.0 では、Google がストアへの送信に必要とする API レベル 33 をターゲットとする Delphi Android サポートが更新されます。 これには、次のような Android ライブラリの改善と拡張機能が含まれています:

  • IFMXCameraService および IFMXTakenImageService プラットフォーム サービスの Android プラットフォーム実装の改善。 実装は非同期になり、Android スコープド ストレージ モデルと互換性があります。 また、メインスレッドをブロックしなくなりました。 同じことが IFMXPhotoLibrary プラットフォーム サービスの実装にも当てはまります。
  • JManifest_permissionClass クラスと JManifest_permission_groupClass クラスを更新して、より最新の Android API レベルで利用できる、静的フィールドをリスト化します。
  • IFMXExtendedClipboardService インターフェイス/プラットフォーム サービスを更新し、Android 13 で導入されたクリップボード エディタのオーバーレイに、機密コンテンツが表示されるのをアプリケーションが防止できるようになりました。
  • [プロジェクト|オプション...|アプリケーション|使用する権限からのオプション ページを更新し、システム アプリケーションにのみ付与される権限は削除されました。
  • Android 12 以降で利用できる新しい Android スプラッシュ画面の標準に対するサポートは、こちらから
  • FireMonkey Android アプリ内購入のサポートのアップグレードが、Google Play Billing ライブラリの最新バージョン(6.0.1)に依存します。 これは 2023 年 11 月 1 日までに必要となります。

分割画面のサポート

Athens 12.0 以降、RAD Studio には、モバイル プラットフォーム用の FireMonkey アプリを作成するサポートが追加されました。これは、利用可能な画面の一部のみを使用するものであり、大きな画面を備えたタブレット デバイスで特に便利な機能です。

このバージョンには、このシナリオを完全に処理するための iOS と Android の両方の FireMonkey ライブラリへの内部コードが含まれています。 Android マニフェストが変更されているため、ユーザーはアプリケーションのマニフェストまたはユーザー構成内のマニフェストを更新する必要がある場合があることに注意してください。 新規および変更された Android マニフェスト エントリには次のものがあります:

  • android:resizeableActivity="true"
  • android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"(ここへの追加は 値 screenLayout)

TEdit と TMemo の改善

Athens 12.0 以降、RAD Studio は TEdit/TMemo コントロールを大幅に改善しており、デスクトップ プラットフォーム(Windows および macOS)から始まり、モバイル プラットフォームも含められる予定です。

この改善は、スタイル付きコントロールの内部の広範なリファクタリングに基づいています。 スタイル付き編集コントロール(TEdit)のプレゼンテーションが、最近追加された TMemo 実装(すでに RAD Studio 11.3 に含まれている)を利用してリファクタリングされました。

FireMonkey の重要なアップデート

FireMonkey の一般的な変更点

  • 新しい TEdit プロパティ AutoSelectCharCase
  • TEdit の[元に戻す]機能のサポート。 最近追加された TUndoManager は、TEdit と TMemo 間で共有されます。
  • TMemo は、ネイティブ TEdit でのものと同様に、IME テキスト入力を実装しています。
  • TEdit は、前景ブラシ リソースを考慮します。
  • 〔Shift+クリック〕選択が改善されました。

iOS プラットフォームの場合

  • iOS 用仮想キーボードのリファクタリング: 仮想キーボード ツールバーとカスタム ボタンの位置合わせに使用される、iOS 仮想キーボードの FMX 実装については、そのロジックを、ツールバーの位置合わせ/アニメーションから、iOS 側に手動で移動し、不要な複雑なコードをいくつか削除することで、ロジックの大部分を iOS プラットフォームにシフトしてサポートを容易にしました。

Android プラットフォームの場合

  • 対話型テキスト選択が改善されました。
  • Point の選択位置を調整し、テキスト選択範囲の左下に配置しました。
  • TMemo や TEdit における位置カーソルの選択 Point を含むようにしました。
  • オブジェクトのオフセットを持つスタイルを使用する場合に、PointInObjectLocal が領域を処理するように改善されました。
  • 改善されたテキスト選択をサポートするために、プラットフォームとプレミアム スタイルが更新されました。
  • TEdit、TMemo などの世代の FireMonkeystyle の更新。 Android 用テキスト入力コントロールに、CaretPoint が追加されました。
  • Android 上の TMemo でカーソルを移動するための指のスライド ジェスチャのサポート。

すべてのプラットフォームの単一アイコンと Android アダプティブ アイコン

シングル アプリのアイコン ウィザードは、RAD Studio IDE に統合された包括的なツールで、複数のプラットフォームにわたるユーザー アプリケーションに対して、アイコンとスプラッシュ画面を生成するプロセスを合理化するように設計されています。 主な機能の 1 つは、Android ベクター型ドローアブル形式のサポートです。これにより、Android デバイス専用のスケーラブルで応答性の高いアイコンとスプラッシュ画面を作成することができます。

この機能を使用して、SVG2VectorDrawable と呼ばれる特殊なツールを使い、アダプティブ アイコンを生成します。 これにより、さまざまなデバイスのディスプレイやユーザー インターフェイス スタイルに適応する、多用途で応答性の高いアイコンの作成が可能になり、全体的なユーザー エクスペリエンスが向上します。

さらに、RAD Studio ではベクトル化されたスプラッシュ画面ののサポートを実装しています。 この実装は、単一アイコン ウィザードの機能に連携されています。 この機能を使用すると、開発者は単一の SVG(スケーラブル ベクタ グラフィック)ファイルを使用して、複数のプラットフォーム用の高品質なスプラッシュ画面を作成できます。

Android の場合、シングル アイコン ウィザードは、「SVG2VectorDrawable」と呼ばれる特殊なツールを通じて(内部的に)生成されるスプラッシュのベクター型ドローアブル形式もサポートしており、Android エコシステム内での互換性と適応性がさらに強化されています。 アートワーク ジェネレータ の使用方法については、アプリケーション アイコンのドキュメント ページを参照してください。


Android Adaptive Icon.png

その他の FMX の改善

以下は、RAD Studio 12.0 で導入されたそのほかの改善点です。

  • Windows および macOS 用の新しい TFontManager により、アプリケーションにフォントを動的にロードできるようになりました。
  • TTouch データ型へ以下の新しいフィールドを追加することで、FMX マルチタッチのサポートが拡張されました。
    • Id: タッチの一意の識別子。指を画面から離す瞬間まで有効です。
    • Location: タッチ ポイント。
    • Action:このタッチで実行されるアクション: 画面に指を置く、持ち上げる、移動する、など)。
  • 新しい TWinFormPositionerService は、FMX が画面のレイアウトと位置を管理し、デスクトップの中心を決定し、座標に関するいくつかの問題を処理するのに役立ちます。
  • モバイル プラットフォームでダブルクリックまたはダブルタップした場合に、マウス イベントで ssDouble を渡すためのサポートが追加されました。 すべてのプラットフォームでのマウス操作の流れは次のとおりです(ダブルクリックの場合):
    • OnMouseDown
    • OnClick
    • OnMouseUp
    • OnMouseDown(State = ssDouble)
    • OnDoubleClick
    • [OnMouseMove](State = ssDouble)
    • OnMouseUp (State = ssDouble)
  • TLocationSensor ErrorRadius はモバイル プラットフォーム用に実装されています。
  • FireMonkey に、新しい Windows 11 スタイルが含まれました。
  • 新たにプロパティ FirstWeekMode が FireMonkey カレンダー コントロールに追加kされました。モード ISO8601 と FirstDayOfYear の間で選びます。
  • マルチスレッドをサポートするバックエンド実装(Skia など)を使用している場合、FireMonkey が TCanvas グローバル ロックを削除できるようにしました。 これは、新しい TCanvasStyle フラグ DisableGlobalLock を使用して実現できます。
  • ユーザーが列ヘッダーのスタイルを指定できるように、TColumn クラスに新しいプロパティ HeaderSettings が追加されました。 これには、新しい HeaderStyleLookup プロパティも含まれています。

ToolsAPI

コード エディタには、コンテンツを読み書きするための方法がいくつかあります。 このリリースでは、既存インターフェイスの拡張や新しいインターフェイスを追加することで、高パフォーマンス API をいくつか追加しています。

これに特化したサンプル プロジェクトは、次の製品デモにあります:

  • エディタの Raw 読み込みデモ
  • エディタの書き込みデモ

これら機能の詳細については、エディタ バッファからの読み込みエディタ バッファへの書き込み について各種ページを参照してください。

RAD Studio 12.0 では、エディタ内の各テキスト セル(文字領域)のデフォルトの描画や、行の状態に関するその他の重要な情報も改善されました。 これらの更新の詳細については、「コード エディタでの ToolsAPI サポート」ページを参照してください。

関連項目