我过去在菜单项的单击事件中使用这样的代码: procedure TForm1.childform1Click(Sender: TObject); var fm:tbase; begin fm:=tbase(Application.FindComponent('frmoney')); if not(Assigned(fm)) then begin fm:=tbase.create(Application); fm.name:='frmoney'; end; fm.show; fm.WindowState:=wsnormal; end; 这样当使用的窗体比较多的时候,类似的代码将有很多重复部分的.现在我想把上面的代码封装一下,这样就需要在封装的过程中传递两个参数:一个是子窗体类,一个是子窗体的caption,我用下面的代码做不成功,查了DFW论坛也找不到合适的答案.只好求救于大侠了.
type TMyClass=Class of Tform;
procedure TForm1.Exefrm(MyClass:tform;FrmName:string); var fm:tMyClass; begin fm:=tMyClass(Application.FindComponent(FrmName)); if not(Assigned(fm)) then begin fm:=MyClass.create(Application); fm.name:=FrmName; end; fm.show; fm.WindowState:=wsnormal; end;
----------------------------------------------
-
procedure Tfrm_main.OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent; iTag: Integer); var i: integer; Child:TForm; begin for i := 0 to Screen.FormCount -1 do begin if Screen.Forms[i].ClassType=FormClass then begin Child:=Screen.Forms[i]; Child.Tag:=iTag; if Child.WindowState=wsMinimized then ShowWindow(Child.handle,SW_SHOWNORMAL) else ShowWindow(Child.handle,SW_SHOWNA); if (not Child.Visible) then Child.Visible:=True; Child.BringToFront; Child.Setfocus; TForm(fm):=Child; Exit; end; end; Child:=TForm(FormClass.NewInstance); Child.Tag:=iTag; TForm(fm):=Child; Child.Create(AOwner); end;
procedure Tfrm_main.TreeView1DblClick(Sender: TObject); begin Case TreeView1.Selected.Index of 0: OpenForm(Tfrm_db1,frm_db1,self,0); 1: OpenForm(Tfrm_db2,frm_db2,self,0); 2: OpenForm(Tfrm_db3,frm_db3,self,0); 3: begin if admin_rights[1]<>0 then OpenForm(Tfrm_manager,frm_manager,self,0) else MessageBox(handle,'没有管理权限','信息',0); end; end; end;
----------------------------------------------
维护世界和平,共创美好盒子。