超级大富翁问题之二 (50分)

  • 主题发起人 主题发起人 windthunder
  • 开始时间 开始时间
W

windthunder

Unregistered / Unconfirmed
GUEST, unregistred user!
与上一个问题类似,MDI窗体
在子窗体的库文件中包含有保存和打开文件的两个进程,调试通过
但在主窗体里调用时,出现地址访问错误,
我的子窗体创建是通过一个单独的过程完成的,
我的程序一运行是默认主窗体打开,而子窗体不打开,
我该如何在猪窗体中实现对子窗体中的内容的保存和打开呢?
如果你想用句柄一类的回答我,劳烦解释的清楚一点,
我是新手!![:)]
 
既然你是新手,那我就客气一点:以后不要起这样的标题,OK?
 
起这样的标题无非是想吸引大家来看,帮忙解决问题,有什么不妥吗?没本事拿分,就别废话
都说这里论坛的高手很多,我觉得不过如此,这么小气,为什么没人能解答呢?[:(]
 
1.子窗体肯定还没创建
// Form1 子窗体
// MainForm 主窗体
if Not Assigned(Form1) then
Application.CreateForm(TForm1, Form1)
else
Form1.WindowState := wsMinimized;
另外:子窗体的关闭还要注意释放。在 ONCLOSE 中:
Action := caFree;
在 ONDESTROY 中:
Self := Nil;

 
我在子窗体打开的情况下,却不能通过主窗体的菜单保存子窗体文件内容是怎么回事?
我是在子窗体通过
Memoinfo.lines.savetofile(filename);
保存文件,
但主窗体在调用时有错误!
打开文件也是;
子窗体: AssignFile(F, filename); { File selected in dialog box }
reset(F); //打开文件
readln(F, datachar);
主窗体调用也不行(子窗体已经创建的情况下)
 
這個簡單啊!也就是子窗体必需創立,才可以調用它的過程!
首先
////////////我的子窗体创建是通过一个单独的过程完成的,
如果你不想調用這個单独的过程來完成创建子窗体,那麼你可以用以下代碼來實現
調用子窗体中的保存和打开文件的两个进程

假定子窗体為form2
…………
uses unit2
………
var abc:Tform2;
begin
abc:=Tform2.Create(self);
abc.保存和打开文件;
end;
順便加一句,我同意base7的意見!大富翁是我們自已的,我們要共同維護才對啊!
如果每個人都出這樣的標題那大富翁不是大亂了!


 
Memoinfo是哪来得?要是子窗体的,一定要保证子窗体实例没有被释放。。
 
delphi浪客,ljy_17,按你说的问题已经基本解决
但现在打开还是有一点问题;
现象:第一次运行程序时,可以打开子窗体的文件,但将这个子窗体关闭后在执行打开的话就有问题了。
分析:按delphi浪客
if Not Assigned(ChildMDIfrm) then CreateMDIChild('发卡_用户卡' + IntToStr(MDIChildCount + 1),0);
//CreateMDIChild()子窗体创建程序;
childMDIfrm.openfile(sender);
//childMDIfrm 创建的子窗体对象
在子窗体中实现
释放。在 ONCLOSE 中:
Action := caFree;
在 ONDESTROY 中:
Self := Nil;
但为什么关闭子窗体后ChildMDIfrm不是nil,难道还没有释放!!
我 错在哪了?
 
Action := caFree;释放了实例所占地内存空间
Self := Nil;释放实例指针
 
在 ONCLOSE 中:
Action := caFree;
在 ONDESTROY 中:
Self := Nil;
但是按你说的还是没有释放呀!
怎么办?
[:(]
 
我刚才试验了一下果然不行,只能应用实例名释放才行
//form2是一个mdi子窗体
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := cafree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
self:= nil;//如果这句释放不掉的
Form2 := nil;//这句就可以了释放掉了
end;
 
[:)]问题解决了,非常感谢delphi浪客,同时也谢谢ljy_17
 
多人接受答案了。
 
后退
顶部