Delphi 系统[22]关键字和保留字 read、write、default、nodefault、readonly、writeonly、stored、message - 定义属性的参数
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.
创建时间:2021.08.12 更新时间: