2010-07-23 9 views

Odpowiedz

8

Użyj zdarzenie 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; 

To będzie zmienić tło na co drugim rzędzie (jeśli wiersze są na tym samym poziomie).

+0

co, jeśli w ogóle nie chcę koloru? jak usunąć kolor tła z powrotem i zmęczony 'TargetCanvas.Brush.Style: = bsClear;' ale nie powiodło się – MartinLoanel

+1

@MartinLoanel Będziesz musiał zrobić dużo więcej, aby cała kontrola była przejrzysta. Zadaj to jako inne pytanie i możesz uzyskać odpowiedzi lub ktoś już to zrobił. – Nat

+0

już znaleźć sposób – MartinLoanel

7

Aby kontrolować kolor tekstu w określonym wierszu, należy użyć zdarzenia OnPaintText i ustawić 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; 

Należy zauważyć, że ta metoda jest wywoływana dla każdej komórki w TreeView. Wskaźnik Node jest taki sam w każdej komórce w rzędzie. Jeśli więc masz wiele kolumn i chcesz ustawić kolor dla całego wiersza zgodnego z treścią konkretnej kolumny, możesz użyć danego węzła, tak jak w przykładowym kodzie.

0

Aby zmienić kolor tekstu w określonym wierszu OnDrawText zdarzenie może być stosowany, w którym zmienia bieżący TargetCanvas.Font.Color nieruchomości.

Poniższy kod działa z Delphi XE 1 i wirtualnych katalogów 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; 
Powiązane problemy