TCustomFormClass问题

fengzairenjian 2009-07-10 03:53:39
程序如下
function getForm(strForm:ShortString):TCustomFormClass;
begin
if strForm='FormUser1' then
result:=TFormUser1
if strForm='FormUser2' then
result:=TFormUser2
end;

现在的问题是,若果我的窗体非常多,程序就很冗长,如果才能简化?

因为 窗体的名称和TCustomFormClass很有规律
比如:'FormUser1'与TFormUser1

如何通过strForm简单的获得TCustomFormClass?

...全文
33 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wufeng1205 2009-10-27
  • 打赏
  • 举报
回复
初看有效果,但不知道下面的函数是否可行:
procedure SelfShowForm(AForm:TCustomForm; TAForm:TCustomFormClass);
fengzairenjian 2009-07-10
  • 打赏
  • 举报
回复
谢谢dinoalex,谢谢所有人,呵呵

按照dinoalex的方法OK啦,结贴,给分
dinoalex 2009-07-10
  • 打赏
  • 举报
回复
[Code=Delphi(Pascal)]
procedure TUnionFrm.Button3Click(Sender: TObject);
var
AFormClass:TComponentClass;
AForm: TForm;
str: string;
begin
str:= 'ExceptionsFrm'; // 窗口名字字符
AFormClass := TComponentClass(GetClass('T'+str));
if AFormClass <> nil then
begin
Application.CreateForm(AFormClass,AForm);
AForm.Show;
showmessage('OK');
end;
end;

initialization
RegisterClass(TExceptionsFrm);

end.
[/Code]
fengzairenjian 2009-07-10
  • 打赏
  • 举报
回复
程序如下
function TFormMain.CreateAndShowFormModal1(const AOwner: TComponent; const strForm:String;Caption:string;Param:string): boolean;
begin
with TForm(FindClass(strForm)).create() do
begin
Name := ClassName + IntToStr(Handle);
show;
end;
end;

initialization
RegisterClass(TFormUser);
finalization
UnRegisterClass(TFormUser);

执行到with TForm(FindClass(strForm)).create() do直接挂了
fztjava 2009-07-10
  • 打赏
  • 举报
回复
RegisterClass和FindClass来处理
starluck 2009-07-10
  • 打赏
  • 举报
回复


單元的

initializaion
RegisterClass(Tfrmuse1);
finalization
RegisterClass(TfrmUse1);



with TForm(GetClass('Tfrmuser1')).create do ...



直接手寫,可能有錯,見諒,實現方式就是這樣的。
林石公 2009-07-10
  • 打赏
  • 举报
回复
可以考虑使用RegisterClass和FindClass来处理
用结构数组也是个方案,不过不够灵活

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧