8

vcl スタイルを有効にしてコンボボックスを使用していますが、アプリケーションを実行すると、コンボボックスで使用される強調表示の色は、vcl スタイルではなく、ウィンドウの強調表示の色になります。

どうすればこれを修正できますか?つまり、コンボボックスで vcl スタイルのハイライト色を使用するということですか?

ここに画像の説明を入力

4

2 に答える 2

14

私の知る限り、この問題の唯一の回避策は、コンボボックスの所有者描画です

これらの手順を試してください

  1. コンボボックスの Style プロパティをcsOwnerDrawFixed
  2. OnDrawItem イベントで、vcl styes メソッドを使用してコンボボックス項目を描画します。

このサンプルコードを確認してください

uses
 Vcl.Styles,
 Vcl.Themes,

procedure TForm115.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
const
  ColorStates: array[Boolean] of TStyleColor = (scComboBoxDisabled, scComboBox);
  FontColorStates: array[Boolean] of TStyleFont = (sfComboBoxItemDisabled, sfComboBoxItemNormal);
var
  LStyles  : TCustomStyleServices;
begin
  LStyles  :=StyleServices;
  with Control as TComboBox do
  begin
    Canvas.Brush.Color := LStyles.GetStyleColor(ColorStates[Control.Enabled]);
    Canvas.Font.Color  := LStyles.GetStyleFontColor(FontColorStates[Control.Enabled]);

    if odSelected in State then
     Canvas.Brush.Color := LStyles.GetSystemColor(clHighlight);

    Canvas.FillRect(Rect) ;
    Canvas.TextOut(Rect.Left+2, Rect.Top, Items[Index]);
  end;
end;

詳細については、この記事を確認してくださいVcl Styles and Owner Draw。また、TListBox、TComboBox、TListView などのコンポーネントの一連のオーナー描画ルーチンを含むVcl.Styles.OwnerDrawFixユニット ( vcl-styles-utils プロジェクトの一部) を使用することもできます。

于 2012-03-16T19:44:59.900 に答える
4

それはRRUZのためのものでなければなりません。:)
彼のブログ投稿を参照してください: http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/

(彼のすぐに来る答えのために担当者を守ってください、しかしあなたは始めます^_^)

于 2012-03-16T17:39:05.210 に答える