动态创建后ShowModal()要释放吗?急急~~~~~~~急

udsbud 2008-03-04 04:09:18
窗口A:
function LDyuding(ABXBH, AGKDH, AGKMC: String): Boolean;
begin
with TfrmLDyuding.Create(Application) do
begin
try
Screen.Cursor := CursorSave;
ShowModal();
Result := FChange;
finally
Destroy();
end;
end;
end;
窗口B:
有一个设备一直在监听是否在电话打进来,若有响应如下代码:
procedure Tf_main.TeleComport1Read(Sender: TObject; s: String;
t: TDateTime; DevID: String);
begin
FGKDH := s;
FGKMC := GetGKMCOFDH(s);
LDyuding('', FGKDH,FGKMC);
end;
end;
然后弹出窗口A:,进来来电处理,处理完毕关闭窗口A:.
退出窗口返回
ModalResult := mrOK;

问题在于,第前两三个电话打时来的时候一切正常,可是多打几个电话进来程序就死了,未响应了.
请问这种情况下是不是在窗口A关闭时要free?
但是我用一个button 来调用 LDyuding('', 'FGKDH','FGKMC');时,点多少点都很正常.




...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
udsbud 2008-03-07
  • 打赏
  • 举报
回复
跟free无关,不知道是什么地方出问题了.
udsbud 2008-03-06
  • 打赏
  • 举报
回复
跟free真的没有关系,用了free一样是死了,出现未响应.

下面这个是设备控件接收信息的事件.演示例子也是这样子调用,应该不会有问题的吧.
//有来电时激活此事件
//s为来电号码,t为来电时间
procedure TForm1.TeleComport1Read(Sender: TObject; s: String; t: TDateTime;
DevID: String);
begin
Memo1.Lines.Add(DevID+' '+s+FormatDateTime(' yyyy-mm-dd hh:nn:ss', t));
end;

我把它改成这样子应该不会有问题吧?
//FGKDH 为记录电话号码的全局变量
//FGKMC 为记录来电人
//LDyuding(a,b ,c )//把来电的人与电话号码用一窗口显示出来.并做一些相关操作.
procedure Tf_main.TeleComport1Read(Sender: TObject; s: String;
t: TDateTime; DevID: String);
begin
FGKDH := s;
FGKMC := GetGKMCOFDH(s);
LDyuding('', FGKDH,FGKMC);
end;
end;
Ascn 2008-03-04
  • 打赏
  • 举报
回复
同意楼上,释放时用Free,Free的好处是当对象为nil时仍然能成功而不出错。

我猜测楼主的问题不是释放窗体引起的,是不是其他地方的代码有问题啊?
udnui 2008-03-04
  • 打赏
  • 举报
回复
在TfrmLDyuding窗中的onclose事件下,写Action:=cafree;也可以
udnui 2008-03-04
  • 打赏
  • 举报
回复
就是把Destroy改为Free
qkhhxkj102 2008-03-04
  • 打赏
  • 举报
回复
Action:=cafree;
ly_liuyang 2008-03-04
  • 打赏
  • 举报
回复
不要用Destroy!!!改为Free
jimoguilai3 2008-03-04
  • 打赏
  • 举报
回复
那就检查一下GetGKMCOFDH

家断电,看看死的时候运行到哪了

828

社区成员

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

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