换了一种写法:基于TEdit:初始时设置Text,然后就不许改了,没好用。 ======================== unit Unit2;interfaceuses StdCtrls, Controls, Classes;type TMyEdit = class (TEdit) private FText:string; procedure SetText(s:string); protected procedure CreateParams(var Params: TCreateParams); override; constructor Create(AOwner: TComponent); override; published property Text:string read FText write SetText; end; implementationprocedure TMyEdit.SetText(s: string); begin TEdit(self).Text:=s; FText:=s; end;constructor TMyEdit.Create(AOwner: TComponent); begin inherited; TEdit(self).Text:='asd'; Text:='123123123'; end;procedure TMyEdit.CreateParams(var Params: TCreateParams); begin inherited;// Create(nil);// TEdit(self).Text:='asd'; end;end.================================= unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var edit:TMyEdit; begin edit:=TMyEdit.Create(self); edit.Parent:=self; edit.Left:=0; edit.Top:=0; // edit.Text:='ASDASDASD';end;end.
直接self.Text就可以,继承后是拥有父类属性的
其它Delphi有的语法,有点怪,你的这种方法,不是每次都有效如 type TA = class public procedure A();//不是虚拟方法 end;procedure TA.A(); begin ShowMessage('TA.A()'); end; ... TB = class public procedure A();//抢占(或者是“摭挡”)的父类的实现,请问这里如何访问父类的实现? end;procedure TB.A(); begin ShowMessage('TB.A()'); end;
TTreeView(MyTreeView).StateImages
========================
unit Unit2;interfaceuses
StdCtrls, Controls, Classes;type
TMyEdit = class (TEdit)
private
FText:string; procedure SetText(s:string);
protected
procedure CreateParams(var Params: TCreateParams); override;
constructor Create(AOwner: TComponent); override;
published
property Text:string read FText write SetText;
end;
implementationprocedure TMyEdit.SetText(s: string);
begin
TEdit(self).Text:=s;
FText:=s;
end;constructor TMyEdit.Create(AOwner: TComponent);
begin
inherited;
TEdit(self).Text:='asd';
Text:='123123123';
end;procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
inherited;// Create(nil);// TEdit(self).Text:='asd';
end;end.=================================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
edit:TMyEdit;
begin
edit:=TMyEdit.Create(self);
edit.Parent:=self;
edit.Left:=0;
edit.Top:=0;
// edit.Text:='ASDASDASD';end;end.
type
TA = class
public
procedure A();//不是虚拟方法
end;procedure TA.A();
begin
ShowMessage('TA.A()');
end;
...
TB = class
public
procedure A();//抢占(或者是“摭挡”)的父类的实现,请问这里如何访问父类的实现?
end;procedure TB.A();
begin
ShowMessage('TB.A()');
end;
但TMyEdit在初始化时还要对Text赋初始值。隐藏Text属性可能不太现实,所以只能对外提供一个只读属性,但本身怎么赋初始值?