LoginSignup
2
0

VCLアプリでTTitleBarPanelを利用するとスタイルの一部が適用されなくなる

Posted at

Delphi 11.3で,VCLアプリでスタイルを適用したFormにTTitleBarPanelを利用しようとしたらうまくいかなかったので整理してみました。

VCLスタイルの適用

VCLでスタイルを適用するには,プロジェクト メニューの オプション を選択し 表示 タブの カスタムスタイル から,使いたいスタイルを選択します。
さらに,デフォルトスタイルを適用すれば,ソフトを起動したときに自動的に適用されるスタイルを指定することができ,IDEの編集画面でのデザインを確認することができます。
詳しい利用方法については,docwikiで確認できます。

Docwiki: VCL スタイルの概要

カスタムタイトルバーを使う

タイトルバーにボタンなどのコントロールを追加するカスタムタイトルバーの実装についてはDocwikiに説明があります。

DocWiki: VCL フォームのカスタム タイトル バー

公式のチュートリアルもあります。

スタイルが適用されたフォームにカスタムタイトルバーを適用

上記の方法で,VCLスタイルを適用したフォームにカスタムタイトルバーを適用します。
以下の手順で行います。

  1. TTitleBarPanelコントロールをFormに配置する。
  2. フォームのCustomTitleBarのControlに追加したTTitleBarPanelコントロール(TitleBarPanel1)を指定する。
  3. フォームのCustomTitleBarのEnableをTrueにする。

すると,フォームのStyleElementsのseBorderが自動的にFalseに変わり,フォームの一部,つまりボーダーのスタイルが適用されなくなります。CustomTitleBarのデザイン関連のプロパティが優先されます。

カスタムタイトルバーを取り除く

カスタムタイトルバーの利用をあきらめ,フォームのCustomTitleBarのEnableをFalseにしても,フォームの縁のデザインが適用されないのはフォームのStyleElementsのseBorderがTrueでないからなので,これをTrueにするとデザインが適用されます。
TTitleBarPanelを取り除いて,フォームのデザインをテキストエディタで見てみると,CustomTitleBar.HeightGlassFrame.Top が残っていたりするので,取り除いておいたほうが良いかもしれません。
ソースコードには,Vcl.TitleBarCtrls が uses節に残っているので,これも取り除いたほうがよさそうです。

おわりに

カスタムタイトルバーがどのように使えるのかを調べていたのですが,それを取り除いても元のスタイルが適用されなかったので備忘録として残そうと考えました。
StyleElementsseBorder が知らないうちに外れてしまうことに気づくのに時間がかかってしまいました。
みなさんのお役に立てば幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0