DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 16
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
女 hljlzh80 (any) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 18:45:43
标题:
窗体释放的问题,急!!!!!!召唤高手!!!!!!!!!!!!!!!!!! 浏览:1799
加入我的收藏
楼主: 把作好的几部分放在一起,用一个总的窗体控制,为什么某个窗体打开关闭后,再次打开的时候,这个子窗体仍然保留着上次操作后的样子?

是子窗体释放的问题还是总窗体没有控制好呢?

请高手指点一下!

多谢了!
----------------------------------------------
-
作者:
男 scan666 (scan666) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 18:55:40
1楼: 请注上代码
----------------------------------------------
按此在新窗口浏览图片
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 19:00:06
1楼: 你是不是让DELPHI自动创建的窗体?而且只把它给CLOSE一下或是点了一下关闭按钮?
如果是这样,因为它们的宿主的原因当你只是简单的CLOSE的话是不能释放窗体的,在它再次显示的时候当然还是以前的状态,你可以在OnClose中让action:=caFree;或者使用free方法.
因为这方面我也刚刚问过,不是很懂,你先试一下吧,如果不对请原谅!
----------------------------------------------
-
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 19:02:37
2楼: 不过要是这样的话你要在下次显示窗体时使用Create自己创建了,同时要注意避免重复创建实例。
----------------------------------------------
-
作者:
女 hljlzh80 (any) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 19:09:22
2楼: 主窗体用的是:
if not assigned(subform) then
     subform:=Tsubform.Create(subform);
subform.Show;

zxdcj你好!
子窗体中我在onclose事件中写的就是free,没有用。那个cafree没有,我试试

还有高手么,快来帮忙呀
----------------------------------------------
-
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 20:56:54
3楼: 是这个效果吗?
form2不能用自动创建!
此帖子包含附件:zxdcj_2004220205653.rar 大小:3,829B
----------------------------------------------
-
作者:
男 perry2001 (古怪精灵) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 21:10:21
4楼: 是这样的,如果你要用当onclose时 action:=cafree的话,一般都是用form:=tform.creat(application); form.showmodal; 这时要在资源文件中将自动创建form的语句去掉;就好了
----------------------------------------------
-
作者:
男 csdyyr (csdyyr) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 22:02:27
5楼: 同意楼上的
----------------------------------------------
-
作者:
男 ganbing (干冰) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 23:01:21
6楼: 想知道
我用close关闭了窗体,是不是在内存中没有释放

----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/21 8:04:45
7楼: 以下言论不一定对,各位挑着看:
如果是主窗体,正常close后就已把它释放,但如果是从的那么只是普通的close后是不会释放,只是隐藏了,因为它的宿主是主窗体,生杀大权可能是在主窗体的手中吧(这只是个人理解不一定对的)。如果想让它真正关闭那就得处理它的OnClose事件,也就是把action:=caFree。
----------------------------------------------
-
作者:
女 hljlzh80 (any) ★☆☆☆☆ -
盒子活跃会员
2004/2/22 9:29:41
8楼: 多谢各位,我是先free,然后在nil。现在看这样做还可以,没有什么问题,不知道各位还有什么更好的办法。
----------------------------------------------
-
作者:
男 easykey (悠游) ★☆☆☆☆ -
盒子活跃会员
2004/2/23 16:18:37
9楼: 这样:
  try
    subform := Tsubform.Create(nil);
    subform.ShowModal;
  finally
    FreeAndNil(subform);
  end;
建议你看一下刘艺的《Delphi面向对象编程思想》
----------------------------------------------
按此在新窗口浏览图片
男儿贵展平生志,为国输忠合天地。甲穿虽则失黄金,剑缺犹能生紫气。塞草萋萋兵士苦,胡虏如今勿胡虏。封侯十万始无心,玉关生入君看取。

敬请光临 学海Delphi站
  http://delphi.studysea.net
学海无涯,让我们共同成长!
作者:
男 scan666 (scan666) ★☆☆☆☆ -
盒子活跃会员
2004/2/23 16:58:30
10楼:     函数功能:该函数设置指定窗口的显示状态。

    函数原型:BOOL ShowWindow(HWND hWnd,int nCmdShow);

    参数:

    hWnd:窗口句柄。

    nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:

    SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。

    SW_MIOE:隐藏窗口并激活其他窗口。

    SW_MAXIMIZE:最大化指定的窗口。

    SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。

    SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。

    SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。

    SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。

    SW_SHOWMAXIMIZED:激活窗口并将其最大化。

    SW_SHOWMINIMIZED:激活窗口并将其最小化。

    SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。

    SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。

    SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。

    SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。

    返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。

    备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。

    正如在nCmdShow参数中声明的,如果调用应用程序的程序使用了在STARTUPINFO结构中指定的信息来显示窗口,则在第一次调用ShowWindow函数时nCmdShow参数就被忽略。在这种情况下,ShowWindow函数使用STARTUPINFO结构中的信息来显示窗口。在随后的调用中,应用程序必须调用ShowWindow 函数(将其中nCmdShow参数设为SW_SHOWDEFAULT)来使用由程序调用该应用程序时提供的启动信息。这个处理在下列情况下发生:

    应用程序通过调用带WS_VISIBLE标志的函数来创建它们的主窗口函数;

    应用程序通过调用清除了WS_VISIBLE标志的CteateWindow函数来创建主窗口函数,并且随后调用带SW_SHOW标志的ShowWindow函数来显示窗口;

    Windows CE:nCmdShow参数不支持下列值:

    SW_MAXIMINZE;SW_MINIMIZE;SW_RESTORE;SW_SHOWDEFAULT

    SW_SHOWMAXIMIZED;SW_SHOWMINIMIZED;SW_SHOWMININOACTIVATE

    速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;头文件:winuw库文件:user32.lib。


----------------------------------------------
按此在新窗口浏览图片
作者:
女 hljlzh80 (any) ★☆☆☆☆ -
盒子活跃会员
2004/2/24 9:21:18
11楼:  scan666 您也太高深了,我下来慢慢研究一下,多谢!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS