TButton的一个定义语句:
property Cancel: Boolean read FCancel write FCancel default False;帮忙解答下:
button1.Cancel := True;
这句代码是怎样来改变FCancel的,FCancel变了又是如何改变button的响应消息的。源码里没看到Cancel和FCancel之间的相互赋值啊。

解决方案 »

  1.   

    delphi内部机制:
    定义Cancel:boolean read FCancel write FCancel时就隐式说明当Cancel改变时自动传入FCancel
      

  2.   

    当然, read和write也可以是一个方法,如:private
      function GetInt: Integer;
      procedure SetInt(const Value: Integer);
    public
      property Int: Integer read GetInt write SetInt;此时,若调用XXX.Int := 1其实就是XXX.SetInt(1);
    若调用A := XXX.Int其实就是A :=XXX.GetInt();
      

  3.   

    这是Delphi独有的属性机制,方便了编程
      

  4.   


     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;