2012-03-16 12 views
8

Estoy usando un cuadro combinado con los estilos vcl habilitados, pero cuando ejecuto la aplicación, el color de resaltado utilizado por el cuadro combinado es el color de resaltado de Windows y no de los estilos vcl.combobox no utiliza color de resaltado de estilo vcl.

¿Cómo puedo solucionar esto, me refiero al uso del color de resaltado de estilo vcl en el cuadro combinado?

enter image description here

Respuesta

14

Por lo que sé, la única solución para este problema, es OwnerDraw el cuadro combinado

Pruebe estos pasos

  1. establecer la propiedad Style del cuadro combinado a csOwnerDrawFixed
  2. En el caso OnDrawItem utilice los métodos vcl styes para dibujar los elementos del cuadro combinado.

Comprobar este código de ejemplo

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; 

Para más información se puede comprobar este artículo Vcl Styles and Owner Draw. También puede usar la unidad Vcl.Styles.OwnerDrawFix (parte de vcl-styles-utils project) que incluye un conjunto de rutinas de dibujado por el propietario para componentes como TListBox, TComboBox y TListView.

4

Ese debe ser uno de RRUZ. :)
ver a su entrada en el blog: http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/

(mantenga el representante de su pronto-a-venir respuesta, pero obtendrá un inicio^_ ^)

+6

+1, reglas de RRUZ. –

+1

Sí, estoy esperando la primera pregunta que pregunta cómo consultar los estilos de VCL con WMI ..... –

+0

@David, LOL ... –

Cuestiones relacionadas