我不知道这是错误还是其他问题,但是如果我尝试禁用TTreeView
控件,则所有节点都被选中(显示为灰色)...可以做任何事情来仅禁用该控件的输入而无需更改选择?当然,并没有真正选择节点,只是在视觉上选择了节点,但这很烦人。
最佳答案
这就是未应用主题时禁用控件的外观。您可以在很少干预项目图纸的情况下对其进行修改:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
begin
if (not TreeView1.Enabled) and
(GetWindowTheme(TreeView1.Handle) = 0) and (Stage = cdPrePaint) then begin
TreeView1.Canvas.Brush.Color := clWindow; // or TreeView1.Color
TreeView1.Canvas.Font.Color := clGrayText;
end;
end;
不幸的是,
State
从未包含“cdsDisabled”或“cdsGrayed”(我没有调查),因此代码测试了是否启用了树 View 。