在dll中如何释放资源!

yjuc 2000-06-15 08:45:00
在我的一个dll里包含form的程序当中!当form以模式窗口(showmodal)建立后利用 form.free可以正常释放资源,但在普通形式下(show)利用 form.free出错!
请问高手们!两者有何区别,如可解决
...全文
162 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2000-06-16
  • 打赏
  • 举报
回复
WINDOWS 的SHOW与HIDE, 与FORM 内存的分配与释放并没有什么直接联系。
dudo 2000-06-16
  • 打赏
  • 举报
回复
使用showmodal显示的窗口在当前的应用程序中其他窗口不能聚焦,只有关闭他以后
别的窗口才能获得焦点,所以也就是只有他关闭之后showmodal 语句的下一行代码才能执行,而且,如果一个窗口已经可见,对它使用showmodal就会报错。
你的情况可能是这种情况, 因为窗口是以非模式方式打开的,所以它的关闭和释放的时机不好掌握,在你已经释放了窗口以后又执行了释放窗口的代码,所以会报错。
可以这样解决:在以非模式打开的窗口的 FormClose()事件中这样处理:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
form1:=nil;//form1为窗口的实例;
end;
这样窗口关闭以后系统就自动释放了窗口,不用再写释放窗口的代码,你要知道窗口当前是否被释放,只要察看穿口实例form1是否为nil即可。
cxjcsdn 2000-06-16
  • 打赏
  • 举报
回复
showmodal 是模式窗体,close 以后再执行后面的代码,
show 是非模式窗体,直接执行后面的代码,

最简单的方法:(关于action可查看help)

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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