1、定义:
- read :用于标识属性读取时所使用的成员或方法。
- write :用于标识属性写入时所使用的成员或方法。
- default :指示属性的默认值,或指示一个属性为类的默认属性。 只有有序类型的属性才允许默认值的存在, 否则必须在构造函数中初始化属性值。
- nodefault :指示一个属性不允许有默认值,这通常用在继承中。
- readonly :指示一个属性为只读。 当readonly 设为 True 时, 不允许用户修改属性, 只能通过其他对象来操作
- writeonly :指示一个属性为只写。当writeonly 设为 true 时,不允许用户读取属性,只能通过其他对象来操作
- stored :指示一个属性的值是否能被保留,若指定了True,则允许对属性值进行赋值撤销的操作。
- message :用于声明消息方法。带有 message 的方法必须指出接收的消息类型,并通过引用将消息传入方法中,以便进行处理。用户可以自定义消息,自定义消息也能够被 message 接收,并引发事件。
2、示例:
{ 属性的读取 read } type TMyObject = class(TObject) private FValue: Integer; published property Value: Integer read FValue; { 表明 Value 属性从FValue 成员上读出值 } end; ---------------------------------------------------------------------------------------- { 属性的写入write } type TMyObject = class(TObject) private FValue: Integer; published property Value: Integer write FValue; { 表明 Value 属性的值写入到 FValue 成员上 } end; --------------------------------------------------------------------------------------- { 默认值和默认属性 default} type TMyObject = class(TObject) private FAuto: Boolean; FCount: Integer; FNameList: TStrings; public constructor Create; { 属性默认值 default True、default 0 } property Auto: Boolean read FAuto write FAuto default True; property Count: Integer read FCount write FCount default 0; { 默认属性 default } property Names[Index: Integer]: TStrings read FNameList write FNameList default; end; constructor TMyObject.Create; begin inherited; FNameList := TStrings.Create; { 分配对象资源 } FAuto := True; { 设置属性默认值 } end; ---------------------------------------------------------------------------------------- { 去掉默认值 nodefault} type TMyObjA = class private FValue: Integer; published property Value: Integer read FValue write FValue default 0; end; TMyObjB = class(TMyObjA) published property Value: Integer read FValue write FValue nodefault; end; { 由上例可知, TMyObjA 中的 Value 有默认值 0,TMyObjB 继承了 TMyObjA,所以也继承 了其默认值, 在此用 NoDefault 去掉默认值。 } ---------------------------------------------------------------------------------------- { 只读属性 } property ReadOnly; ---------------------------------------------------------------------------------------- { 只写属性 } property WriteOnly; ---------------------------------------------------------------------------------------- { 保留属性值 stored} type TComponent = class private FName: TComponentName; published property Name: TComponentName read FName write SetName stored False; end; ---------------------------------------------------------------------------------------- { 声明消息方法 message} unit Form1Unit; interface uses Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure Refresh(var Msg: TMessage); message WM_SIZE; public { Public declarations } end; var Form1: TForm1; implementation {R *.dfm} { 此方法捕捉窗口尺寸被改变的消息 } procedure TForm1.Refresh(var Msg: TMessage); begin { 先将窗口的尺寸显示在标题栏中 } Caption := IntToStr(Width) + ' - ' + IntToStr(Height); { 再调用默认消息处理函数,重绘窗口 } inherited; end; { 随机调整窗口的大小 } procedure TForm1.Button1Click(Sender: TObject); var Size: Integer; begin { 先将按钮自身移到窗口左上角,以免窗口缩小后被遮挡 } (Sender as TButton).Left := 0; (Sender as TButton).Top := 0; { 获取一个随机数,可正可负 } Randomize; Size := Random(100) - 50; { 设置窗口的新大小 } Width := Width + Size; Height := Height + Size; { 当窗口大小改变后,就会触发 WM_SIZE 消息,从而调用我们定义的TForm1.Refresh } end; end.
转载请注明:落伍老站长 » Delphi 系统[22]关键字和保留字 read、write、default、nodefault、readonly、writeonly、stored、message – 定义属性的参数