2010-07-23 16 views

Respuesta

8

utilizar el 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; 

esto va a cambiar el fondo en vtas (si las filas están en el mismo nivel).

+0

¿Qué pasa si no quiero color en absoluto? como eliminar el color de fondo me cansé 'TargetCanvas.Brush.Style: = bsClear;' pero fallar – MartinLoanel

+1

@MartinLoanel Tendrá que hacer mucho más para que todo el control sea transparente. Hazlo como una pregunta diferente y es posible que obtengas algunas respuestas o que alguien ya lo haya hecho. – Nat

+0

ya encuentra una manera – MartinLoanel

7

Para controlar el color del texto en una fila específica, use el evento OnPaintText y establezca 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; 

Tenga en cuenta que se utiliza este método para cada celda del TreeView. El puntero de nodo es el mismo en cada celda de una fila. Por lo tanto, si tiene varias columnas y desea establecer el color de una fila completa según el contenido de una columna específica, puede usar el nodo dado como en el código de ejemplo.

0

Para cambiar el color del texto en una fila específica, OnDrawText caso se puede utilizar en la que se cambia la corriente TargetCanvas.Font.Color propiedad.

El siguiente código funciona con Delphi XE 1 y vista de árbol virtual 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; 
Cuestiones relacionadas