我在学delphi,自己写小程序来熟悉控件。碰到了困难,请求大家的帮助。问题如下:假设:form1中有一个scrollbox1,我要在程序运行过程中,在scrollbox1中生成若干个(具体数目不确定,由节点数决定,一个节点一个stringgrid控件)stringgrid控件,控件名根据已生成的stringgrid控件总数来确定。该怎么写啊?帮帮忙。谁解决了我给100分。谢谢。

解决方案 »

  1.   

    NewString:TStringGrid;
    .....
    NewStringGrid:=TStringGrid.create(scrollbox1);
    NewStringGrid.name:='StringGrid'+IntToStr(Scrollbox1.controlcount);
    ......
      

  2.   

    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;
      

  3.   

    我用了mrtxc(阿春)的方法,但界面上没有出现我创建的stringgrid控件,加了sg.parent := scrollbox1后就出现了。可以告诉我为什么吗?(因为我觉得在creat过程中已经指定了它的parent,为什么还要再声明一下呢?)另外,我谢谢你们的指教,准备散分了,因为阿春第一个给我答案,而古木使我发现解决问题的最后线索,我决定阿春60,古木40,可以吗?如果没有争论的话,我就这样给了
      

  4.   

    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.