在主窗体中怎样知道那个子窗体创建或者关闭的消息,以及引用该窗体一些方法 我的application中包含MDIForm和MDIChild forms,由于多文档界面,经常要切换当前工作界面。我的做法是通过菜单来控制,在通常的多文档程序中是很常见的,由于对消息不熟,因此找不到简单的实现方法。现在问题是能够得知某一个窗体创建和关闭的消息即可。请朋友们帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if Assigned(Form1) and (Form1.showing) and (Form1.Visible) then 下面只是粗略的代码,TFormInfo结构可以在修改const WM_FORM_CREATE = WM_USER +100; WM_FORM_DESTROY = WM_USER + 101;type PForminfo = ^TForminfoTFormInfo = record FormName : String[20]; //记录窗体名称 FormHandle : THandle; //子窗体句柄 -- 可用,可不用,处于信息完整性考虑,所以写在这end; //---声明 在MDI(MainForm)窗口类中 ---//procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_CREATE;procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_DESTROY;//--- 实现 ---//procedure DOChildFormCreate(var Msg : TMessage);var Addr : DWORD; strname : string;begin Addr := Msg.wParam or Msg.lParam; strname := PForminfo(Pointer(Addr))^.FormName;end;//--- 子窗体创建---//Pinfo : PForminfo;LoAddr,HiAddr : Integer;GetMem(pInfo ,sizeof(TForminfo));pInfo^.FormName := 子窗体名称;pInfo^.FormHandle := 子窗体句柄;LoAddr := LoWOrd(DWORD(pINfo));HiAddr := HiWord(DWORD(pINfo));SendMessage(Application.MainForm.Handle ,WM_FORM_CREATE ,LoAddr,HiAddr);//---子窗体销毁 ---//代码同上//---由于时间仓卒,代码我是直接敲的,没验证,应该没问题. 给分吧:-) 更正:LoAddr := LoWOrd(DWORD(pINfo));HiAddr := HiWord(DWORD(pINfo));更正如下:var dwSource : DWORD;begin dwSource := DWORD(pInfo); HiWord := dwSource and $FFFF0000; LoWord := dwSource And $0000FFFF; ...end; 再次更正://---声明中 --//procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_DESTROY;改为:procedure DOChildFormDestroy(var Msg : TMessage);Message WM_FORM_DESTROY; ACTIVEX如何在ACTVFORM窗口中创建新窗口。 这个查询语句怎么写? fastreport图片的打印 这个是什么问题!高手来解释一下. 查询语句!! 急!关于MDI窗体的生成和命名问题 我想新建一个不带表单的公共单元存储公共变量和函数,但interface到imtepmnet之间不会写请指教 简单问题,解决即给分 100分的问题,两行代码,在线等候。 字符转成字节 请问printer控件在哪里?怎么用? 寻求数据库安装制作程序?
const
WM_FORM_CREATE = WM_USER +100;
WM_FORM_DESTROY = WM_USER + 101;type
PForminfo = ^TForminfo
TFormInfo = record
FormName : String[20]; //记录窗体名称
FormHandle : THandle; //子窗体句柄 -- 可用,可不用,处于信息完整性考虑,所以写在这
end;
//---声明 在MDI(MainForm)窗口类中 ---//
procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_CREATE;
procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_DESTROY;//--- 实现 ---//
procedure DOChildFormCreate(var Msg : TMessage);
var
Addr : DWORD;
strname : string;
begin
Addr := Msg.wParam or Msg.lParam;
strname := PForminfo(Pointer(Addr))^.FormName;
end;//--- 子窗体创建---//
Pinfo : PForminfo;
LoAddr,HiAddr : Integer;
GetMem(pInfo ,sizeof(TForminfo));
pInfo^.FormName := 子窗体名称;
pInfo^.FormHandle := 子窗体句柄;LoAddr := LoWOrd(DWORD(pINfo));
HiAddr := HiWord(DWORD(pINfo));SendMessage(Application.MainForm.Handle ,WM_FORM_CREATE ,LoAddr,HiAddr);//---子窗体销毁 ---//
代码同上//---由于时间仓卒,代码我是直接敲的,没验证,应该没问题. 给分吧:-)
LoAddr := LoWOrd(DWORD(pINfo));
HiAddr := HiWord(DWORD(pINfo));更正如下:
var
dwSource : DWORD;
begin
dwSource := DWORD(pInfo);
HiWord := dwSource and $FFFF0000;
LoWord := dwSource And $0000FFFF;
...
end;
//---声明中 --//
procedure DOChildFormCreate(var Msg : TMessage);Message WM_FORM_DESTROY;改为:
procedure DOChildFormDestroy(var Msg : TMessage);Message WM_FORM_DESTROY;