Можно ли изменить цвет строки в виртуальном дереве строк? - PullRequest
12 голосов
/ 23 июля 2010

Я хочу изменить цвет текста в определенной строке дерева виртуальных строк.это возможно?

Ответы [ 3 ]

10 голосов
/ 23 июля 2010

Используйте событие 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;

Это изменит фон в каждой строке (если строки находятся на одном уровне).

7 голосов
/ 11 июля 2012

Чтобы управлять цветом текста в определенной строке, используйте событие OnPaintText и установите 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;

Обратите внимание, что этот метод вызывается для каждой ячейки в TreeView. Указатель узла одинаков в каждой ячейке строки. Поэтому, если у вас есть несколько столбцов и вы хотите установить цвет для всей строки в соответствии с содержимым определенного столбца, вы можете использовать данный узел, как в примере кода.

0 голосов
/ 30 декабря 2014

Чтобы изменить цвет текста в определенной строке, можно использовать событие OnDrawText , в котором вы меняете текущее свойство TargetCanvas.Font.Color .

Приведенный ниже код работает с Delphi XE 1 и виртуальным представлением дерева 5.5.2 (http://virtual -treeview.googlecode.com / svn / branch / 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;
...