⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 动态创建控件举例
💻 PAS
字号:
{******************************************************************************}
{ @UnitName    : Unit1                                                         }
{ @Project     : Project1                                                      }
{ @Copyright   : Microsoft                                                     }
{ @Author      : T2607Z                                                        }
{ @CreateDate  : 2004-7-12 11:50:48                                            }
{ @LastUpdate  : 2004-7-12 11:50:48 by T2607Z                                  }
{ @Description :                                                               }
{ @Comment     :                                                               }
{ @History     :                                                               }
{******************************************************************************}
unit Unit1;

interface

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

type
  CRefType = class of Tcontrol;
  TForm1 = class(TForm)
    Panel1: TPanel;
    RadioRBtn: TRadioButton;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    New1: TMenuItem;
    Open1: TMenuItem;
    SaveAs1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Help1: TMenuItem;
    About1: TMenuItem;
    ButtonRBtn: TRadioButton;
    LabelRBtn: TRadioButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure RadioRBtnClick(Sender: TObject);
    procedure ButtonRBtnClick(Sender: TObject);
    procedure LabelRBtnClick(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure New1Click(Sender: TObject);
    procedure Open1Click(Sender: TObject);
    procedure SaveAs1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
  private
    { Private declarations }
    ClassRef : CRefType;
    Counter : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RadioRbtn.Checked :=true;
  ClassRef := TRadioButton;
  Counter:=0;
end;

procedure TForm1.RadioRBtnClick(Sender: TObject);
begin
  ClassRef := TRadioButton;
end;

procedure TForm1.ButtonRBtnClick(Sender: TObject);
begin
   ClassRef:=TButton;
end;

procedure TForm1.LabelRBtnClick(Sender: TObject);
begin
  ClassRef:=TLabel;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  MyObj:Tcontrol;
  Myname:String;
begin
  MyObj:=ClassRef.Create(Self);
  MyObj.Parent :=Self;
  MyObj.Left :=x;
  Myobj.Top :=y;
  Inc(Counter);
  MyName := ClassRef.ClassName + IntToStr(Counter);
  Delete(MyName,1,1);
  MyObj.Name :=MyName;
  MyObj.Visible :=true;
end;

procedure TForm1.New1Click(Sender: TObject);
var
  i:integer;
begin
  for i:= ControlCount -1 downto 0 do
    if Controls[i].ClassName <> 'TPanel' then
      ConTrols[i].Free ;
  Counter:=0;
end;

procedure TForm1.Open1Click(Sender: TObject);
var
  S:TFileStream;
  New:TComponent;
begin
  if OpenDialog1.Execute then
  begin
    New1Click(self);{清除所有控件}
    s:= TFileStream.Create(OpenDialog1.FileName,fmopenRead );
    try
      While s.position < S.Size do
      Begin
        New:=S.ReadComponent(nil);
        InsertControl(new as TControl);
        Inc(Counter);
      End;
    finally
      s.Free ;
    end;
  end;
end;

procedure TForm1.SaveAs1Click(Sender: TObject);
var
  S:TFileStream;
  i:integer;
begin
  if SaveDialog1.Execute then
  begin
    S:=TfileStream.Create(SaveDialog1.FileName ,fmOpenWrite or fmCreate);
    try
      for i:=0 to ControlCount -1 do
      Begin
        if Controls[i].ClassName <>'TPanel' then
        s.WriteComponent(Controls[i]);
      End;
    finally
      s.Free ;
    end;
  end;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.About1Click(Sender: TObject);
begin
  Application.MessageBox('动态创建控件举例!','帮助',mb_ok +MB_ICONINFORMATION )
end;
initialization
  registerclasses([TRadioButton,TButton,TLabel]);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -