1

Tvirtualdrawtree現在、ペイント前に on を使用して内部にいくつかの画像を描画しています。これが私の描画コードです

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;
4

1 に答える 1

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;

上記のコードの代わりに。

于 2016-08-07T08:33:53.193 に答える