Проблема, с которой вы столкнулись, заключается в том, что при использовании компонента VirtualTreeView в среде разработки C++ Builder на операционной системе Windows 7 происходит наложение иконок. Это происходит несмотря на то, что код программы идентичен для Windows XP, где проблема отсутствует. В вашем случае используется TVirtualStringTree с назначением индекса изображения через событие OnGetImageIndex, и TImageList с иконками размером 16x16 в качестве свойства Images.
Диагностика проблемы
Проблема проявляется в виде наложения иконки с индексом 0 (серый треугольник) поверх другой иконки (папка с индексом 5). Вы используете последнюю версию VirtualTreeView из репозитория, но это не помогает решить проблему.
Анализ кода
В комментариях к вашему вопросу было отмечено, что в обработчике события OnGetImageIndex необходимо учитывать параметр Kind: TVTImageKind. Возможно, вы не учитываете значение ikOverlay, что может привести к наложению изображений.
Пример кода
procedure TForm.OnGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; out ImageIndex: Integer);
begin
if (Kind = ikNormal) or (Kind = ikSelected) then
// Здесь ваш код для назначения ImageIndex
ImageIndex := ваш_индекс; // Например, ImageIndex := 5;
else
ImageIndex := -1; // Не назначать индекс изображения
end;
Подтвержденное решение
Убедитесь, что в обработчике события OnGetImageIndex вы проверяете значение параметра Kind и назначаете ImageIndex только для ikNormal и ikSelected. Если Kind имеет значение ikOverlay, необходимо установить ImageIndex в -1, чтобы избежать наложения изображений.
Заключение
Проверка параметра Kind в обработчике события OnGetImageIndex является ключевым моментом для устранения проблемы наложения иконок в VirtualTreeView на Windows 7. Убедитесь, что ваш код соответствует рекомендациям, и проблема должна быть решена.
Приведенное выше решение основывается на анализе вашего вопроса и комментариев. Важно внимательно отнестись к параметру Kind и корректно обрабатывать различные типы изображений, чтобы избежать нежелательного наложения иконок.
Проблема связана с наложением иконок в компоненте VirtualTreeView в среде разработки C++ Builder на Windows 7, что происходит из-за неправильной обработки параметра Kind в событии OnGetImageIndex.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS