В выпадающем списке не используется цвет выделения в стиле vcl. - PullRequest
8 голосов
/ 16 марта 2012

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

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

enter image description here

Ответы [ 2 ]

14 голосов
/ 16 марта 2012

Насколько мне известно, единственным решением этой проблемы является выпадающий список

.

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

  1. Установите свойство Style в выпадающем списке csOwnerDrawFixed
  2. В событии OnDrawItem используйте методы стилей vcl для рисования элементов комбинированного списка.

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

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

4 голосов
/ 16 марта 2012

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

(оставьте представителя для его предстоящего ответа, но вы начнете ^ _ ^)

...