Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Наложение индикатора статуса на узлы TVirtualStringTree без рекурсивных вызовов уровня узла"

Delphi , Синтаксис , Деревья

В процессе перехода от стандартного TTreeView к TVirtualStringTree может возникнуть необходимость наложить индикатор статуса (например, значок успеха или провала) поверх известного значка узла. В данной статье мы рассмотрим, как это можно сделать без рекурсивных вызовов уровня узла.

Используя TTreeView, можно было легко наложить значок статуса на узел с помощью следующего кода:

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

Результат: красный крест поверх базового значка, как показано на рисунке:

Результат наложения значка статуса на TTreeView

При переходе к 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;

Вопрос: есть ли лучшее решение для получения верхнего/левого угла базового значка без вызова уровня узла?

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

Комментарии: После добавления нескольких изображений в список изображений (например, индексы 8 и 9) и настройки OnGetImageIndex для возврата 0 или 1 при Kind = ikOverlay, значки статуса не отображаются. Возможно, нужно установить другой переключатель?

Ответ: Использование параметра Kind: TVTImageKind в обработчике события OnGetImageIndex – это правильный подход. После настройки OnGetImageIndex для возврата соответствующего индекса изображения при Kind = ikOverlay, значки статуса должны отображаться без дополнительных настроек.

Пример кода:

procedure TForm1.VirtualTree1GetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Kind: TVTImageKind; var Index: TImageIndex);
begin
  if Kind = ikOverlay then
    begin
      if Node.Data is TMyNode then
        begin
          with TMyNode(Node.Data) do
            case Status of
              stPassed: Index := 0;
              stFailed: Index := 1;
            end;
        end;
    end
  else
    inherited;
end;

В данном примере TMyNode – это пользовательский тип данных узла, а Status – это поле, которое содержит текущий статус узла. Если Kind = ikOverlay, то в зависимости от статуса узла возвращается соответствующий индекс изображения. Если Kind не равен ikOverlay, то метод наследования вызывает родительский обработчик OnGetImageIndex.

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

Создано по материалам из источника по ссылке.

В статье рассматривается вопрос наложения индикатора статуса на узлы TVirtualStringTree без рекурсивных вызовов уровня узла, используя параметр Kind: TVTImageKind в обработчике события OnGetImageIndex.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Деревья ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:36:23/0.005497932434082/1