仮想ツリー コンポーネントのノードごとに 2 つの異なるアイコンを格納およびロードする方法を知る必要があります。2 つのアイコンのサイズも異なります。
ありがとう
仮想ツリー コンポーネントのノードごとに 2 つの異なるアイコンを格納およびロードする方法を知る必要があります。2 つのアイコンのサイズも異なります。
ありがとう
全体を所有者が描画するつもりでない限り、私が知っているコントロールは異種のアイコンサイズをサポートしていません.Virtual Treeviewが含まれています。特定のビューのすべてのアイコンは 1 つのTImageList
コントロールから取得され、一度TImageList
に 1 つの画像サイズのみをサポートします。
画像サイズを大きい方のアイコンのサイズにしてから、小さい方のアイコンを大きい方のアイコンの上にペイントすると、たまたま透明な境界線がパディングされます。
一度に 1 つのアイコン サイズのみをサポートする必要がある場合は、2 つの個別のTImageList
コントロールを維持できます。サイズを切り替えたい場合は、ツリー コントロールのImageList
プロパティを再割り当てします。DefaultNodeHeight
また、既存のすべてのノードの高さとともに、プロパティを調整する必要がある場合もあります。
これは、TPngImageList を使用して機能します。この実装は標準の TImageList で動作するはずですが、png 画像を使用する方が適切です。
この例では、フォーム クラス名は「TfPrj」、TvirtualStringTree インスタンス名は「vPrj」、TMyDataRecord はデータを取得するレコード構造です。
このようなカスタム図面をコードで管理します。
var
p: TMyDataRecord;
const
riskImagesSize=64;
riskImagesPadding=2;
procedure FindP(Node: PVirtualNode);
begin
// This procedure fill in the "p" record with your tree data for the node.
end;
procedure TfPrj.vPrjMeasureItem(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; var NodeHeight: Integer);
begin
FindP(Node);
if p<>nil then
if p.LargeImages then
NodeHeight := riskImagesSize+riskImagesPadding*2;
end;
procedure TfPrj.vPrjBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
if Column=0 then begin
FindP(Node);
if p<>nil then begin
if p.LargeImages then begin
Inc(ContentRect.Left,riskImagesSize);
end;
end;
end;
procedure TfPrj.vPrjDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; Column: TColumnIndex; const Text: string;
const CellRect: TRect; var DefaultDraw: Boolean);
var
i: integer;
s: string;
begin
FindP(Node);
if Column=0 then
if p<>nil then
if p.LargeImages then begin
iLarge.Draw(TargetCanvas,CellRect.Left-riskImagesSize-riskImagesPadding*2,CellRect.Top+riskImagesPadding,p.LargeImagesIndex);
end;
end;
procedure TfPrj.vPrjGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
var ImageIndex: Integer);
begin
if Column<>0 then
Exit;
FindP(Node);
if p.LargeImages then
ImageIndex=-1
else
// Assign the image index for standard TPngImageList
end;