
单元一代码:
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.
浙公网安备 33010602011771号