Delphi控件求解

zshsuming 2012-05-21 09:23:55
如何不利用继承机制,给现有的控件增加一个属性
比如
给TEdit增加一个XXX:String这样的属性,但是不要从TEdit继承下来一个类的这种方法

公司的一道面试题,同为Delphi开发人员,能力不够且特别好奇,故上来请大神们赐教
...全文
203 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zshsuming 2012-05-22
  • 打赏
  • 举报
回复
呵呵,今天问过了,题目出的不严谨,谢谢大家的想法
luxuewei5214 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

现在很多编程语言都提供一个叫帮助类(class helper)的机制,delphi的新版里面也有,举例如下:
Delphi(Pascal) code

type
TMyClass = class
procedure MyProc;
function MyFunc: Integer;
end;

...

procedure T……
[/Quote]
我比较赞成这个说法
祥元 2012-05-22
  • 打赏
  • 举报
回复

一般属性(访问对象的接口)是服务于字段的。

1.在private下面写一个字段FXXX:String;

2.在private下写一个方法procedure SetXXX(const Value: string);

3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX;


祥元 2012-05-22
  • 打赏
  • 举报
回复

一般属性(访问对象的接口)是服务于字段的。

1.在private下面写一个字段FXXX:String;

2.在private下写一个方法procedure SetXXX(const Value: string);

3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX;


JPEXE 2012-05-22
  • 打赏
  • 举报
回复
重写文本框,一般是从TCustomEdit继承。那什么直接从TEdit继承的只是小打小闹做不出多少名堂。
「已注销」 2012-05-22
  • 打赏
  • 举报
回复
现在很多编程语言都提供一个叫帮助类(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
cntigercat 2012-05-22
  • 打赏
  • 举报
回复
直接重写不就是了
kaikai_kk 2012-05-22
  • 打赏
  • 举报
回复
不能继承,那就改源码

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;
zshsuming 2012-05-21
  • 打赏
  • 举报
回复
坐等大神
zshsuming 2012-05-21
  • 打赏
  • 举报
回复
自定义消息?

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧