好久不用delphi了今天用了一下 发现一个很古怪的问题(100分)

  • 主题发起人 主题发起人 lizhi2000
  • 开始时间 开始时间
L

lizhi2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用MDI窗体在主窗口里面创建了一个子窗口
用如下的代码来创建子窗口
Application.CreateForm(TFormDrawingArea, FormDrawingArea);
FormDrawingArea.Left:=1;
FormDrawingArea.Top:=1 ;
FormDrawingArea.Height:=MainForm.Height -160 ;
FormDrawingArea.width:=MainForm.Width - 20 ;
FormDrawingArea.Tag := MDINUM; //流程框的tag为正整数 其他框的tag为 0
FormDrawingArea.show;
在TFormDrawingArea类中我有这样一个函数,用来返回当前子窗体的标题
function TFormDrawingArea.GetCaption2():String ;
begin
GetCaption2:=FormDrawingArea.Caption;
end;
我是这样调用的,在一个菜单项上加入一下代码
showmessage(inttostr(TFormDrawingArea(ActiveMDIChild).Tag));
showmessage(TFormDrawingArea(ActiveMDIChild).GetCaption2() + ':' + TFormDrawingArea(ActiveMDIChild).Caption );
SaveDialog.FileName:=TFormDrawingArea(ActiveMDIChild).Caption;
得到的结果很怪
  当我打开多个子窗体的时候 
  TFormDrawingArea(ActiveMDIChild).GetCaption2() 返回的值是最后一个打开的子窗体
的标题 ,而TFormDrawingArea(ActiveMDIChild).Caption返回的值是当前我激活的子窗体
的值。
  哪位大侠给我解释一下。
 
FormDrawingArea是个实例变量,那么FormDrawingArea.Caption肯定返回的是其最后一次
所赋值的Caption.
而ActiveMDIChild指的是MDI窗口的当前活动窗口,TFormDrawingArea(ActiveMDIChild).Caption
是把ActiveMDIChild所指的窗口强制转换为TFormDrawingArea型而已,Caption还是ActiveMDIChild
的,这和TForm(ActiveMDIChild).Caption是一样的。
 
我想你先把源代码CC给我行不
我是第一你次来请别见笑
Coldew
2001/12/12
 
应该遍历CHILDFORM得到caption,一般来说activechild就够用了,因为赋值caption这样的事
应该在创建时完成,或用tag什么的做标记。如果真要在程序中判断非激活的子窗体,当然要
用for .....而且要注意的是,子窗体数组也是活动的。
 
Coldew:
如何给你
 
ZZHI:
如你所说我的FormDrawingArea 是个实例得变量,
我的 FormDrawingArea是这样定义的
FormDrawingArea: TFormDrawingArea;FormDrawingArea的各种属性值是最后一次的值,
要但是用到TFormDrawingArea的实际的对象的属性应该如何做呢
是不是我的如下代码友问题 呢 我的FormDrawingArea是个全局变量
Application.CreateForm(TFormDrawingArea, FormDrawingArea);
FormDrawingArea.Left:=1;
FormDrawingArea.Top:=1 ;
FormDrawingArea.Height:=MainForm.Height -160 ;
FormDrawingArea.width:=MainForm.Width - 20 ;
FormDrawingArea.Tag := MDINUM; //流程框的tag为正整数 其他框的tag为 0
FormDrawingArea.show;
如何解决这个问题呢

 
后退
顶部