当前位置:主页>仓库管理软件> 列表

关于窗体释放的问题(form1.free) 找用友财务软件官网

销售管理软件版1楼: 轻大家帮我看看下面的代码,我没有搞清楚为什么这么写
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
application.CreateForm(TIDmanage,IDmanage);//IDmanage为窗体名,并且把这个窗体设
//置为Aviliable forms
idmanage.ShowModal;
idmanage.Free;//请问为什么在这里写“free”?如果执行这条语句的话,窗体是不是自动
//关闭,并释放内存空间?但是为什么程序执行的时候窗体"showmodal"以
//后,窗体并没有没有马上自动关闭?
end;
最后还要问一下,当这样打开的窗体我们关闭以后,这个窗体占用的内存空间有没有释放?

2楼: 帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力! 如管家婆软件使用说明

3楼: 动态地创建窗口是本着节约资源的思想。用到窗口资源的时候就创建,创建完了就放。


执行到free当然会关闭了。。因为释放了资源嘛!!!!
idmanage.ShowModal; 这个当然关闭,因为他好像模式窗口吧!(我也记不清了)如果你换成这个idmanage.Show,肯定会马上关闭。

4楼: 执行到SHOWMODAL的时候程序"停"在了这一句
直到关闭这个模态窗口(调用CLOSE),这样才会执行
到下一句FREE,
如果用SHOW则不一样,程序会继续执行下去
也可以这样说 SHOWMODAL是“同步“的,SHOW是“异步“的

5楼: form:= TForm???.Create(nil);
try
form.ShowModal;
finally
form.Free;
end;

6楼: sparkif的说法确是一种通俗的理解方式了,
show方法仅是将窗体进行显示处理,并未把系统控制权移交给它,而showmodal则是除了显示窗体外,还一并将系统权移交给该窗体,直到该窗体执行close来释放控制权后,系统才会交给下一语句。

销售管理软件版7楼: 帮顶呀

8楼: free,close和teminate看源代码吧.
所有的这些对应着API中的函数.要仔细研究,WIN32的水平就会变高.

9楼: 在TCustomForm.ShowModal中有:
....
repeat
Application.HandleMessage;
if Application.FTerminate then ModalResult := mrCancel else


if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
.....
这段代码很清楚说明问题了,如果不是整个程序结束,或者ModalResult为0就一直循环

10楼: 不要忘了 在onclose事件中加Action:=cafree;

11楼: 楼上的是什么意思啊?能不能说详细一点啊

12楼: 在MIDCLIENT中,关闭的时候一般最小化
用CAFREE就关掉了 如易语言进销存源码

13楼: 关闭动态创建的窗体时一般是用:
procedure TFrmPVfs.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caFree;
end;

procedure TFrmPVfs.FormDestroy(Sender: TObject);
begin
FrmPVfs:=NIL;
end;
动态创建是这样:
if not Assigned(FrmPVfs) then
FrmPVfs:=TFrmPVfs.Create(self);
FrmPVfs.Show;

=====================================================
中国原创软件园 www.dhss.cn 程序员共同的家园
技术群: delphi+SQL Server 14799474

销售管理软件版14楼: 我再请问各位了,像我上面的代码那样动态创建窗体,和关闭窗体实现的功能是不是一样的啊?
太多东西不懂了,谢谢各位赐教

15楼: procedure TFrmPVfs.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caFree;
FrmPVfs := nil;
end;
//之后显示代码要先判断窗体是否为NIL,然后SHOWMODAL

16楼: 没有关是因为还没执行到 FREE 的那一句!

17楼: 建议看一下模态窗体的原理

18楼: 代码动态创建窗体 和关闭窗体实现的功能 是不一样的 关闭的窗体还在内存中。没有被卸载到。仍站用内存。

19楼: 你的代码没有问题,并且也是一种常用的用法,对于ShowModal的窗体,一般都是在ShowModal之后,通过Free进行释放。
而对于Show的窗体(即调用Show进行显示的),不可以在Show之后就调用Free。一般是象楼上所说的,在OnClose里面进行处理(将Action设为caFree)。

20楼: 当是showmodal时
将主线程交到窗体2
当窗体2关闭后才会执行下一句
show则是一直执行

销售管理软件版21楼: 谢谢各位,终于有点明白了。
给分了~~~~~~~~~~

22楼: 多人接受答案了。 如用友财务软件官网