標準の TTreeView から TVirtualStringTree を使用するようにツリー ビューを変換しています。私の最後の課題は、既知のノード アイコンの上に「合格/不合格」ステータス インジケーターを描画する必要がある機能を実装することです。私が使用したTTreeViewで:
var
R : TRect;
begin
R := Node.DisplayRect( True );
StatusIconList.Draw( TreeView1.Canvas,
R.Left - StatusIconList.Width - 14,
R.Top,
3 {MyOverlayImageIndex} );
その結果、以下に示すように、基本アイコンの上に赤い十字が表示されます。
TVirtualStringTree を使用して、より良い方法を見つけるか、必要なオーバーレイ アイコンの位置について、よりよく知られている位置を取得したいと考えました。私がやっている:
procedure DrawFailed;
var
R : TRect;
begin
R := CellRect;
StatusIconList.Draw( TargetCanvas,
R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel( Node ) * 16,
R.Top,
siiFailed );
end;
これが最善の解決策ですか?恐ろしいノードレベルの呼び出しなしで、基本アイコンの左上隅を取得するより良い方法はありますか?