菜鸟第一次做这么大的程序,有100多个窗体,一大堆数据表,所以程序启动后,主窗体要7、8秒以后才出来,怎样先显示一张图片或者别的形式打发时间,请有经验的高手帮忙

  • 主题发起人 主题发起人 xiaoxiami2
  • 开始时间 开始时间
X

xiaoxiami2

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟第一次做这么大的程序,有100多个窗体,一大堆数据表,所以程序启动后,主窗体要7、8秒以后才出来,怎样先显示一张图片或者别的形式打发时间,请有经验的高手帮忙!(50分)<br />菜鸟第一次做这么大的程序,有100多个窗体,一大堆数据表,所以程序启动后,主窗体要7、8秒以后才出来,怎样先显示一张图片或者别的形式打发时间,请有经验的高手帮忙!
 
看看我做的这段代码,希望对你有帮助。

program MainProject;

uses
Forms,
MainUnit in 'MainUnit.pas' {MainForm},
FlashUnit in 'FlashUnit.pas' {FlashForm},
ReEnterDoor in 'ReEnterDoor.pas' {RePasswordDlg},
About in 'About.pas' {AboutBox},
QuitMIS in 'QuitMIS.pas' {QuitMISForm},
EnterDoor in 'EnterDoor.pas' {PasswordDlg},
fDeptNo in 'fDeptNo.pas' {DeptNoForm},
fEducation in 'fEducation.pas' {EducationForm},
fNative in 'fNative.pas' {NativeForm};

{$R *.res}

begin
Application.Initialize;
FlashForm:=TFlashForm.Create(Application); //显示图片的窗体
FlashForm.Show;
FlashForm.Update;
PasswordDlg:=TPasswordDlg.Create(Application);
PasswordDlg.Show;
PasswordDlg.Update;
while PasswordDlg.Active do
Application.ProcessMessages;
PasswordDlg.Close;
PasswordDlg.Free;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TQuitMISForm, QuitMISForm);
Application.CreateForm(TRePasswordDlg, RePasswordDlg);
Application.CreateForm(TDeptNoForm, DeptNoForm);
Application.CreateForm(TEducationForm, EducationForm);
Application.CreateForm(TNativeForm, NativeForm);
FlashForm.Hide;
FlashForm.Free; //注意释放
Application.Run;
end.
 
你不会同时打开100多个窗体吧???

多用动态创建,query,table之类必要才open
 
就是!窗口要用动态创建,数据要用时才打开。
 
大哥们,我的table和query确实是用时才打开的,不过怎么动态创建窗体啊?
 
楼上的:
FlashForm:=TFlashForm.Create(Application); //显示图片的窗体
FlashForm.Show;
FlashForm.Update;
FlashForm.free;
就是动态创建的,不过在工程属性中选中不用自动加载。。
 
菜鸟的代码合理吗?怎么改进?
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {denglu},
Unit2 in 'Unit2.pas' {zhuce},
Unit3 in 'Unit3.pas' {ruanjianshengming},
Unit4 in 'Unit4.pas' {ceo_qq},
Unit5 in 'Unit5.pas' {zaixianyonghu},
Unit6 in 'Unit6.pas' {tianjiayonghu},
Unit7 in 'Unit7.pas' {DataModule7: TDataModule},
Unit8 in 'Unit8.pas' {fasongxiaoxi},
Unit9 in 'Unit9.pas' {caigou_bijia},
Unit10 in 'Unit10.pas' {Form6},
Unit11 in 'Unit11.pas' {gong_shi_ban},
Unit12 in 'Unit12.pas' {jihua_shenqing},
Unit13 in 'Unit13.pas' {jihua_shenpi},
Unit14 in 'Unit14.pas' {caigou_hetong_qianding1},
Unit15 in 'Unit15.pas' {caigou_jihua1},
Unit16 in 'Unit16.pas' {kufang_1234},
Unit17 in 'Unit17.pas' {kufang_panku_baogao},
Unit18 in 'Unit18.pas' {kufang_dae_kucun},
Unit19 in 'Unit19.pas' {kufang_kucun_chaxun1},
Unit20 in 'Unit20.pas' {wenjian_pifu},
Unit21 in 'Unit21.pas' {qq_shezhi},
Unit22 in 'Unit22.pas' {caiwu_jiesuan},
Unit23 in 'Unit23.pas' {DataModule23: TDataModule},
Unit24 in 'Unit24.pas' {jihua_pifu1},
Unit25 in 'Unit25.pas' {kufang_rukudan},
Unit26 in 'Unit26.pas' {kufang_zhangye},
Unit27 in 'Unit27.pas' {wodechuanzhen},
Unit28 in 'Unit28.pas' {fasongduanxin},
Unit29 in 'Unit29.pas' {lianjie},
Unit30 in 'Unit30.pas' {kucanshangxiaxian},
Unit31 in 'Unit31.pas' {shichang_zhunru},
Unit32 in 'Unit32.pas' {shichang_zhunru1},
Unit33 in 'Unit33.pas' {shichang_zhunru2},
Unit34 in 'Unit34.pas' {shichang_zhunru3},
Unit35 in 'Unit35.pas' {shichang_zhunru4},
Unit36 in 'Unit36.pas' {gonghuo_shang_guanli},
Unit37 in 'Unit37.pas' {kehu_fuwu_xinxi},
Unit38 in 'Unit38.pas' {hetong_jiesuan_shenpi},
Unit39 in 'Unit39.pas' {caiwu_baogao},
Unit40 in 'Unit40.pas' {Form40};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(Tdenglu, denglu);
Application.CreateForm(Tzhuce, zhuce);
Application.CreateForm(Truanjianshengming, ruanjianshengming);
Application.CreateForm(Tceo_qq, ceo_qq);
Application.CreateForm(Tzaixianyonghu, zaixianyonghu);
Application.CreateForm(Ttianjiayonghu, tianjiayonghu);
Application.CreateForm(TDataModule7, DataModule7);
Application.CreateForm(Tfasongxiaoxi, fasongxiaoxi);
Application.CreateForm(Tcaigou_bijia, caigou_bijia);
Application.CreateForm(TForm6, Form6);
Application.CreateForm(Tgong_shi_ban, gong_shi_ban);
Application.CreateForm(Tjihua_shenqing, jihua_shenqing);
Application.CreateForm(Tjihua_shenpi, jihua_shenpi);
Application.CreateForm(Tcaigou_hetong_qianding1, caigou_hetong_qianding1);
Application.CreateForm(Tcaigou_jihua1, caigou_jihua1);
Application.CreateForm(Tkufang_1234, kufang_1234);
Application.CreateForm(Tkufang_panku_baogao, kufang_panku_baogao);
Application.CreateForm(Tkufang_dae_kucun, kufang_dae_kucun);
Application.CreateForm(Tkufang_kucun_chaxun1, kufang_kucun_chaxun1);
Application.CreateForm(Twenjian_pifu, wenjian_pifu);
Application.CreateForm(Tqq_shezhi, qq_shezhi);
Application.CreateForm(Tcaiwu_jiesuan, caiwu_jiesuan);
Application.CreateForm(TDataModule23, DataModule23);
Application.CreateForm(Tjihua_pifu1, jihua_pifu1);
Application.CreateForm(Tkufang_rukudan, kufang_rukudan);
Application.CreateForm(Tkufang_zhangye, kufang_zhangye);
Application.CreateForm(Twodechuanzhen, wodechuanzhen);
Application.CreateForm(Tfasongduanxin, fasongduanxin);
Application.CreateForm(Tlianjie, lianjie);
Application.CreateForm(Tkucanshangxiaxian, kucanshangxiaxian);
Application.CreateForm(Tshichang_zhunru, shichang_zhunru);
Application.CreateForm(Tshichang_zhunru1, shichang_zhunru1);
Application.CreateForm(Tshichang_zhunru2, shichang_zhunru2);
Application.CreateForm(Tshichang_zhunru3, shichang_zhunru3);
Application.CreateForm(Tshichang_zhunru4, shichang_zhunru4);
Application.CreateForm(Tgonghuo_shang_guanli, gonghuo_shang_guanli);
Application.CreateForm(Tkehu_fuwu_xinxi, kehu_fuwu_xinxi);
Application.CreateForm(Thetong_jiesuan_shenpi, hetong_jiesuan_shenpi);
Application.CreateForm(Tcaiwu_baogao, caiwu_baogao);
Application.CreateForm(TForm40, Form40);
Application.Run;
end.
 
我倒!
怪不得你会慢!
在论坛上再看看帖子吧?
偷偷的问一句:这样CODE能给用户用吗??????????
 
用到时 再 建 ,

你 这样, 不管用不用到 全建 , 当然太累了.

用时 再 Create
 
怪不得会慢,程序不能这样做的。
 
真的是超级菜鸟,没的说的
 
哈哈,原來還有比我更....
 
程序初运行时只创建主要的数据模块和主窗体等,子窗体或其他对象在使用的时候再创建
使用完毕后释放,毕竟100多个窗体并非每次都全部使用

Form1 := TForm1.create(self);
Form1.ShowModal;
Form1.Free;
 
to xiaoxiami2:
只有用到窗体时时,才创建它。用完之后再将它占用的资源释放。
不然资源占用的太厉害了。
我现在开发的程序有将近400个窗体,向你那样做,估计程序都运行不起来。
应该用下面形式:
Form1 := TForm1.create(self);
Form1.ShowModal;
Form1.Free;
程序够你改的了[^]
 
动态创建窗体要先打开项目选项对话框,在forms页中, 把Auto-create forms列表框中的
form,除了主窗体,都移动到Available forms列表框中,这样这些窗体就不会在程序启动时
自动创建也就不会延迟启动时间了,在需要创建时,动态创建,为防止窗体创建后再被二
次创建,要先检查一下,比如需要创建窗体form1,那么:
if not assigned(form1) then //是否还没创建
begin
form1:=tform1.create(self); //如没,那么创建
form1.show;
end;
但注意释放form1时,要:
form1.free;
form1:=nil;
如果不加后一句,那么not assigned(form1)将是false,再次启动form1时,不能启动.
 
不会要这么多的饿Form吧,如果类似的窗体你可以用控件堆几层,要用是显示它,不用隐藏
它,或者Form1 := TForm1.create(self);
Form1.ShowModal;
Form1.Free;
 
一次创建这么多的窗口,这个方案行不通。
 
制作启动画面:
  建一个启动封面窗体,假设为Form2,先设置好BorderIcons、BorderStyle、FormStyle、Position,接着在窗体上加入图片框、文本框,设置好后在菜单里选Project里的
Options,把Form2从Auto-create forms里转到Available forms。再接着就是按Ctrl+F12键,选Project1,出现工程单元,其内容如下

...

Application.CreateForm(TForm1, Form1);

Application.Run;

..

  在Application.CreateForm(TForm1, Form1); 前加入如下语句:

form2:=tform2.create(application);

form2.Show;

form2.Update;

  然后在Application.Run;前面加入如下语句:

form2.hide;

form2.free;
 
谢谢各位大侠的教诲,菜鸟一定铭记与心!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部