如何动态创建控件组,并响应事件??? ( 积分: 100 )

  • 主题发起人 主题发起人 viscar
  • 开始时间 开始时间
V

viscar

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题是要创建相同的控件组,组数是不定的,如果用Create方法的话资源要怎么处理?
还有一问,控件组能不能生成一个模板?
新手,请QQ20032472
 
我的问题是要创建相同的控件组,组数是不定的,如果用Create方法的话资源要怎么处理?
还有一问,控件组能不能生成一个模板?
新手,请QQ20032472
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
BtnAry:array[0..9] of TButton;
//控件數組
//因為OnClick其實是一個屬性,下面的Procedure參數類型只要與OnClick參數類型一致即可
procedure btnClick(Sender:TObject);

public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnClick(Sender: TObject);
begin
if (Sender is TButton) then
ShowMessage((Sender As TButton).Caption)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=0 to 9do
begin
BtnAry:=TButton.Create(self);
with BtnArydo
begin
Top:=i*28+10;
name:='BtnAry'+IntToStr(i);
Parent:=Self;
Visible:=tRue;
Caption:='BtnAry'+IntToStr(i);
onclick:=btnClick;
//動態指定事件
end;
end;
end;

end.
 
1. 生成控件组 用循环
2.生成单个控件
procedure MyOnClick(Sender As TObject) //这里一般参看标准方法的参数
MyButton = TButton.Create(nil)
MyButton.parent := 'panel1';
MyButton.onClick := MyOnClick;
3.模板的问题,你可以先做一个Frame, 再创建Frame。
4。友情提示,一般来说创建控件 tag ,hint name 值是很有用途的。 还有Findcomponent 。做遍历查找 controls.count 也很有用
 
上面的两位,能不能加QQ20032472,我的分快不够了,另我用的是VC,不是Delphi
 
idon的
MyButton = TButton.Create(nil)
和我的
BtnAry:=TButton.Create(self);
不同之出在于實例的Owner不同。
BtnAry是TForm1類的Private變量,所以其Owner是TForm1。
控件創建以后,不需要手動去Free﹑Destroy。
不過,控件創建或析構的時候,會耗費一點點時間,其實也沒有多大區別。
idon的MyButton沒有指定Onwer,節省時間,
只是不要忘記在Form1析構或Close的時候,要手動
if Assigned(MyButton) then
FreeAndNil(MyButton);
哈﹐我不懂VC
 
Delphi我也会,VC的好象用指针new
CButton c[];
CButton* pc=c;
for(int i=0;i<8:i++)
{
new pc;
pc->属性=;
pc++;
}
事件还不知道怎么弄
 
vc 里相应消息用消息映射。
begin
_MSG_MAP
...
END_MSG_MAP
 
new 完后,还要pc->CreateEx(一堆参数)
然后对消息映射,麻烦一米
 
误会了!我猜,他的窗体构件是运行期动态创建的,而非设计期,因此和什么消息映射没有什么关系。VC中事件的关联和Delphi有些区别、尽管本质一样,都是函数的回调,可能要用到函数的typedef......
 
多人接受答案了。
 
后退
顶部