Как нарисовать узлы встроенные в TvirualTree?

Я в настоящее время рисую некоторые изображения внутри Tvirtualdrawtree используя перед краской. Вот мой код для рисования

procedure TForm2.VDTAniBeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
  Data: PAnimeData;
  NewRect: TRect;
  R: TRect;
begin
//
  if not Assigned(Node) then
  begin
    exit;
  end;

  Data := VDTAni.GetNodeData(Node);

  case Column of
    0, 1 ,2, 3, 4, 5, 6, 7:
  begin
  TargetCanvas.Brush.Style := bsClear;
  TargetCanvas.FillRect(CellRect);
  NewRect := ContentRect;
  NewRect.Left := NewRect.Left;
  NewRect.Width := 55;
  NewRect.Height := 55;
  NewRect.Top := NewRect.Top + 2;
  NewRect.Bottom := NewRect.Bottom;

  if Column = 0 then
  begin

    with NewRect do
    begin
      TargetCanvas.StretchDraw( NewRect, Data.FObject.anmigraphic);
    end;

  end;
end;

Рисованные изображения располагаются вертикально. Я хочу показать их по горизонтали, например, как на следующем рисунке

введите описание изображения здесь

Вот структура данных

type
  TAnmiClass = class
  private
    Fanmigraphic : TGifImage;

  public
    property anmigraphic: TGifImage read Fanmigraphic write Fanmigraphic;

  public
    constructor Create;
    destructor Destroy; override;
  end;

type
  PAnimeData = ^TAnimeData;

  TAnimeData = record
    FObject: TAnmiClass;
  end;

1 ответ

Решение

Вы сказали:

нарисованные изображения идут вертикально

Это потому, что вы рисуете, только если столбец 0:

if Column = 0 then
begin
  with NewRect do
  begin
    TargetCanvas.StretchDraw( NewRect, Data.FObject.anmigraphic);
  end;
end;

Вы не показали структуру Data но я подозреваю, что у вас есть несколько изображений в каждом Data, Это не может быть определено из вашего кода, как вы можете обратиться к различным изображениям, поэтому я показываю эту часть только в виде псевдокода в паре < а также >,

Если вы хотите нарисовать разные изображения в разных столбцах, я предлагаю что-то вроде:

case Column of
  0: TargetCanvas.StretchDraw( NewRect, Data.FObject.anmigraphic);
  1: TargetCanvas.StretchDraw( NewRect, Data.FObject.<reference to second image>);

  7: TargetCanvas.StretchDraw( NewRect, Data.FObject.<reference to eight image>);
end;

вместо кода, показанного выше.

Другие вопросы по тегам