combobox не использует цвет выделения стиля vcl.

Я использую combobox с включенными стилями vcl, но когда я запускаю приложение, цвет выделения, используемый combobox, - это цвет выделения windows, а не стилей vcl.

Как я могу это исправить, я имею в виду использование цвета подсветки стиля vcl в combobox?

enter image description here

2 ответов


насколько я знаю, единственным обходным путем для этой проблемы является ownerdraw combobox

попробуйте эти шаги

  1. установите для свойства Style поля combobox значение csOwnerDrawFixed
  2. в событии OnDrawItem используйте методы стилей vcl для рисования элементов combobox.

проверить этот пример кода

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. Также вы можете использовать в VCL.Стили.OwnerDrawFix единица (часть проект vcl-styles-utils), который включает набор владельца рисует подпрограммы для компонентов, таких как TListBox, TComboBox и TListView.


Это должно быть один для RRUZ. :)
См. его сообщение в блоге:http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/

(сохраните репутацию для его скорого ответа, но вы получите старт ^_^)