我目前正在使用on 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;
答案 0 :(得分: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;
而不是上面显示的代码。