属性改变导致行为改变-----是怎么实现的
TButton的一个定义语句:
property Cancel: Boolean read FCancel write FCancel default False;
帮忙解答下:
button1.Cancel := True;
这句代码是怎样来改变FCancel的,FCancel变了又是如何改变button的响应消息的。
源码里没看到Cancel和FCancel之间的相互赋值啊。
[解决办法]
delphi内部机制:
定义Cancel:boolean read FCancel write FCancel时就隐式说明当Cancel改变时自动传入FCancel
[解决办法]
对象的属性和 成员变量或成员方法 关联
[解决办法]
TCMDialogKey = TWMKey;
TWMKey = packed record
Msg: Cardinal;
CharCode: Word;
Unused: Word;
KeyData: Longint;
Result: Longint;
end;
procedure TButton.CMDialogKey(var Message: TCMDialogKey);
begin
with Message do
if (((CharCode = VK_RETURN) and FActive) or
((CharCode = VK_ESCAPE) and FCancel)) and
(KeyDataToShiftState(Message.KeyData) = []) and CanFocus then
begin
Click;
Result := 1;
end else
inherited;
end;