2010-07-23 12 views

risposta

8

utilizzare l'evento OnBeforeCellPaint:

procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree; 
    TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; 
    CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); 
begin 
    if Node.Index mod 2 = 0 then 
    begin 
    TargetCanvas.Brush.Color := clFuchsia; 
    TargetCanvas.FillRect(CellRect); 
    end; 
end; 

questo cambierà lo sfondo su ogni altra riga (se le righe sono sullo stesso livello).

+0

e se non volessi affatto il colore? come rimuovere il colore di fondo schiena mi stanco 'TargetCanvas.Brush.Style: = bsClear;' ma non riescono – MartinLoanel

+1

@MartinLoanel Sarà necessario fare molto di più per rendere l'intero controllo trasparente. Chiedilo come una domanda diversa e potresti ottenere delle risposte o qualcuno potrebbe averlo già fatto. – Nat

+0

già trovare un modo – MartinLoanel

7

Per controllare il colore del testo in una riga specifica, utilizzare l'evento OnPaintText e impostare TargetCanvas.Font.Color.

procedure TForm.TreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: 
    TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); 
var 
    YourRecord: PYourRecord; 

begin 
    YourRecord := Sender.GetNodeData(Node); 

    // an example for checking the content of a specific record field 
    if YourRecord.Text = 'SampleText' then 
    TargetCanvas.Font.Color := clRed; 
end; 

Si noti che questo metodo viene chiamato per ogni cellula del TreeView. Il puntatore del Nodo è lo stesso in ogni cella di una riga. Quindi, se si dispone di più colonne e si desidera impostare il colore per una fila intera accoring al contenuto di una colonna specifica, è possibile utilizzare il dato nodo, come nel codice di esempio.

0

Per modificare il colore del testo in una riga specifica, OnDrawText evento può essere utilizzato in cui si cambia corrente TargetCanvas.Font.Color proprietà.

Il codice sotto funziona con Delphi XE 1 e TreeView virtuale 5.5.2 (http://virtual-treeview.googlecode.com/svn/branches/V5_stable/)

type 
    TFileVirtualNode = packed record 
    filePath: String; 
    exists: Boolean; 
    end; 

    PTFileVirtualNode = ^TFileVirtualNode ; 

procedure TForm.TVirtualStringTree_OnDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; 
    Column: TColumnIndex; const Text: UnicodeString; const CellRect: TRect; var DefaultDraw: Boolean); 
var 
    pileVirtualNode: PTFileVirtualNode; 
begin 
    pileVirtualNode:= Sender.GetNodeData(Node); 

    if not pileVirtualNode^.exists then 
    begin 
    TargetCanvas.Font.Color := clGrayText; 
    end; 
end; 
Problemi correlati