Delphi控件求解 如何不利用继承机制,给现有的控件增加一个属性比如给TEdit增加一个XXX:String这样的属性,但是不要从TEdit继承下来一个类的这种方法公司的一道面试题,同为Delphi开发人员,能力不够且特别好奇,故上来请大神们赐教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能继承,那就改源码1.在private下面写一个变量FXXX:String;(没有private就添加进去)2.在private下写一个方法procedure SetXXX(const Value: string);再在TEdit类中实现此方法procedure TEdit.SetXXX(const Value: string);begin FXXX:=Value;end;3.在protected下面写上此属性的读取方法(read,write) property XXX: String read FXXX write SetXXX;4.在published把属性XXX公布出来:property XXX; 现在很多编程语言都提供一个叫帮助类(class helper)的机制,delphi的新版里面也有,举例如下:type TMyClass = class procedure MyProc; function MyFunc: Integer; end; ... procedure TMyClass.MyProc; var X: Integer; begin X := MyFunc; end; function TMyClass.MyFunc: Integer; begin ... end; ... type TMyClassHelper = class helper for TMyClass procedure HelloWorld; function MyFunc: Integer; end; ... procedure TMyClassHelper.HelloWorld; begin Writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper end; function TMyClassHelper.MyFunc: Integer; begin ... end; ... var X: TMyClass; begin X := TMyClass.Create; X.MyProc; // Calls TMyClass.MyProc X.HelloWorld; // Calls TMyClassHelper.HelloWorld X.MyFunc; // Calls TMyClassHelper.MyFunc 重写文本框,一般是从TCustomEdit继承。那什么直接从TEdit继承的只是小打小闹做不出多少名堂。 一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string); 3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX; 一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string); 3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX; CSDN学习史(第一问) ※※※※※我就是想散分※※※※※ 问一下,XP系统自己使用的API函数是放在哪个文件里面的啊~ 基础问题,很容易解决~~ 怎样在代码中打开指定的文件,有同源代码在一目录下与不在同一目录下两种!!! 为制笔企业做仓库管理,成品入库时笔按支入库,成品出库时却按盒出库,怎么处理?烦!烦!烦! 哪位老兄帮忙解决,谢谢!很急呀! 各位程序老师,关于打印端口的问题能否给予帮助?? 抽奖程序,求教算法 官方Delphi6中文版的帮助是不是中文的? DELPHI开发,导入数据到数据库时,如何做导入的进度条 delphi read write
再在TEdit类中实现此方法
procedure TEdit.SetXXX(const Value: string);
begin
FXXX:=Value;
end;3.在protected下面写上此属性的读取方法(read,write)
property XXX: String read FXXX write SetXXX;4.在published把属性XXX公布出来:property XXX;
TMyClass = class
procedure MyProc;
function MyFunc: Integer;
end;
...
procedure TMyClass.MyProc;
var X: Integer;
begin
X := MyFunc;
end;
function TMyClass.MyFunc: Integer;
begin
...
end;
...
type
TMyClassHelper = class helper for TMyClass
procedure HelloWorld;
function MyFunc: Integer;
end;
...
procedure TMyClassHelper.HelloWorld;
begin
Writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper
end;
function TMyClassHelper.MyFunc: Integer;
begin
...
end;
...
var
X: TMyClass;
begin
X := TMyClass.Create;
X.MyProc; // Calls TMyClass.MyProc
X.HelloWorld; // Calls TMyClassHelper.HelloWorld
X.MyFunc; // Calls TMyClassHelper.MyFunc
一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string);
3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX;
一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string);
3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX;