为什么用close 关闭程序,窗体关闭了但内存没有真正的释放?(在线)

sfxllj 2003-10-16 03:36:04
为什么用close 关闭程序,窗体关闭了但内存没有真正的释放?
...全文
165 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfxllj 2003-10-16
  • 打赏
  • 举报
回复
liufuyahong
你说的方法还是不行
liufuyahong 2003-10-16
  • 打赏
  • 举报
回复
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil (self);
end;
sfxllj 2003-10-16
  • 打赏
  • 举报
回复
Application.CreateForm(TFormDMenu, FormDMenu);
FormDMenu.ShowModal;
FormDMenu.Free;
sfxllj 2003-10-16
  • 打赏
  • 举报
回复
窗口是动态创建的,很多其他的组件也是动态创建的。但创建时没有用nil
就是form:=TForm.Create(application);这种。
foxnt 2003-10-16
  • 打赏
  • 举报
回复
你的问法好象有问题吧。
是关闭单个窗口,还是关闭整个程序?如果是关闭整个程序的话,既然程序都退出来了,还有什么“没有真正释放”的问题吗?
delphi_xizhousheng 2003-10-16
  • 打赏
  • 举报
回复
你创建的时候的是运行时自动创建的还是设计期创建的?
form:=TForm.Create(application);//最好不用写nil
Delphi_Li 2003-10-16
  • 打赏
  • 举报
回复
出现这种情况可能是你的窗口是你动态创建的,创建的参数使用的是Nil,例如:
XXX := TForm.Create( Nil );
由于没有指明XXX的创建者,所以必须使用XXX.Free来释放这个窗口,否则就会出现你所说的问题!!!
delphi_xizhousheng 2003-10-16
  • 打赏
  • 举报
回复
这只是释放内存,没有释放指针
用FreeAndNil(form)
sfxllj 2003-10-16
  • 打赏
  • 举报
回复
不是,我是说程序在关闭之后,内存中还有他在运行。
angle097113 2003-10-16
  • 打赏
  • 举报
回复
onclose事件中
action:=cafree;
waysoft 2003-10-16
  • 打赏
  • 举报
回复
方法之一onclose事件,加入如下语句

Action := caFree;
第一步,建立服务器端。 新建一个窗体,引用NetData_Server后,在窗体中放入一个NetDataServer1 1. 在Form_Load事件中加入: NetDataServer1.Start "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DATA.mdb;", "8080"(8080为端口号,可以随意修改成您需要的) 2. 在Form_Unload事件中加入: NetDataServer1.Down '关闭服务,释放内存... 这样服务端就完成了!!很简单吧。。。。 ———————————————————————————————————————————————————— 第二步,修改客户端。 单机版中的连接字串符: 取消:CONN.OPEN "provider=Microsoft.jet.OLEDB.4.0;data source=D:\sys\data\data.mdb" 改成:NetDataClient1 .Start "192.168.0.1", "8080" 把CONN.Close 改成 NetDataClient1.Down 其他代码保持不变,这样就完成了客服端的升级!!! ———————————————————————————————————————————————————— 要点: 1.服务器端,把数据库文件MDB放到与服务端程序同一文件夹里。 2.客户端如果有多个窗体,连接时要加窗体名如:Form1.NetDataClient1 .Start "192.168.0.1", "8080" (NetDataClient1 .Start "服务器IP地址", "端口号")也可放到模块里定义成共用的。 3.开启服务器端后,客户端方可正常工作 注明:这个版本无后门,使用不受限。
第一步,建立服务器端。 新建一个窗体,引用NetData_Server后,在窗体中放入一个NetDataServer1 1. 在Form_Load事件中加入: NetDataServer1.Start "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DATA.mdb;", "8080"(8080为端口号,可以随意修改成您需要的) 2. 在Form_Unload事件中加入: NetDataServer1.Down '关闭服务,释放内存... 这样服务端就完成了!!很简单吧。。。。 ———————————————————————————————————————————————————— 第二步,修改客户端。 单机版中的连接字串符: 取消:CONN.OPEN "provider=Microsoft.jet.OLEDB.4.0;data source=D:\sys\data\data.mdb" 改成:NetDataClient1 .Start "192.168.0.1", "8080" 把CONN.Close 改成 NetDataClient1.Down 其他代码保持不变,这样就完成了客服端的升级!!! ———————————————————————————————————————————————————— 要点: 1.服务器端,把数据库文件MDB放到与服务端程序同一文件夹里。 2.客户端如果有多个窗体,连接时要加窗体名如:Form1.NetDataClient1 .Start "192.168.0.1", "8080" (NetDataClient1 .Start "服务器IP地址", "端口号")也可放到模块里定义成共用的。 3.开启服务器端后,客户端方可正常工作 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qing205/archive/2010/08/09/5799634.aspx

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧