グラフィックスをノード イメージとして描画する必要があります。OnGetImageIndex イベントで ImageList から画像を描画するように、TIcon、TImage、TBitmap などの単一のソースから画像を描画します。
私の状況では、すべてのノードに独自のアイコンと UserData レコード内の場所があります。
これらのアイコンをノードに描画するにはどうすればよいですか?
ここでこのコードを見つけて、自分の状況に合わせて調整しようとしました:
procedure TForm10.Button1Click(Sender: TObject);
var
Node: PVirtualNode;
begin
VirtualStringTree1.AddChild(nil);
Node := VirtualStringTree1.AddChild(nil);
VirtualStringTree1.AddChild(Node);
Node := VirtualStringTree1.AddChild(Node);
VirtualStringTree1.AddChild(Node);
VirtualStringTree1.AddChild(Node);
VirtualStringTree1.AddChild(Node);
end;
procedure TForm10.VirtualStringTree1AfterItemPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
var
rImage: TRect;
OffsetLeft: Integer;
Icon: TIcon;
begin
rImage := ItemRect;
Icon := TIcon.Create;
Icon.LoadFromFile('TestIcon_16.ico');
with TVirtualStringTree(Sender) do
begin
if (toShowRoot in TreeOptions.PaintOptions) then
OffsetLeft := Indent * (GetNodeLevel(Node) + 1)
else
OffsetLeft := Indent * GetNodeLevel(Node);
Inc(rImage.Left, Margin + OffsetLeft);
Inc(rImage.Top, (NodeHeight[Node] - Icon.Height) div 2);
rImage.Right := rImage.Left + Icon.Width;
rImage.Bottom := rImage.Top + Icon.Height;
end;
DrawIcon(TargetCanvas.Handle, rImage.Left, rImage.Top, Icon.Handle);
end;
ボタンをクリックすると、次のことがわかります。
なぜそれが起こるのですか?アイコンサイズ 100% - 16 x 16 ピクセル。
テキストの描画に関する問題はどこで解決できますか?
私は何を間違っていますか?