delphi 事件和属性的绑定

微笑 PS:工作需要,零学起delphi,以前的基础仅仅是C和嵌入式方面的皮毛   (不知题目是否合适,包涵)   

  下面是TWindowState 类的定义:

  TWindowState = (wsNormal, wsMinimized, wsMaximized);

  TScrollingWinControl = class(TWinControl)
  private
    FHorzScrollBar: TControlScrollBar;
    FVertScrollBar: TControlScrollBar;
    FAutoScroll: Boolean;
    FAutoRangeCount: Integer;
    FUpdatingScrollBars: Boolean;
    procedure CalcAutoRange;
    procedure ScaleScrollBars(M, D: Integer);
    procedure SetAutoScroll(Value: Boolean);
    procedure SetHorzScrollBar(Value: TControlScrollBar);
    procedure SetVertScrollBar(Value: TControlScrollBar);
    procedure UpdateScrollBars;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure CMBiDiModeChanged(var Message: TMessage); message CM_BIDIMODECHANGED;
  protected
    procedure AdjustClientRect(var Rect: TRect); override;
    procedure AlignControls(AControl: TControl; var ARect: TRect); override;
    function AutoScrollEnabled: Boolean; virtual;
    procedure AutoScrollInView(AControl: TControl); virtual;
    procedure ChangeScale(M, D: Integer); override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    procedure DoFlipChildren; override;
    property AutoScroll: Boolean read FAutoScroll write SetAutoScroll default True;
    procedure Resizing(State: TWindowState); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure DisableAutoRange;
    procedure EnableAutoRange;
    procedure ScrollInView(AControl: TControl);
  published
//此处所定义的就是 delphi 中object inspector 中的对象属性所显示的内容  TControlScrollBar类型, 读取FHorzScrollBar 通过SetHorzScrollBar写入
    property HorzScrollBar: TControlScrollBar read FHorzScrollBar write SetHorzScrollBar;
    property VertScrollBar: TControlScrollBar read FVertScrollBar write SetVertScrollBar;
  end;

 
  上面是系统定义的,比较枯燥,下面是自己写的代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    edt1: TEdit;
    procedure FormCreate(Sender: TObject);    //窗体创建事件
    procedure btn1Click(Sender: TObject);     //butten 点击事件
  private
  public
    //自己写的过程 显示位置
    procedure OnTestPostionChange(Sender: TObject; Positon: Integer);
  end;

   // 类似于函数指针 of object 它必须指向某个对象的方法(即成员函数).
  TTestEvent = procedure (Sender: TObject; Positon: Integer) of Object;

  TTestClass = class(TObject)
  private
    FPosition: Integer;      // Position 属性用的
    FOnPositionChange: TTestEvent; // OnPositionChange 属性
    procedure SetPosition(const Value: Integer);
  protected
    procedure DoPositonChange;
   // procedure doaaa: dynamic;
  public
    //属性 position 读取FPosition 写到SetPosition   integer 类型
    property Position: Integer read FPosition write SetPosition;
    //属性 onPositionChange  对象过程函数指针类型 读取FOnposition  写入 FOnPositionChange
    property OnPositionChange: TTestEvent read FOnPositionChange write FOnPositionChange;
  end;

var
  Form1: TForm1;
  test1: TTestClass;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  test1 := TTestClass.Create;
  test1.OnPositionChange := OnTestPostionChange;
end;

{ TTestClass }

procedure TTestClass.DoPositonChange;
begin
  if Assigned(FOnPositionChange) then
    FOnPositionChange(Self,FPosition);
end;


procedure TTestClass.SetPosition(const Value: Integer);
begin
  if Value <> FPosition then
  begin
    FPosition := Value;
    DoPositonChange;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  test1.Position := StrToInt(edt1.Text);
end;

procedure TForm1.OnTestPostionChange(Sender: TObject; Positon: Integer);
begin
  showmessage('Postion = '+IntToStr(Positon));
end;

end.


比较简单,也没什么好说的(当时开始接触的是时间感觉挺麻烦,现在也忘记麻烦在哪里了)。。

执行过程就是:窗体创建(给OnPositionChange赋值)--点击button(读取edt1中的值)---之后调用setposition(也许这就是绑定好的了吧)----DOPositionchange----执行FOnPositionChange(也就是OnTestPostionChange)。。。

 

        就这么点了。。。。

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值