关于VCL(100分)

  • 主题发起人 livestone
  • 开始时间
L

livestone

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个VCL,A和B,A使用到B,B在A构造函数中创建,现在我希望B的属性能够在A的属性框中published出来,该怎么做?谢谢!
(不是一个一个属性published出来,而是整个的控件)
 
写个控件给你,简单得很。

 
好阿,谢谢!
 
给你一个
unit Panelt;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Buttons;

type
TPanelt = class(TPanel)
private
FButton: TSpeedButton;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
published
{ Published declarations }
property Button: TSpeedButton read FButton;
end;

procedure Register;

implementation

constructor TPanelt.Create(AOwner: TComponent);
begin
inherited;
FButton := TSpeedButton.Create(self);
FButton.Parent := self;
FButton.Name := 'FButton';
FButton.SetSubComponent(true);
FButton.Top := 10;
FButton.Left := 10;
FButton.Show;
end;

destructor TPanelt.Destroy;
begin
FButton.Free;
inherited;
end;

procedure Register;
begin
RegisterComponents('dwh', [TPanelt]);
end;

end.
 
原来这样是可以的,
可是为什么我publish一个同样是自定义组件就不行呢?
从面板上拉下来就报错。
这个控件我单独用也没错呀~~~
????
 
刚吃完饭,修改一下。

unit Panelt;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Buttons;

type
TPanelt = class(TPanel)
private
FButton: TSpeedButton;
procedure SetButton(Value: TSpeedButton);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
published
{ Published declarations }
property Button: TSpeedButton read FButton write SetButton;
end;

procedure Register;

implementation

constructor TPanelt.Create(AOwner: TComponent);
begin
inherited;
//FButton := TSpeedButton.Create(self);
//FButton.Parent := self;
//FButton.Hide;
//FButton.Name := 'FButton';
//FButton.SetSubComponent(true);
// FButton.Top := 10;
// FButton.Left := 10;
// FButton.Show;
//FButton := nil;
end;

destructor TPanelt.Destroy;
begin
//FButton.Free;
inherited;
end;

procedure TPanelt.SetButton(Value: TSpeedButton);
begin
if Assigned(FButton) then
FButton.Parent := self.Parent;
Value.Parent := self;
FButton := Value;
FButton.Left := 10;
FButton.Top := 10;
end;

procedure Register;
begin
RegisterComponents('dwh', [TPanelt]);
end;

end.
 
问题不在这里,你这里的Button我是要只读的,不需要SetButton
 
我给你的第一个就是只读的。如果允许设置,就不能只读。即不能用下拉选择。
 
影子,谢谢你了!我知道,第一个是对的,我之前也是这么用的。
可是你这里用TSpeedButton没问题,而我用的是另一个自定义组件,就出问题,搞不懂为什么!
你还有什么其他建议吗?
 
自定义的那个组件单独使用时会不会有问题?
可以用其它组件代替TSpeedButton,例如新建一个组件继承TSpeedButton,不写任何代码,肯定不会出错的。
 
自定义的那个组件单独使用很正常,
问题就是用在其他组件中,published出来,就出问题了,都没法查问题在哪里。
我再查查~~~
 
呵呵,用你写的组件代替TSpeedButton也会出错吗?
 
是啊,会出错的。
 
奇怪,就几行代码,又没什么。[:)]
不过,如果只需要只读,最好还是用第一种方法。
 
哈,整理了一下代码,居然好了。OK分数送上!
 
顶部