5

標準の 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;

これが最善の解決策ですか?恐ろしいノードレベルの呼び出しなしで、基本アイコンの左上隅を取得するより良い方法はありますか?

4

1 に答える 1

9

イベントハンドラKind: TVTImageKindでパラメータを取得します。OnGetImageIndexそれをチェックしてikOverlay、適切な画像インデックスを返すだけです。

于 2011-06-03T13:43:12.760 に答える