Как нарисовать узлы встроенные в 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;
вместо кода, показанного выше.