导航
  • 主页
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

如何动态使用构件和控件

RunInQuake 2001-03-09 05:11:00
如何动态创建和显示一个构件或控件。
比如说是一个TButton,TLabel,TListBox,TComboBox,或者是一种第三方的ActiveX控件等等,想响应某一事件创建并显示它。
比如

TForm1.OnButtonClick(Sender:TObject)
var
MyButton:TButton
begin
..... //想在这里创建并显示
{
MyButton:=TButton.Create...
MyButton.Name:=..
MyButton.Caption :=
MyButton.Visible:=
} //这一段不行。

end;

MyButton对象应该定义在哪里?定义在上面这个过程里还是定义在Form类里,因为
我还要这个MyButton响应一些事件,支持拖动,等等。
最后如何删除。 Free就可以了吗?

初学Delphi,请多指教。谢谢






...全文
82 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bill_lasker 2001-03-09
练习过自己做控件这个问题就会解决了
回复
TopCat 2001-03-09
procedure TForm1.MyClick(Sender:TObject);
begin
//事件处理代码
end;

然后写
myButton.OnClick := MyClick;
就可以了
回复
jeaking 2001-03-09
你定义的TButton类型的变量其实只是一个对象的一个引用,实质就是一个指针。
真正的对象是通过TButton.Create(Owner)创建的,引用消失并不等于对象也消失,
只是你无法通过这个引用操纵它(当然也可以通过别的引用),对象随它的Owner
消失而消失,对象的Parent属性是决定它的显示位置的。想要释放对象用.free方法
或.destory方法。
回复
jeaking 2001-03-09
你定义的TButton类型的变量其实只是一个对象的一个引用,实质就是一个指针。
真正的对象是通过TButton.Create(Owner)创建的,引用消失并不等于对象也消失,
只是你无法通过这个引用操纵它(当然也可以通过别的引用),对象随它的Owner
消失而消失,对象的Parent属性是决定它的显示位置的。
回复
RunInQuake 2001-03-09
这一点拨就明白了。
我发现定义的对象好象在哪里都无所谓的,在过程里定义都可以。
在过程里定义的不是局部的吗?为什么离开了该过程还是可以显示按钮和响应点击?
怎么样把他删除掉?
我对Delphi 的内存对象又糊涂了,我以前是用vc的。
回复
SGP 2001-03-09
一定要指定parent属性为当前的载体,如mybottom.parent:=myform,也可以在其它控件中显示此控件,如MyBottom.parent:=MyPanel,这可使MyBottom显示在MyPanel中。
回复
yukuang 2001-03-09
事件:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
a:TButton;
procedure Button1Click(Sender: TObject);
procedure AClickEventHandler(sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.AClickEventHandler(sender: TObject);
begin
Showmessage('Hello!');
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
a:=Tbutton.Create(self);
a.Caption:='abc';
a.Parent:=Form1;
a.OnClick:=AClickEventHandler;
end;

end.
回复
yukuang 2001-03-09
指定
myButton.Parent:=Form1;
就可以显示了。至于怎么响应它的事件。关注。。。
回复
发动态
发帖子
Delphi
创建于2007-08-02

4806

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告