怎么在程序中动态生成控件啊?帮帮忙 我在学delphi,自己写小程序来熟悉控件。碰到了困难,请求大家的帮助。问题如下:假设:form1中有一个scrollbox1,我要在程序运行过程中,在scrollbox1中生成若干个(具体数目不确定,由节点数决定,一个节点一个stringgrid控件)stringgrid控件,控件名根据已生成的stringgrid控件总数来确定。该怎么写啊?帮帮忙。谁解决了我给100分。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 NewString:TStringGrid;.....NewStringGrid:=TStringGrid.create(scrollbox1);NewStringGrid.name:='StringGrid'+IntToStr(Scrollbox1.controlcount);...... type TForm1 = class(TForm) Button1: TButton; //这个按钮是我放在窗体上的按钮,通过单击此按钮动态生成一个新的按钮 procedure Button1Click(Sender: TObject); private { Private declarations } procedure buttonClickEvent(sender:TObject); //手动添加 public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.buttonClickEvent(sender:TObject); //手动添加函数的实现begin showMessage('asdlfj;lasdkfj;asdlfjasl');end;procedure TForm1.Button1Click(Sender: TObject);var button:TButton; //这里动态生成一个按钮begin button:=TButton.Create(form1); button.Caption:='http://www.goomoo.net'; button.Left:=20; button.Width:=300; button.Top:=20; button.OnClick:=buttonClickEvent; button.Parent:=form1;end; 我用了mrtxc(阿春)的方法,但界面上没有出现我创建的stringgrid控件,加了sg.parent := scrollbox1后就出现了。可以告诉我为什么吗?(因为我觉得在creat过程中已经指定了它的parent,为什么还要再声明一下呢?)另外,我谢谢你们的指教,准备散分了,因为阿春第一个给我答案,而古木使我发现解决问题的最后线索,我决定阿春60,古木40,可以吗?如果没有争论的话,我就这样给了 unit FileStreamFrm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ToolWin, Menus;type TMyType = class of TControl;type TfsForm = class(TForm) ToolBar1: TToolBar; ButtonRadio: TRadioButton; LabelRadio: TRadioButton; EditRadio: TRadioButton; NewButton: TToolButton; SaveButton: TToolButton; OpenButton: TToolButton; ExitButton: TToolButton; ToolButton5: TToolButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure ButtonRadioClick(Sender: TObject); procedure LabelRadioClick(Sender: TObject); procedure EditRadioClick(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure NewButtonClick(Sender: TObject); procedure OpenButtonClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject); private MyType: TMyType; Count: Integer; public { Public declarations } end;var fsForm: TfsForm;implementation{$R *.dfm}procedure TfsForm.ButtonRadioClick(Sender: TObject);begin MyType:=TButton;end;procedure TfsForm.LabelRadioClick(Sender: TObject);begin MyType:=TLabel;end;procedure TfsForm.EditRadioClick(Sender: TObject);begin MyType:=TEdit;end;procedure TfsForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var NewCom: TControl; NewName: String;begin NewCom:= MyType.Create(self); NewCom.Parent:= self; Inc(count); NewName:= MyType.ClassName + IntToStr(count); NewName:= Copy(NewName,2,20); NewCom.Name:= NewName; NewCom.Left:= X; NewCom.Top:= Y;end;procedure TfsForm.NewButtonClick(Sender: TObject);var i:Integer;begin for i:= ControlCount-1 downto 0 do begin if Controls[i].ClassName<>'TToolBar' then Controls[i].Free; end; Count:=0;end;procedure TfsForm.OpenButtonClick(Sender: TObject);var fs: TFileStream; NewCom: TComponent;begin if OpenDialog1.Execute then begin NewButtonClick(self); fs:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead); try while fs.Position < fs.Size do begin NewCom:= fs.ReadComponent(nil); InsertControl(NewCom as TControl); Inc(Count); end; finally fs.Free; end; end;end;procedure TfsForm.SaveButtonClick(Sender: TObject);var fs:TFileStream; i: Integer;begin if SaveDialog1.Execute then begin fs:=TFileStream.Create(SaveDialog1.FileName,fmOpenWrite or fmCreate); try for i:=0 to ControlCount-1 do if Controls[i].ClassName<>'TToolBar' then fs.WriteComponent(Controls[i]); finally fs.Free; end; end;end;procedure TfsForm.ExitButtonClick(Sender: TObject);begin close;end;initialization RegisterClasses([TButton,TLabel,TEdit]);end. cxGrid 中 checkbox 问题 用Wininet的http上传文件时,如何指定的文件夹不存在,如何才能创建文件夹? wwquery组件的问题 时间字段不爽爽 用IXMLDOMElement怎么获得项目的个数啊 怎样保证进程的唯一性? 查询 谁发个topgrid控件给我 能在7下用的 谢谢 急急!!!!,我想做一个很简单的排班表,不知哪位兄弟能帮个忙,分、钱相送! Win98下用Delphi5写出来的程序在win2k下运行会碰到什么问题? 请解释一下这是什么意思 ? 在线等候..... DELPHI adoquery绑定的数据集记录的处理。
.....
NewStringGrid:=TStringGrid.create(scrollbox1);
NewStringGrid.name:='StringGrid'+IntToStr(Scrollbox1.controlcount);
......
TForm1 = class(TForm)
Button1: TButton; //这个按钮是我放在窗体上的按钮,通过单击此按钮动态生成一个新的按钮
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure buttonClickEvent(sender:TObject); //手动添加
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.buttonClickEvent(sender:TObject); //手动添加函数的实现
begin
showMessage('asdlfj;lasdkfj;asdlfjasl');
end;procedure TForm1.Button1Click(Sender: TObject);
var
button:TButton; //这里动态生成一个按钮
begin
button:=TButton.Create(form1);
button.Caption:='http://www.goomoo.net';
button.Left:=20;
button.Width:=300;
button.Top:=20;
button.OnClick:=buttonClickEvent;
button.Parent:=form1;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ToolWin, Menus;
type
TMyType = class of TControl;
type
TfsForm = class(TForm)
ToolBar1: TToolBar;
ButtonRadio: TRadioButton;
LabelRadio: TRadioButton;
EditRadio: TRadioButton;
NewButton: TToolButton;
SaveButton: TToolButton;
OpenButton: TToolButton;
ExitButton: TToolButton;
ToolButton5: TToolButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure ButtonRadioClick(Sender: TObject);
procedure LabelRadioClick(Sender: TObject);
procedure EditRadioClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure NewButtonClick(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure ExitButtonClick(Sender: TObject);
private
MyType: TMyType;
Count: Integer;
public
{ Public declarations }
end;var
fsForm: TfsForm;implementation{$R *.dfm}procedure TfsForm.ButtonRadioClick(Sender: TObject);
begin
MyType:=TButton;
end;procedure TfsForm.LabelRadioClick(Sender: TObject);
begin
MyType:=TLabel;
end;procedure TfsForm.EditRadioClick(Sender: TObject);
begin
MyType:=TEdit;
end;procedure TfsForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
NewCom: TControl;
NewName: String;
begin
NewCom:= MyType.Create(self);
NewCom.Parent:= self;
Inc(count);
NewName:= MyType.ClassName + IntToStr(count);
NewName:= Copy(NewName,2,20);
NewCom.Name:= NewName;
NewCom.Left:= X;
NewCom.Top:= Y;
end;procedure TfsForm.NewButtonClick(Sender: TObject);
var i:Integer;
begin
for i:= ControlCount-1 downto 0 do
begin
if Controls[i].ClassName<>'TToolBar' then
Controls[i].Free;
end;
Count:=0;
end;procedure TfsForm.OpenButtonClick(Sender: TObject);
var
fs: TFileStream;
NewCom: TComponent;
begin
if OpenDialog1.Execute then
begin
NewButtonClick(self);
fs:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
try
while fs.Position < fs.Size do
begin
NewCom:= fs.ReadComponent(nil);
InsertControl(NewCom as TControl);
Inc(Count);
end;
finally
fs.Free;
end;
end;
end;procedure TfsForm.SaveButtonClick(Sender: TObject);
var
fs:TFileStream;
i: Integer;
begin
if SaveDialog1.Execute then
begin
fs:=TFileStream.Create(SaveDialog1.FileName,fmOpenWrite or fmCreate);
try
for i:=0 to ControlCount-1 do
if Controls[i].ClassName<>'TToolBar' then
fs.WriteComponent(Controls[i]);
finally
fs.Free;
end;
end;
end;procedure TfsForm.ExitButtonClick(Sender: TObject);
begin
close;
end;initialization
RegisterClasses([TButton,TLabel,TEdit]);
end.