6

問題が発生しました。通常、そのプロパティで背景色 (例: clwhite) を変更することはできません。私はDelphiの経験があまりなく、2つの可能な解決策を見つけましたが、適切な方法で変更する方法、またはそれが不可能な理由を知りたいです。TToolBarToolBar.Color

1) スタイルをグラデーションに変更しますが、ボタンの基本的なアニメーションも変更します。

ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite

2)以下の設定でTToolBarTPanelに入れます。

Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
4

1 に答える 1

11

デフォルトでは、aTToolbarはそのプロパティを無視しColorます。
また、デフォルトではTransparentプロパティはtrueであるため、ツールバーの親の色が何であれ透けて見えます。

VCL ソース コードを見ると、TToolbar が独自の描画を行っていないことがわかります。ToolbarWindow32のWin32 コモン コントロールのラッパーComCtl32.dllです。
これは描画を行うコードです。
Windows XP が導入されたとき、Microsoft は UI テーマを追加し、Borland は を介し​​てこれをサポートしましVCL.Themes.TStyleManagerた。
スタイル マネージャーを使用して Common Controls の外観を変更できますProject -> Options -> Appearance -> Custom Styles:かなり奇妙なテーマの; また、機能にはバグがあります。

同じことがTPageControl/TTabSheetColor プロパティを公開しない場合にも当てはまります。
ComCtl32.dll を介してインポートされ、ComCtl32.dll によって実装されたすべてのコントロールはVCL.ComCtrls、これらの不整合に悩まされます。

要するに、TToolbar にそのプロパティ
を尊重させるためにできることは何もありません。 次のいずれかの回避策が既に見つかりました。Color

  1. GradientEndColor同一の とGradientStartColor、またはでグラデーションを設定します

  2. ツールバーを別のコントロール (TPanel など) に配置し、そのコントロールの色を変更します。ツールバーは透明なので、親の色が透けて見えます。
    パネルのBevelInner/BevelOuterbvNone、または

  3. VCL スタイルを有効にすると、その企業のティックボックス アンチパターンに関連するすべての問題が発生します。

于 2016-09-06T12:23:23.073 に答える