delphi - 如何在不选择所有节点的情况下禁用 TreeView 控件?
问题描述
我不知道这是一个错误还是什么,但如果我尝试禁用一个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”(我没有调查),所以代码测试树视图是否启用。
推荐阅读
- python - Python(Cartopy):如何解决“多边形对象错误”
- linq - 使用通用 lambda 表达式过滤 IQueryable
- vb.net - 我收到此错误(在 FileName.exe 中发生了“System.IndexOutOfRangeException”类型的未处理异常)-它由写入行函数发生
- javascript - Chrome 不再对画布应用抗锯齿
- python - 需要创建一个 Djano 模型,它将提供自动为每个 django 模型添加自定义模型属性的选项
- java - bean 元素不接受 xml 中的限定符元素
- typescript - 在不知道函数的具体参数的情况下返回函数的泛型(泛型)
- python - Python 未解决的数学问题 - 找不到正确的答案
- typescript - 什么是打字稿编译器默认库值?
- ios - 呈现后更新 UIViewController 框架