📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Contnrs;
type
TPanelClass = class of TPanel;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
ObjList: TObjectList;
function MyGetClassName(AnyClass: TClass): String;
function ClassFactoryForTWinControl(
AnyTWinControlClass: TWinControlClass;
AOwner: TComponent): TWinControl; overload;
function ClassFactoryForTWinControl(
AnyTWinControlClassName: String;
AOwner: TComponent): TWinControl; overload;
function ClassFactoryForTWinControl(
AnyTWinControlClassName: String;
AOwner: TComponent;
NewOrRunning: Boolean): TWinControl; overload;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
function TForm1.MyGetClassName(AnyClass: TClass): String;
begin
Result := AnyClass.ClassName;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(MyGetClassName(TForm1));
end;
function TForm1.ClassFactoryForTWinControl(
AnyTWinControlClass: TWinControlClass;
AOwner: TComponent): TWinControl;
begin
Result := AnyTWinControlClass.Create(AOwner);
end;
function TForm1.ClassFactoryForTWinControl(AnyTWinControlClassName: String;
AOwner: TComponent): TWinControl;
var
FindClass: TPersistentClass;
begin
FindClass := GetClass(AnyTWinControlClassName);
if (FindClass <> nil) and FindClass.InheritsFrom(TWinControl) then
Result := TWinControlClass(FindClass).Create(AOwner)
else Result := nil;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with ClassFactoryForTWinControl(TForm2, Application) do
begin
ShowMessage(Name);
Width := 100;
Height := 100;
Left := 10;
Show;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
with ClassFactoryForTWinControl('TForm2', Application) do
begin
ShowMessage(Name);
Width := 100;
Height := 100;
Left := 10;
Show;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(ObjList);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ObjList := TObjectList.Create(False);
end;
function TForm1.ClassFactoryForTWinControl(AnyTWinControlClassName: String;
AOwner: TComponent; NewOrRunning: Boolean): TWinControl;
var
FindPos: Integer;
FindClass: TPersistentClass;
CreateNew: Boolean;
begin
FindClass := GetClass(AnyTWinControlClassName);
if (FindClass = nil) or (not FindClass.InheritsFrom(TWinControl)) then
begin
Result := nil;
Exit;
end;
CreateNew := not NewOrRunning;
if NewOrRunning then
begin
FindPos := ObjList.FindInstanceOf(FindClass);
CreateNew := FindPos = -1;
end;
if CreateNew then
begin
Result := TWinControlClass(FindClass).Create(AOwner);
ObjList.Add(Result);
end
else Result := TWinControl(ObjList[FindPos]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
with ClassFactoryForTWinControl('TForm2', Application, True) do
begin
ShowMessage(Name);
Width := 100;
Height := 100;
Left := 10;
Show;
end;
end;
initialization
RegisterClasses ([TForm1, TForm2]);
finalization
UnRegisterClasses ([TForm1, TForm2]);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -