在我被指示开发的一个旧项目中,有一个类型为TScrollBox的字段。
FScroll : TScrollBox;
为了能够处理导航按钮的事件,该类必须包含WM_GETDLGCODE消息处理程序。所以我创建了一个新类:
TScrollBoxArrowBtn = class(TScrollBox)
protected
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
end;
履行
procedure TScrollBoxArrowBtn.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result := DLGC_WANTARROWS;
end;
并用TScrollBoxArrowBtn替换了TScrollBox类型。
FScroll : TScrollBoxArrowBtn;
组件开始响应按下箭头按钮。但是copy,delete,SelectAll方法停止了工作。发生这种情况是因为之前的开发人员添加了这样的验证方法:
"VariableName".ClassType = TScrollBox
我替换它们进行验证:
"VariableName" is TScrollBox
在这种编辑方法开始工作之后。但我不确定这样的测试是否会在项目的其他地方应用。所以我决定离开
FScroll : TScrollBox;
并使TScrollBoxArrowBtn成为一个帮助类:
TScrollBoxArrowBtn = class helper for TScrollBox
protected
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
end;
不幸的是这种方法不起作用。像"VariableName".ClassType = TScrollBox
这样的验证开始完美,但项目停止响应事件箭头按钮。我做错了什么?
我确信我的IDE版本支持帮助方法。