您的位置:首页 > 其它

动态创建对象

2010-11-02 15:32 218 查看


单元一代码:

unit Unit1;

interface

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

type
TControlClass =class of TControl;
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
ContrlClassArry:array[0..2] of TControlClass=(TMonthCalendar,TMemo,TColorBox);
var
i:integer;
ControlObj:TObject;
begin
//清理对象
for  i:=0  to controlcount-1 do
if (Controls[i] is TMonthCalendar) or (Controls[i] is TMemo)
or (Controls[i] is TColorBox) then
Controls[i].Free;
//创建对象
ControlObj:=TControlFactory.createControlObj(self,ContrlClassArry[RadioGroup1.ItemIndex]);
label1.Caption:=ControlObj.ClassName;
//测试对象
if (ControlObj is  TMemo) then  TMemo(ControlObj).Lines.Add('测试成功!') ;
if (ControlObj is  TColorBox) then  TColorBox(ControlObj).ItemIndex:=2 ;
end;

end.


单元二代码:

unit Unit2;

interface
uses
Windows, SysUtils, Classes,Controls, Forms;

Type
TControlClass =class of TControl;
TControlFactory=class
public
class function createControlObj(AOwner:TWinControl ;ControlClass:TControlClass):TControl;
end;

implementation

class function TControlFactory.createControlObj(AOwner:TWinControl ;ControlClass:TControlClass):TControl;
var
FControlObj:TControl;
begin
FControlObj:=ControlClass.Create(AOwner);
FControlObj.Parent:=AOwner;
FControlObj.Name:=FControlObj.ClassName;
FControlObj.SetBounds(10,10,250,150);
result:=FControlObj;
end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: