请教开发控件中类属性的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 qylin1
  • 开始时间 开始时间
Q

qylin1

Unregistered / Unconfirmed
GUEST, unregistred user!
我从TPanel中继承开发一个控件,我想要一个如:Constraints、Font等一样的属性,也就是在属性前面有一个[+]号,点击[+]号后展开一些项目可以设置的效果,主要代码如下:

TBar = class
private
FX: Integer ;
FY: Integer ;
public
constructor Create;
published
property X: Integer index 0 read FX write FX;
property Y: Integer index 1 read FX write FY;
End ;

TBPanel = class(TPanel)
private
FBar: TBar ;
public
published
property Bar: TBar read FBar write FBar ;
End ;

编译后,我在一个Form中加入一个TBPanel控件,此控件的属性窗口中就有了一个Bar的属性,前面有一个 [+] 号显示,但只要一点那个 [+] 号,系统会弹出 "Unable to Expand"的错误,请问这个问题如何解决,谢谢!
 
我从TPanel中继承开发一个控件,我想要一个如:Constraints、Font等一样的属性,也就是在属性前面有一个[+]号,点击[+]号后展开一些项目可以设置的效果,主要代码如下:

TBar = class
private
FX: Integer ;
FY: Integer ;
public
constructor Create;
published
property X: Integer index 0 read FX write FX;
property Y: Integer index 1 read FX write FY;
End ;

TBPanel = class(TPanel)
private
FBar: TBar ;
public
published
property Bar: TBar read FBar write FBar ;
End ;

编译后,我在一个Form中加入一个TBPanel控件,此控件的属性窗口中就有了一个Bar的属性,前面有一个 [+] 号显示,但只要一点那个 [+] 号,系统会弹出 "Unable to Expand"的错误,请问这个问题如何解决,谢谢!
 
建议你看一下TBar中的Create函数
是不是定义有问题
如果没有承继Create函数,则没有分配空间
会出现一些意想不到的问题
 
没有做过,我想这里应该用一个类的实例,而不是一个类。你可以看看Delphi的源码
 
你那个TBPanel的creat方法里,对其自身的FBar进行初始化了吗?
也就是说 在TBPanel.creat里有没有写
FBar:=TBar.creat;
 
To:Mike1234567890/wwr74
我试过用 TBar = class(Tobject) // 参考Delphi的源码做的
结果还是不行
TO:hs-kill
FBar:=TBar.creat; 有加入

谢过以上朋友的帮忙,问题还没解决,还请高手指点。谢啦
 
TBar = class
private
FX: Integer ;
FY: Integer ;
public
constructor Create;
published
property X: Integer index 0 read FX write FX;
property Y: Integer index 1 read FX write FY;
End ;
去掉加粗的部分试试。
 
属性类必须是从TPersistent类或者其派生类继承下来的。
 
问题解决,非常感谢!
 
后退
顶部