作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个 TFrame
后代类,如下所示:
TCustomHistoryFrame = class(TFrame)
tbMainFunction: TToolBar;
// there's more, of course, but that is irrelevant to the question
end;
我注意到,当我将此框架的 Enabled
属性设置为 False
时,其组件 tbMainFunction
不会(视觉上)禁用.
我的第一个想法是重写虚拟方法TControl.SetEnabled
。查看其实现,我发现当 的值实际不同时,它会执行控制消息 CM_ENABLEDCHANGED
。
我不确定如何以正确的方式将框架的 Enabled
状态应用到工具栏。
常见的做法是什么?由于这个问题主要是基于意见的,所以让我重新表述一下:
重写 SetEnabled
或处理 CM_ENABLEDCHANGED
有哪些优点和缺点?
事情,我想到了自己:
SetEnabled
:
CM_ENABLEDCHANGED
:
TControl
和 TWinControl
中(至少)有此消息的实现。如果我在类 TCustomHistoryFrame
中处理消息,它们还会被执行吗?最佳答案
处理CM_ENABLEDCHANGED
是正确的解决方案。此类 CM_...
消息专门设计用于允许后代类对基类中声明的属性的更改使用react。
例如:
TCustomHistoryFrame = class(TFrame)
tbMainFunction: TToolBar;
private
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
end;
procedure TCustomHistoryFrame.CMEnabledChanged(var Message: TMessage);
begin
inherited;
tbMainFunction.Enabled := Enabled;
end;
或者:
TCustomHistoryFrame = class(TFrame)
tbMainFunction: TToolBar;
protected
procedure WndProc(var Message: TMessage); override;
end;
procedure TCustomHistoryFrame.WndProc(var Message: TMessage);
begin
inherited;
if Message.Msg = CM_ENABLEDCHANGED then
tbMainFunction.Enabled := Enabled;
end;
关于delphi - 覆盖 SetEnabled 与处理消息 CM_ENABLEDCHANGED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43863099/
有一个 TFrame 后代类,如下所示: TCustomHistoryFrame = class(TFrame) tbMainFunction: TToolBar; // there's mo
我是一名优秀的程序员,十分优秀!