У меня есть старая Delphi 6 программа с множеством древовидных представлений. Когда древовидная структура теряет фокус, любой выбранный узел перекрашивается в плохо видимый светло-серый. Экспериментируя с использованием CustomDrawItem
, чтобы всегда отображать выбранные узлы как полностью выделенные, даже когда они не сфокусированы (например, списки в той же программе), я попытался сделать следующее:
procedure TMainForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if cdsSelected in State then Sender.Canvas.Brush.Color := clHighlight
end;
Выше все равно закрашивает выделенные узлы светом серый, когда не сфокусирован, так же, как и CustomDrawItem
. Однако использование ColorToRGB()
для изменения системной цветовой константы на цвет RGB следующим образом оставляет узел, окрашенный в цвет подсветки, даже когда древовидная структура не сфокусирована!
procedure TMainForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if cdsSelected in State then Sender.Canvas.Brush.Color := ColorToRGB(clHighlight)
end;
Это делает то, что я хочу, но был неожиданный. Не является ли выбор в последнем случае ошибкой VCL, или не является ли она умышленной? Сохраняют ли новые версии Delphi такое поведение?