var Form1 : TForm1; begin Form1 := TForm1.Create(Application); with Form1 do begin Name := 'FThinkYou'; Left := 10; Top := 10; Height := 100; ... Show; end; end;
var Form: TForm; Str: Sting; begin Str := 'MyForm'; With TForm.Create(Application) do begin Name := Str; Show end; end;
Form1 : TForm1;
begin
Form1 := TForm1.Create(Application);
with Form1 do
begin
Name := 'FThinkYou';
Left := 10;
Top := 10;
Height := 100;
...
Show;
end;
end;
Str: Sting;
begin
Str := 'MyForm';
With TForm.Create(Application) do
begin
Name := Str;
Show
end;
end;
预先生成个窗体thankYou,然后把窗体名字存到数据库等待调用,调用时用取出存的字符串:“thankYou“用字符串字符串“thankYou”动态创建窗体thankYou,窗体是预先生成的窗体thankYou
function FindComponent(const AName: string): TComponent;
试一下
预先生成个窗体thankYou,然后把窗体名字存到数据库等待调用,调用时用取出存的字符串:“thankYou“用字符串字符串“thankYou”动态创建窗体thankYou,窗体是预先生成的窗体thankYou,窗体上的控件都是编辑时生成的那样
TForm(FindComponent(窗体名)).Show;就可以调用该窗体了!
就是在主窗口创建的同时,用RegisterClass方法注册你其他已经设计好的窗体类,然后看下面代码:
procedure TForm1.TForm1.FormCreate(Sender: TObject);
begin
RegisterClass(TThankYou); //注册所有其他你设计好的窗口类,用法参考帮助
end;
然后:
procedure TForm1.Button1Click(Sender: TObject);
var str: string;
Form: TForm;
begin
str := 'TThankYou';
Form := TFormClass(Classes.FindClass(str)).Create(Self); //查找注册的窗体类并创建
form.Show;
end;
只是多了一个步骤,很简单,另外,注册窗体类的时候可以定义一个窗体类数组一并传入RegisterClass方法中。以测试,绝对可行!
var
ClassClient:TComponentClass;
client:TForm;
begin
ClassClient:=TComponentClass(FindClass(strForm));
Application.CreateForm(ClassClient,client);
end;
在調用這個函數之前,必須在相應類單元文件中end.之前加上如下語句
initialization
RegisterClass(類名);
finalization
UnRegisterClass(類名);