我在一个程序中做了70多个窗体.
1.我一般都是先做好要用时除了主窗体不动.其它都是用SELF.CLOSE;和LOGINFRM.show;我发现很占资源,我想是我方法不对,请高手指点!
2.DELPHI7.0中应该有建一个窗体模板的功能,在什么地方怎么用的.我做的程序中大多都是一样的参数,一个一个做太慢了.但又不能在几个窗体上多次引用.谢谢
我还问高手做的程序窗体是怎么控制的,我想是不是我从思路上有问题,应该不用做那么多窗体的吧.程序不太多,除了主窗体,其它窗体怎么减少,多次引用可是在窗体上组件也很多的呀.改组件更累!
谢谢谢谢

解决方案 »

  1.   

    Delphi-Project-Options-Forms-Auto Create Forms中,把除了主窗体外的窗体放在右边动态建立的列表中,用的时候再
    frmUser:=TfrmUser.Create;
    frmUser.ShowModal;
    ...
    FreeAndNil(frmUser);
      

  2.   

    1.工程文件中只保留必须静态创建的窗体(比如主窗体),其它都在程序中静态创建
    2.建立一个窗体基类,建立类似窗体时,可以继承自基类,那些公用的属性事件就可以放到基类中
    TBaseForm = Class(TFrom);TForm1 = Class(TBaseForm)
      

  3.   


    1. 要改為動態創建,不然一啟動就加載,系統會很慢的/  可以改為: Form1 := TForm1.create(self);
                Form1.show;  //  在需要加載的時候加載。2. Delphi  有一個 template  功能,不過你更多考慮下繼承,這樣還能省去很多代碼
      

  4.   

    1.首先动态加载是必须的。
    2.如果每个窗体的功能都差不多,并且风格也差不多,可以考虑使用Frame或者是模板来处理。
    3.如果你的窗体基本功能都一致,业务有些差别,那么可以考虑使用继承的方法。有助于窗体重用。
      

  5.   

    你肯定是全部就自动创建了 不慢是不可能的
    除了主窗体其他的都可以需要时再创建Application.CreateForm那除了主窗体都删了
    要用的时候就Create Show Free
      

  6.   

    2.DELPHI7.0中应该有建一个窗体模板的功能,在什么地方怎么用的.我做的程序中大多都是一样的参数,一个一个做太慢了.但又不能在几个窗体上多次引用.谢谢
    在你做好的窗体上单击鼠标右键->选择Add to Repository(加入到库中),弹出对话框后填写相关内容后保存就可以了。
      

  7.   

    在主窗体的uses里面应用其他窗体,然后动态创建其他的窗体{动态创建}
    implementation
    uses Unit2;{主窗体引用Form2窗体}
    {$R *.DFM}
    procedure TForm1.N3Click(Sender: TObject);
    var
      Form2:TForm2;
    begin
      Form2:=TForm2.Create(nil);
      try
        Form2.ShowModal;
       {Form2.Show;}
      finally
        form2.Free;
      end;
    end;
    {Form2窗体关闭后释放}
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=CAFree;
    end;
      

  8.   

    Project-Options-Forms,在Auto-Create forms里面保存自动创建的窗体,在Available forms里面保存动态创建的窗体!
      

  9.   

    同意楼上。
    使用Create建立,
    使用ShowModal显示
    使用Free释放
    另外,为了在逻辑上的清晰,提高代码的可读性,最好由一个统一的类来管理 所有窗体的建立和释放(避免放在单独窗体的某某控件的Click事件中),
    这样更符合设计标准。(纯属个人愚见。)
      

  10.   

    每個窗體的單元文件一般都有一個這樣的聲明:var
      Form? = Tform?    //  這個?號隨你的窗體不同而有所變化如果你在其它單元創建上面的窗體的話。 form? = Tform?.create(self);
    //
     因為這個Form?  是全局的,只要是創建後沒有釋放,是可能多個地方都調用的。
      

  11.   

    看你的工程文件,我的工作文件只保留DataModule,登录窗口其他都动态创建..............
    {$R *.RES}begin
      Application.Initialize;
      Application.Title :='旅客登记系统';
      Application.CreateForm(TSYSDM, SYSDM); //数据DataModule
      FrmUserLog:=TFrmUserLog.Create(application); //登录窗口
      if FrmUserLog.ShowModal=mrOk then//登录窗体关闭时返回了mrOK值,说明登录成功
      begin
        Application.CreateForm(TMainForm, MainForm);//显示主窗体
      end;
      FrmUserLog.Free;
      Application.Run;
    end.//在MainForm中再动态创建其他子窗体
    ..............
    implementationuses SetSysInf, SysFunction, PrintReport, EndPort, TicketType,
      TakeBoat, TravellerScan, personal, UserManage, GroupManage, ChangePassWord,
      DayReport, SysInfo ,Country, Camer, SF_Time, U_Price, Ticket, FindPersonal, FindGroup,
      About, CheckTicket ,FindError ,FindLuggage ,MonthReport ,ImportExcel ,ReturnTax, ReturnGroupTax ,
      ExcelModel ,AirPortManage ,ChartUnit ,PrintReport2 ,FindDelPersonal ,BordingPass ,FindGroupError;
    {$R *.DFM}procedure TMainForm.N27Click(Sender: TObject);
    var
      FrmFindPersonal :TFrmFindPersonal;
    begin
      FrmFindPersonal :=TFrmFindPersonal(Application.FindComponent('FrmFindPersonal'));
      if not(Assigned(FrmFindPersonal)) then
       begin
         FrmFindPersonal :=TFrmFindPersonal.create(Application);
       end;
      FrmFindPersonal.show;   
    end;procedure TMainForm.N18Click(Sender: TObject);
    var
      FrmGroupManage :TFrmGroupManage;
    begin
      LocateG :='';  FrmGroupManage :=TFrmGroupManage(Application.FindComponent('FrmGroupManage'));
      if not(Assigned(FrmGroupManage)) then
      begin
        FrmGroupManage :=TFrmGroupManage.create(Application);
      end;
      FrmGroupManage.show;
    end;..............
      

  12.   

    楼主这样做出来的EXE肯定超大,哈哈 
      

  13.   

    如果用close的话,在
    关闭事件中加上
    Action:=CAFree;