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

Решение проблемы отображения отключенных иконок в TVirtualStringTree

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

TVirtualStringTree в Delphi не имеет встроенного свойства DisabledIcon или чего-то подобного, которое могло бы отображать иконки в отключенном состоянии. Тем не менее, вы можете достичь желаемого результата, используя соответствующий обработчик для события GetImageIndex. В обработчике этого события определите, отключено ли узел или нет, и используйте этот тест в качестве дискриминатора для вычисления индекса изображения.

В своем списке изображений вам понадобятся нормальные версии глифов и отключенные версии. VirtualTree не создаст отключенные версии для вас, но это тривиальная задача скопировать глиф и оттенять его серым цветом.

Если вам нужен демонстрационный код, либо для обработчика события GetImageIndex, либо для оттенения серым цветом, сообщите мне.

Для отключенных икон Windows имеет API: https://stackoverflow.com/questions/6003018/make-disabled-menu-and-toolbar-images-look-better#answer-6003256

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

function GetDisabledIcon(hIcon: HICON): HICON;
var
  hBitmap: HBITMAP;
  hdc: HDC;
  hdcMem: HDC;
  bmpInfo: TBitmapInfo;
  pBits: PByte;
  x, y, i: Integer;
  r, g, b: Byte;
begin
  hdc := GetDC(0);
  hdcMem := CreateCompatibleDC(hdc);
  hBitmap := CopyIcon(hIcon).hBitmap;
  GetObject(hBitmap, SizeOf(bmpInfo), @bmpInfo);
  pBits := GetBitmapBits(hBitmap, bmpInfo.bmiHeader.biSizeImage);
  for y := 0 to bmpInfo.bmiHeader.biHeight - 1 do
    for x := 0 to bmpInfo.bmiHeader.biWidth - 1 do
    begin
      i := y * bmpInfo.bmiHeader.biWidth + x;
      r := pBits[i];
      g := pBits[i + 1];
      b := pBits[i + 2];
      SetPixel(hdcMem, x, y, RGB(r * 0.7, g * 0.7, b * 0.7));
    end;
  ReleaseDC(0, hdc);
  hIcon := CreateIconIndirect(@bmpInfo);
  DeleteObject(hBitmap);
  DeleteDC(hdcMem);
  DeleteObject(GetStockObject(DEFAULT_GUI_FONT));
  Result := hIcon;
end;

Этот код копирует битмап иконки, затем итерирует по каждому пикселю и оттеняет его серым цветом, умножая каждый канал RGB на 0,7. В результате получается отключенная версия иконки.

Вы можете использовать этот код в своем обработчике GetImageIndex, чтобы получить отключенную версию иконки, если узел отключен.

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

В Delphi, TVirtualStringTree не имеет встроенного свойства DisabledIcon, но можно использовать обработчик события GetImageIndex для отображения иконок в отключенном состоянии, создавая отключенные версии глифов.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:06:06/0.0052499771118164/1