我在一个程序中做了70多个窗体.
1.我一般都是先做好要用时除了主窗体不动.其它都是用SELF.CLOSE;和LOGINFRM.show;我发现很占资源,我想是我方法不对,请高手指点!
2.DELPHI7.0中应该有建一个窗体模板的功能,在什么地方怎么用的.我做的程序中大多都是一样的参数,一个一个做太慢了.但又不能在几个窗体上多次引用.谢谢
我还问高手做的程序窗体是怎么控制的,我想是不是我从思路上有问题,应该不用做那么多窗体的吧.程序不太多,除了主窗体,其它窗体怎么减少,多次引用可是在窗体上组件也很多的呀.改组件更累!
谢谢谢谢
1.我一般都是先做好要用时除了主窗体不动.其它都是用SELF.CLOSE;和LOGINFRM.show;我发现很占资源,我想是我方法不对,请高手指点!
2.DELPHI7.0中应该有建一个窗体模板的功能,在什么地方怎么用的.我做的程序中大多都是一样的参数,一个一个做太慢了.但又不能在几个窗体上多次引用.谢谢
我还问高手做的程序窗体是怎么控制的,我想是不是我从思路上有问题,应该不用做那么多窗体的吧.程序不太多,除了主窗体,其它窗体怎么减少,多次引用可是在窗体上组件也很多的呀.改组件更累!
谢谢谢谢
解决方案 »
- delphi调用外部的exe,并阻止该exe文件的弹窗,可以实现吗?
- 求Delphi遍历全盘gif图片的代码
- 请问这样的xml文件怎么建立,谢谢
- 几个基础问题,请教了!
- SQL Server 问题
- 如何让十六进制的串每次增加1?在线等!
- 又长了一个角,散分!
- 我要用模拟标准的发票.该如何处理?
- 请问大大们一个关于richedit的问题
- 我的dbgrid的picklist是动态添加的,想给最终用户也能自定义其值,所以我想往picklist中add一个text文件,其值就在这文件中,而且是放在程序目录的txt目录下,请问如何读入?
- SQL语句错误?
- D7的ListView,当鼠标拖动一个图标到另一个位置DropDown时,怎样判断是在第几个图标旁DropDown的?
frmUser:=TfrmUser.Create;
frmUser.ShowModal;
...
FreeAndNil(frmUser);
2.建立一个窗体基类,建立类似窗体时,可以继承自基类,那些公用的属性事件就可以放到基类中
TBaseForm = Class(TFrom);TForm1 = Class(TBaseForm)
1. 要改為動態創建,不然一啟動就加載,系統會很慢的/ 可以改為: Form1 := TForm1.create(self);
Form1.show; // 在需要加載的時候加載。2. Delphi 有一個 template 功能,不過你更多考慮下繼承,這樣還能省去很多代碼
2.如果每个窗体的功能都差不多,并且风格也差不多,可以考虑使用Frame或者是模板来处理。
3.如果你的窗体基本功能都一致,业务有些差别,那么可以考虑使用继承的方法。有助于窗体重用。
除了主窗体其他的都可以需要时再创建Application.CreateForm那除了主窗体都删了
要用的时候就Create Show Free
在你做好的窗体上单击鼠标右键->选择Add to Repository(加入到库中),弹出对话框后填写相关内容后保存就可以了。
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;
使用Create建立,
使用ShowModal显示
使用Free释放
另外,为了在逻辑上的清晰,提高代码的可读性,最好由一个统一的类来管理 所有窗体的建立和释放(避免放在单独窗体的某某控件的Click事件中),
这样更符合设计标准。(纯属个人愚见。)
Form? = Tform? // 這個?號隨你的窗體不同而有所變化如果你在其它單元創建上面的窗體的話。 form? = Tform?.create(self);
//
因為這個Form? 是全局的,只要是創建後沒有釋放,是可能多個地方都調用的。
{$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;..............
关闭事件中加上
Action:=CAFree;