Delphi 11.3で,VCLアプリでスタイルを適用したFormにTTitleBarPanelを利用しようとしたらうまくいかなかったので整理してみました。
VCLスタイルの適用
VCLでスタイルを適用するには,プロジェクト メニューの オプション を選択し 表示 タブの カスタムスタイル から,使いたいスタイルを選択します。
さらに,デフォルトスタイルを適用すれば,ソフトを起動したときに自動的に適用されるスタイルを指定することができ,IDEの編集画面でのデザインを確認することができます。
詳しい利用方法については,docwikiで確認できます。
カスタムタイトルバーを使う
タイトルバーにボタンなどのコントロールを追加するカスタムタイトルバーの実装についてはDocwikiに説明があります。
DocWiki: VCL フォームのカスタム タイトル バー
公式のチュートリアルもあります。
スタイルが適用されたフォームにカスタムタイトルバーを適用
上記の方法で,VCLスタイルを適用したフォームにカスタムタイトルバーを適用します。
以下の手順で行います。
- TTitleBarPanelコントロールをFormに配置する。
- フォームのCustomTitleBarのControlに追加したTTitleBarPanelコントロール(TitleBarPanel1)を指定する。
- フォームのCustomTitleBarのEnableをTrueにする。
すると,フォームのStyleElementsのseBorderが自動的にFalseに変わり,フォームの一部,つまりボーダーのスタイルが適用されなくなります。CustomTitleBarのデザイン関連のプロパティが優先されます。
カスタムタイトルバーを取り除く
カスタムタイトルバーの利用をあきらめ,フォームのCustomTitleBarのEnableをFalseにしても,フォームの縁のデザインが適用されないのはフォームのStyleElementsのseBorderがTrueでないからなので,これをTrueにするとデザインが適用されます。
TTitleBarPanelを取り除いて,フォームのデザインをテキストエディタで見てみると,CustomTitleBar.Height や GlassFrame.Top が残っていたりするので,取り除いておいたほうが良いかもしれません。
ソースコードには,Vcl.TitleBarCtrls が uses節に残っているので,これも取り除いたほうがよさそうです。
おわりに
カスタムタイトルバーがどのように使えるのかを調べていたのですが,それを取り除いても元のスタイルが適用されなかったので備忘録として残そうと考えました。
StyleElements の seBorder が知らないうちに外れてしまうことに気づくのに時間がかかってしまいました。
みなさんのお役に立てば幸いです。