Как лучше всего визуализировать значок наложения поверх основного значка узла Delphi TVirtualTreeView

Я конвертирую древовидное представление из стандартного TTreeView для использования TVirtualStringTree. Моя последняя задача - реализовать функцию, в которой мне нужно нарисовать индикатор состояния «прошел / не прошел» поверх значка известного узла. С TTreeView я использовал:

  var
   R : TRect;
  begin
    R := Node.DisplayRect( True );
    StatusIconList.Draw( TreeView1.Canvas,
                         R.Left - StatusIconList.Width - 14,
                         R.Top,
                         3 {MyOverlayImageIndex} );

Результатом является красный крестик над основным значком, как показано ниже:

enter image description here

С 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;

Это лучшее решение? Есть ли лучший способ получить верхний / левый угол основного значка без ужасного вызова уровня узла?

5
задан Ian Boyd 18 July 2018 в 21:01
поделиться