Как лучше всего отобразить значок наложения поверх базового значка узла Delphi TVirtualTreeView - PullRequest
5 голосов
/ 03 июня 2011

Я преобразую древовидное представление из стандартного 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;

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

1 Ответ

9 голосов
/ 03 июня 2011

Вы получаете Kind: TVTImageKind параметр в вашем OnGetImageIndex обработчике событий.Проверьте его на ikOverlay и просто верните соответствующий индекс изображения.

...