给出一个很简单的组件示例:Ttest = class(TPanel)
private public
Fbtn: TButton;
constructor create(aowner: TComponent);override;
destructor destroy;override;
published
property Btn : TButton read Fbtn write Fbtn; end;procedure Register;
begin
RegisterComponents('TEST', [Ttest]);
end;constructor Ttest.create(aowner: TComponent);
begin
inherited create(aowner);
btn := TButton.Create(Self);
btn.Parent := self;
end;destructor Ttest.destroy;
begin
btn.Free;
inherited destroy;
end;一个很简单的组件,一个Panel中包含一个按钮。注册后,在设计阶段。对按钮属性的改变可是即时显示出来。但运行后,却不能得到体现。例如:设计时设置按钮的caption为‘test’,但运行后,caption却什么也没有。何解?
private public
Fbtn: TButton;
constructor create(aowner: TComponent);override;
destructor destroy;override;
published
property Btn : TButton read Fbtn write Fbtn; end;procedure Register;
begin
RegisterComponents('TEST', [Ttest]);
end;constructor Ttest.create(aowner: TComponent);
begin
inherited create(aowner);
btn := TButton.Create(Self);
btn.Parent := self;
end;destructor Ttest.destroy;
begin
btn.Free;
inherited destroy;
end;一个很简单的组件,一个Panel中包含一个按钮。注册后,在设计阶段。对按钮属性的改变可是即时显示出来。但运行后,却不能得到体现。例如:设计时设置按钮的caption为‘test’,但运行后,caption却什么也没有。何解?
解决方案 »
- 编辑框中输入类似这样的字符串(Data[3]-Data[2]) /Data[2] 点一下计算按钮,要计算出对应的数值
- 一个combobox绑定多列数据的方法
- 简单问题兼散分
- 各位高手,请给我一个用ClientDataSet动态创建lookup字段的示例代码。
- SQL库中数据导入EXCEL表,如何设置导入后的EXCEL表的格式,比如列宽、字体大小,以及表格的边框等??
- 哪位大侠用过TRzGroup请进来看看,谢谢!
- 如何可以在主窗口中关闭一个DLL模块弹出的提示窗口?
- 请问wwdbgrid这控件,点击title排序就根据选中的字段排序(升序,降序)
- 关于数据集的批处理更新
- 关于websnap一点小问题!~~~~~~~~~~~
- SQL SERVER 数据备份与恢复组件 v1.0 安装问题???
- TAdoClientDataSet控件的用法?
constructor Ttest.create(aowner: TComponent);
begin
inherited create(aowner);
btn := TButton.Create(Self);
btn.Parent := self;
end;
BTN 现在CAPTION=‘’;你可以提供一个 诸如
private
FText:String;
procedure SetText(val:string);
....
property
property Text:String read FText write FText;的可读写属性来改变btn的CAPTION;
procedure TTest.SetText(val:string);
begin
if FText<>val then
beign
FText:=val;
Btn.caption:=FText;
end;
end;
在设计时设置的属性没有自动保存到dfm中吗?其实我一直怀疑就是这个问题。具体一点可以吗?
我知道这样子可以,但是我现在要的是设计时的属性会在运行时得以体现。
begin
inherited create(aowner);
btn := TButton.Create(aowner);//不要用Self,用AOwner
btn.Parent := self;
end;
首先还是很感谢你的回答。但是,你先试过再说。你这样做连在设计模式下创建控件都会出错!
我发现有时自制的控件编辑器不会将控件属性储存起来。设计时刻一切正常,但是储存起来再重新读入后就有问题了。
答:原因是你很可能忘了在控件编辑器中调用此方法:
Designer.Modified;
如此一来Delphi才会知道你的控件编辑器更改过属性值了。
(节选自控件开发FAQ)
我当时是这么写的:tab := TSSGeTabSheet.Create(GetParentForm(Source));
其中Source是我自己写的PageControl。上面的代码一直工作的很好,你能不能把你的控件代码寄给我看一看?
RegisterClass(TButton);更好的解决方法正在探索中……
当处于设计模式下时,我对面板内的按钮的进行了拖动,调整了一下位置。但是运行时,我却看到有两个按钮出现。一个是我设置过的被我调整过位置的按钮,而另一个按钮出现在默认的位置,没有相关属性。我想应该会有其它的解决的方法,就比如那个DataSource控件里面有一个DataSet一样。
问题的解决方法在于在创建Button的时候检查是否在设计状态下。如果不是则不创建按钮。对于控件的连接其实还有一些要注意的事情。比如使用FreeNotification系列方法来响应被连接的控件被删除的事件等。
至于解决的方法,大家可以参考一下控件的Font属性。我的解决方法也是如此。结贴了。