これまでVCLでは、開発者がアプリケーション全体に対して、1つのスタイル(あるいはスタイルなし)を選択することができました。10.4からは、VCLアプリケーションで複数のVCLスタイルを同時に使用できるようになります。 これは、アプリケーションの複数のフォームで異なるスタイルを使用したり、同じフォーム上の複数のコントロールで異なるスタイルを設定できるということです。また、スタイルを使用した要素(コントロールやフォーム)とWindowsのデフォルトプラットフォームテーマを使った要素を混在させることもできます。
この機能は、TControlクラスの新しいプロパティStyleNameによって制御されます。このプロパティには、アプリケーションで有効なスタイル名のひとつを、その値として設定します。これにより、設定したスタイルがそのコントロールに適用されます。プロパティ値が空の場合は、親コントロールのスタイルが使用されます。つまり、フォームに対してこのプロパティを設定すると、フォーム上のすべてのコントロールが、デフォルトでフォームに設定したスタイルを使用します。
クイックデモ
その名前のとおり、コントロールごとのスタイル設定は、同じアプリケーションのフォーム、コントロールごとにそれぞれ異なるスタイルを適用することができます。はじめに、アプリケーションに複数のスタイルを追加します。いずれのスタイルも追加可能です。この機能は、デフォルトスタイルがWindows以外のVCLスタイルの1つが有効なときにのみ利用可能です。はじめに、複数のスタイルをアプリケーションに追加してください(ヒント:10.4では、新しい高DPIスタイルも利用できます。これについては別のブログ記事で紹介します)。
これで、フォーム上の異なるコントロールに、異なるスタイル名を設定できます。以下にDFMファイルの例を示します(ここでは関連する重要なプロパティのみを掲載しています)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
object Form2: TForm2 StyleName = 'Sky' object Panel1: TPanel StyleName = 'Light' object Button1: TButton... object Button3: TButton StyleName = 'Sky' end end object Button2: TButton StyleName = 'Windows' end object Button4: TButton StyleName = 'Luna' end object Button5: TButton StyleName = 'Aqua Graphite' end end |
Button1は、それを配置しているパネルのスタイルを使用し、Button2は、フォームで指定したスタイルをリセットしている点に注意してください。「Windows」は、以下で説明するように、特別な目的を持った値です。このコードによって、5つの異なるスタイルを5つのボタンでそれぞれ使うように設定したフォームのUIを、以下に示します。
いくつかのルール
VCLアプリケーションの異なるフォームとコントロールでスタイルを調整するために、いくつかのアプローチが用意されています。
1. [プロジェクト|オプション|表示]のデフォルトスタイルにWindows以外のVCLスタイルを指定し、カスタムスタイルのリストから必要なVCLスタイルを選択します(ただし、実行時にスタイルをロードすることも可能です)。
2. TControl.StyleNameプロパティを使って、各コントロールないしは各フォームに、特定のスタイルを設定します。StyleNameプロパティの値は、プロジェクトオプションに加えたスタイル名のいずれかでなければなりません。コントロールは、親コントロールで定義されたStyleNameの値を使用するようにできるため、フォームのStyleNameプロパティを指定することで、フォーム上に配置されたすべてのコントロールで、特定のスタイルを使用するように設定できます。さらに以下ようなケースがあります。
- デフォルトでTControl.StyleNameの値は空なので、コントロールはデフォルトスタイルを使用します。
- StyleNameに「Windows」を設定すると、コントロールやフォームにスタイルを適用できなくなります。
- TControl.StyleNameプロパティに、ロードされていないVCLスタイル名をスタイル名を設定すると、無効と判断し、コントロールはデフォルトスタイルを使用します。
3. コモンダイアログにも、特定のスタイルを設定できます。これを行うには、プロパティTStyleManager.DialogsStyleNameを使用します。デフォルトでこの値は空なので、コモンダイアログはアプリケーションのデフォルトスタイルを用います。
4. アプリケーションスタイルに「Windows」を設定することができます。これは、一部のコントロールやフォームで、StyleNameプロパティの値が空のとき、常に「Windows」スタイルを使用し、VCLスタイルが常に無効になるということです。この機能を有効にするには、TStyleManager.UseSystemStyleAsDefaultプロパティをTrueに設定します。StyleNameプロパティを明示的に指定した一部のフォームのみでVCLスタイルを有効にしたい場合は、このプロパティを使用します。ただし、いずれのケースでも、VCLスタイルを有効にしておく必要があることにご注意ください。
上記の4点目で解説したメカニズムを用いることで、開発者は、スタイルを用いたアプリケーション内で、VCLスタイルをサポートしないサードパーティコンポーネントを使用することが可能になります。以前、これを実現するのには、かなり複雑なことをする必要がありました。新しいアーキテクチャでは、スタイル付きコントロールとスタイルなしコントロールを同一フォームで組み合わせる方法を改善し、VCLスタイルの使用を断念することなく、こうしたサードパーティコントロールの活用を可能にしました。
コントロールごとのスタイル設定は、サードパーティのコントロールに対して、自動的に適用されない点にご注意ください。この機能をサポートするには、コントロール側で、 Vcl.Themes.StyleServicesメソッドをTControlパラメータを指定して呼び出す必要があります。例えば、StyleServices(Self).DrawElementのようなコードです。
まとめ
コントロールごとのVCLスタイル設定を導入することで、より柔軟なアプリケーションでのスタイル使用が可能になります。一部のフォームのみのスタイル設定を行い、それ以外のフォームと共存できます。スタイルを設定したアプリケーション内でも、VCLスタイルをサポートしていない独自のカスタムコントロールやサードパーティコントロールを使用できます。UIスタイルの混在を、動的に行うことも可能です。
VCLには、このほかにも多くの機能が加わりつつあります。その中でも、VCLスタイルの10.4での新機能は、あらかじめブログで紹介する価値のある、すばらしい新機能であると言えます。引き続き、10.4の新機能について注目ください。
アップデートサブスクリプションに加入している方は、ベータビルドへのアクセスが可能です。現在でも10.4のベータプログラムに参加可能ですので、お問い合わせください。
この記事は、RAD Studioの将来のリリースに関するプレビューです。製品品質やスケジュール等の理由により、紹介した機能の提供が変更になる可能性があります。製品が正式にリリースされるまで、最終的な機能、スペック等について保証されません。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition