(300分没人拿?)能否做到在TButton控件基础上增加新属性方法而不用新注册控件或动态创建?(比如在设计时摆放的是父类TButton控件,在运行时全部被子类

  • 主题发起人 主题发起人 guqs
  • 开始时间 开始时间
G

guqs

Unregistered / Unconfirmed
GUEST, unregistred user!
(300分没人拿?)能否做到在TButton控件基础上增加新属性方法而不用新注册控件或动态创建?(比如在设计时摆放的是父类TButton控件,在运行时全部被子类TMyButton替换掉,或其他方法,如何做?) (100分)<br />由于原问题提法可能不明,现换一种提法如下:
你不觉得现在的控件已经太泛滥了吗?有时只为扩展一点小功能就要新作一个控件。
用多了新控件,到别人打开你的代码时,就要先注册一大堆的控件。因此我通常只使用系统
自带的控件,需要时自己扩展。
怎样更方便的实现界面的个性化才是我真正的目的。如果新控件属于工程的一部分,无
须注册就可以运行,多好。控件面板也干净了,不常用的、个性化的控件都不用注册。真正
有极强功能的控件才作为控件。而不是象现在,加一点小功能,就发布一个控件。
我见过一个VC的程序,在资源的对话框中,放的是通用的Button,但运行起来功能就得到
了扩展,简直大变样。因此vc作的程序就会更具个性化,界面更易出新,而Delphi作的程序
则往往千人一面。
当然可以用动态创建,但当程序中大量使用新可视控件时将为布局设计带来极大的困
饶。
如何利用Dfm资源文件中设计期的初始值,在运行时对基础类进行扩展,同时利用到
基础类设计时的属性;或其他方法实现上述目的?
不知Delphi如何作到,大家继续讨论,答出者加分重谢。


原问题:
1、我在窗口上放了一个Button,我想重画它的形状,或新增某些属性,如浮动等效果或
其他属性,但我要保留所有Button属性,只在此基础上添加和重载、继承,不是要重写其他
Button已有的属性而作成新控件,应该怎样做?
2、怎样不用注册新控件或不采用动态生成(这样按钮多时布局麻烦)的方式,只是在Form
上摆放原TButton按钮,在程序中写代码实现我为TButton新增属性(即我的TMybutton)或
改变按钮显示?(在VC中可以作到在资源中放的是原Button,但程序执行时改写它)
不知在Delphi中怎样实现这一目的?

不知说的够不够清楚?
主要有感于目前为原控件增加几个小功能、属性就生成一个新控件的状况!

 
你可以重载你的自画过程,然后再写一遍,就能搞定,
 
其一:自画过程在其父父类的私有属性中,如何继承?
其二:继承的新类如何反应在Form上(别告诉我动态生成,并动态定位,多处用此按钮时太麻烦,有无好办法)?
 
make a new component,
see sourcr code of Tbutton
 
to D.Q.C :
主要有感于目前为原控件增加几个小功能、属性就生成一个新控件的状况!
其次,要想达到上述目的,我不知如何从TButton继承,只能从其父控件继承,重复制全部TButton
的属性方法代码,再添新方法,岂不太麻烦!
请看清我的问题。
 
也许你觉得奇怪,为什么TButton没有Canvas属性和
OnDrawButton事件呢?
答案是:TButton是由操作底层函数画的。
下载一个你要的按钮不就结了?
 
to zhukewen:
那么如果只是要求加入一个很简单的方法或属性,难道也要生成一个新控件吗?能否
可以不用新注册控件或动态创建的其他方法实现直接使用新类?
 
想做就别怕麻烦!
 
to guqs:
可以的,只是这样不能享受IDE带来的方便而已.
例如:
type TMyButton = class(TButton)
public
procedure dosomething;
published
property myproperty;
end;
//如此使用:
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
myButton : TMyButton;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
myButton := TMyButton.Create(self);
...
end;
 
to zhukewen:
总算有一个明白我的意思的了。
你差不多答到了点子上了。
但你给出的方法我知道,当我的程序中较多使用新按钮时,用动态创建时就会在定位上废
很多功夫,且不易对准。
我是想找到一个方法,在IDE上摆放的是TButton,在运行时就全部替换为TMybutton了。不知
能否做到这样?
 
可惜我不太清楚。
只知道Tbutton是由它的TForm创建的,
初始值是由.dfm提供的资源更新的。
具体过程没有研究。
 
若这样的话只能
下载一个你要的按钮
或叫别人帮你搞定,你伸手要就行了
 
to V_Lucky:
你究竟有没有看我问题的内容?
这样的新控件我自己就可以作一个。但我的目的不是如此。你不觉得现在的控件已经太
泛滥了吗?有时只为扩展一点小功能就要新作一个控件。用多了新控件,到别人打开你的
代码时,就要先注册一大堆的控件。因此我通常只使用系统自带的控件,需要时自己扩展。
怎样更方便的实现界面的个性化才是我真正的目的。如果新控件属于工程的一部分,无
须注册就可以运行,多好。控件面板也干净了,不常用的、个性化的控件都不用注册。真正
有极强功能的控件才作为控件。而不是象现在,加一点小功能,就发布一个控件。
我见过一个VC的程序,在资源的对话框中,放的是通用的Button,但运行起来功能就得到
了扩展,简直大变样。因此vc作的程序就会更具个性化,界面更易出新,而Delphi作的程序
则往往千人一面。
你不知道就不要在这里冷嘲热讽。
zhukewen倒是明白了我的问题。如何利用Dfm资源文件中设计期的初始值,在运行时对基
础类进行扩展,同时利用到基础类设计时的属性;或其他方法实现。
不知Delphi如何作到,大家继续讨论,答出者加分重谢。
 
关注,我已经厌倦了为一个小改进就要安装新控件了
 
遇到这种情况,我的处理方法是:
安装一个,或继承一个TBUTTON的源码,遇到需要改进功能时,就修改他的源码,
重新编译一下,但是,还是觉得VC的那种方式方便
 
如果只是个button用decorator模式,
如果是很大的类,用strategy模式。
 
to VRGL:
能更具体的说一下吗?
 
请允许我说几句,你能否放弃你的那种思想,自己建一个标准的控件单元,然后再到里面去改。
这样,你写好了一个控件,安装一次就可以了,不用再安装,如果有须要改的话,再去改那个
自已写的控件单元。
这只是我的一点意见。不要见笑。
 
后退
顶部