Обработка флажков в VirtualTrees.pas версии 5.0.0 не работает, если включен toThemeAware. Узлы csUncheckedNormal отображаются как отмеченные + горячие.
Чтобы правильно нарисовать неотмеченный тематический флажок с помощью DrawElement, запись Details должна быть: Element = teButton, Part = 3 и State = 5. Однако VirtualTrees.pas в конечном итоге вызывает DrawElement с State = 1, когда для узла установлено значение csUncheckedNormal. .
Кажется, что в VirtualTrees объявлено много косвенных и дополнительных констант, поэтому я не уверен, как лучше всего это исправить. Приветствуются идеи...
(Даже минимальный код для вывода TVirtualStringTree на экран и заполнения некоторыми данными слишком длинный для размещения здесь. Помимо основ, все, что необходимо для воспроизведения этого, — это включить toCheckSupport в TreeOptions.MiscOptions и установить Node.CheckType : = ctTriStateCheckBox в обратном вызове InitNode.)
VirtualStringTree1.AddChild(nil).CheckType := ctTriStateCheckBox;
, запустил приложение из моего Delphi 2009 на Windows 7 и посмотрел у флажков вплотную; они были не в горячем состоянии. Итак, я вернулся сюда, чтобы написать этот комментарий, спросить вас, включены ли стили VCL (прежде чем заглянуть в код), проголосовал за ваш вопрос и нажал клавишу ENTER :-) - person TLama   schedule 18.04.2012Node.CheckState
равноcsUncheckedNormal
, но он также отображает проверенное горячее состояние, что, безусловно, неправильно. Я посмотрю на это, но это требует времени, и я должен работать над чем-то сейчас. - person TLama   schedule 19.04.2012