问题一:如果我在自定义控件上加入一个属性FocusControl,类似于TLabel控件的那个属性的,通过这个属性可以关联到另一个控件,现在我想做到当被关联的控件的位置发生移动的时候,我自定义的控件的位置也跟着移动,只是不知道应该怎样接收那个消息.
另外,如果不只是位置的移动,广义的说,只要是被关联的控件的某个属性发生了改变,要求我自定义的控件都能接收到这个消息,应该怎么做?问题二:如果我写一个Edit的子类MyEdit控件,那么它自动继承了父类的MaxLength属性(当然还有其他),现在我希望当MyEdit控件的MaxLength属性发生改变时控件能够执行一些自定义的操作(比如说弹出一个对话框等等)但因为MaxLength的Set和Get过程都是封装在祖先中的,我无法在其中插入代码,请教应该怎么做?
这里只是举MaxLength作为例子,如果任何一个这种继承来的控件的属性发生改变时,我应该怎么添加代码?以上两个问题在我公司内部使用的专用控件中都得到了应用,但是不知道是如何实现的,为此想请教各位有控件开发经验的高手,谢谢!
另外,如果不只是位置的移动,广义的说,只要是被关联的控件的某个属性发生了改变,要求我自定义的控件都能接收到这个消息,应该怎么做?问题二:如果我写一个Edit的子类MyEdit控件,那么它自动继承了父类的MaxLength属性(当然还有其他),现在我希望当MyEdit控件的MaxLength属性发生改变时控件能够执行一些自定义的操作(比如说弹出一个对话框等等)但因为MaxLength的Set和Get过程都是封装在祖先中的,我无法在其中插入代码,请教应该怎么做?
这里只是举MaxLength作为例子,如果任何一个这种继承来的控件的属性发生改变时,我应该怎么添加代码?以上两个问题在我公司内部使用的专用控件中都得到了应用,但是不知道是如何实现的,为此想请教各位有控件开发经验的高手,谢谢!
解决方案 »
- 突然想问---有嵊州市(绍兴)的朋友吗???????????
- 求一算法:在m个数中,求n个数的组合,若这n个数的和等于sum,则...
- 简单的问题,关于Memo
- *********我是DEPHI菜鸟,大家把QQ好留下,互相学习***********
- 怎样让Epson300K的打印机在打连续纸时,打印完后不走纸,即打任何长度的纸,100分
- 越干越没意思,原来写应用程序,现在要写驱动了。
- 如何在Delphi中调用C++的动态连接库
- dbgrideh中粘贴数据
- 谁愿意与我合作?
- 怎样判断鼠标是否拖动一个文件到一个控件上!!
- 工具栏按钮的效果实现问题?
- 请问如何得到MainMenu在窗口上方出现的菜单条的高度?
但是对属性的Set和Get过程都是放在祖先类的private当中,对子类是不可见的,如果我在子类中采用override方法进行重载则编译器会告诉我不存在相应的祖先过程,(这是肯定的,因为对于子类来说,本来就应该不知道的),而如果不使用override,很显然,我新加入的这个过程不会被调用,等于没用.
以上是我测试的结果,希望有兴趣的高手们多多指教,或者提一些思路建议,再次表示感谢!
此外,截获每一个控件的每一个属性变化用一般的方法应该是不可能的(先假设你不打算扫描内存……就像爱护皮椅那样:P)。如果只是像你说的那样取得位置的变化则好办得多,截获WM_SIZE就可以了。
private
function GetMaxLength: integer;
procedure SetMaxLength(const Value: integer);
published
property MaxLength:integer read GetMaxLength write SetMaxLength;
end;
function TMyEdit.GetMaxLength: integer;
begin
result:=inherited MaxLength;
end;procedure TMyEdit.SetMaxLength(const Value: integer);
begin
inherited MaxLength:=Value;
showmessage('');
//你的代码end;
例如 TCustomClass2 要随TCustomClass1而动
那么在TCustomClass1中声明一个公开变量 FOwner :TCustomClass2;
type
TCustomClass2 =class;
TCustomClass1 =class(TCustomParentClass1)
public
OwnerClass :TCustomClass2;
...
end;
TCustomClass2=class(TCustomParentClass2)
private
CustomClass1 :TCustomClass1;
public
constructor Create(AOwner:TComponnet);override;
destructor Destroy; override;
end;constructor TCustomClass2.Create(AOwner:TComponnet);
begin
Inherited Create(AOwner);
CustomClass1 :=TCustomClass1.Create(Self);
CustomClass1.OwnerClass :=Self;
//OK,接下来就可以在CustomClass1中操作CustomClass2了,
end;
destructor Destroy;
begin
CustomClass1.Free;
Inherited Destroy;
end;end;第二个问题:
直接从TCustomEdit 的父类TWinControl继承重写就是了,然后把TCustomEdit的大部分代码COPY过来,加入自己的,就OK了