2012-03-16 4 views
8

Utilizzo una casella combinata con gli stili vcl abilitati, ma quando eseguo l'applicazione il colore di evidenziazione utilizzato dalla casella combinata è il colore di evidenziazione di Windows e non quello degli stili di vcl.non utilizza il colore di evidenziazione in stile vcl.

Come posso risolvere questo problema, voglio dire usare il colore di evidenziazione in stile vcl nella casella combinata?

enter image description here

risposta

14

Per quanto ne so, l'unica soluzione per questo problema, è OwnerDraw casella combinata

Prova questi passaggi

  1. impostare la proprietà di stile della casella combinata per csOwnerDrawFixed
  2. In caso OnDrawItem usa i metodi vcl styes per disegnare gli elementi della casella combinata.

controllare questo codice di esempio

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; 

Per maggiori informazioni è possibile controllare questo articolo Vcl Styles and Owner Draw. Inoltre, è possibile utilizzare l'unità Vcl.Styles.OwnerDrawFix (parte di vcl-styles-utils project) che include un insieme di routine di disegno proprietario per componenti come TListBox, TComboBox e TListView.

4

che dovrebbe essere uno per RRUZ. :)
vedere i suoi post sul blog: http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/

(tenere il rappresentante per il suo presto a venire risposta, ma si otterrà un inizio^_ ^)

+6

+1, regole RRUZ. –

+1

Sì, sto aspettando la prima domanda che chiede come interrogare gli stili VCL con WMI ..... –

+0

@David, LOL ... –