13

仮想文字列ツリーの特定の行のテキストの色を変更したいと考えています。出来ますか?

4

3 に答える 3

11

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;

これにより、1 行おきに背景が変更されます (行が同じレベルにある場合)。

于 2010-07-23T02:24:46.430 に答える
7

特定の行のテキストの色を制御するには、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 内のすべてのセルに対して呼び出されることに注意してください。Node ポインターは、行の各セルで同じです。したがって、複数の列があり、特定の列の内容に従って行全体の色を設定したい場合は、コード例のように指定された Node を使用できます。

于 2012-07-11T10:18:06.670 に答える