我在DLL创建了一些窗体,想在主窗体中通过发消息的方式把在DLL中创建的窗体关闭:
var
Frm:THandle;
begin
Frm:= Findwindowex(0,0,nil,'生产单'); //这样写可以找到句柄,但下面一句确没有反映,不知道为什么
sendMessage(Frm,WM_CLOSE,0,0);
//备注:生产单是我在DLL中创建的窗体的名称
//-----------下面为DLL创建窗体的代码--------------------
procedure CreateJobFrm(AHandle:THandle;AOwner:TWinControl);stdcall;
i:Integer;
begin
Application.Handle := AHandle;
if FrmJob=nil then
begin
FrmJob:=TFrmJob.Create(Application);
FrmJob.BorderStyle:=bsNone;
frmjob.ParentWindow:=AOwner.Handle;
FrmJob.Show;
FrmJob.Align:=alClient;
end end;//------主窗体调DLL------------
//调用dll声明
InvokeDLLForm = procedure(AHandle:THandle;AOwner:TWinControl);stdcall; DLLHandle:= LoadLibrary(PChar(DllName)); //调用dll
if DLLHandle <> 0 then
begin
@DLLsub := GetProcAddress(DLLHandle,PChar(FrmName)); //调用dll中的函数
if Assigned(DLLsub) then
begin
DLLsub(Application, Screen,RzTabSheet1,PageList);
end;
end;
var
Frm:THandle;
begin
Frm:= Findwindowex(0,0,nil,'生产单'); //这样写可以找到句柄,但下面一句确没有反映,不知道为什么
sendMessage(Frm,WM_CLOSE,0,0);
//备注:生产单是我在DLL中创建的窗体的名称
//-----------下面为DLL创建窗体的代码--------------------
procedure CreateJobFrm(AHandle:THandle;AOwner:TWinControl);stdcall;
i:Integer;
begin
Application.Handle := AHandle;
if FrmJob=nil then
begin
FrmJob:=TFrmJob.Create(Application);
FrmJob.BorderStyle:=bsNone;
frmjob.ParentWindow:=AOwner.Handle;
FrmJob.Show;
FrmJob.Align:=alClient;
end end;//------主窗体调DLL------------
//调用dll声明
InvokeDLLForm = procedure(AHandle:THandle;AOwner:TWinControl);stdcall; DLLHandle:= LoadLibrary(PChar(DllName)); //调用dll
if DLLHandle <> 0 then
begin
@DLLsub := GetProcAddress(DLLHandle,PChar(FrmName)); //调用dll中的函数
if Assigned(DLLsub) then
begin
DLLsub(Application, Screen,RzTabSheet1,PageList);
end;
end;
解决方案 »
- 如何获取 frame 在父 document 中的 element 节点
- 如何动态的修改一个dll的版本信息?
- 怎样使 File - Reopen 中的历史项目数增加到15个?
- 想学delphi 大家说用Delphi 6 Personal Edition 还是用Delphi V7.0 正式版,大概几天可以入门啊?大牛门过来说说
- 请问哪里有delphi开发游戏的directx版,delphix;
- 100分求助:如何用代码设置DBChart(我在关注,知道的请进!)
- 如何使用多个线程同时读取文本文件?我给100分!
- DELPHI 中包的问题,急!急!急!
- 谁用过DFS控件包中的SystemTreeView等类似WIN资源管理器的控件?
- 为什么调用DLL后,程序出错?
- insertmenuitem如何向actionmainmenubar插入菜单项?
- 一个对页面操作的问题
hbutton:THandle;
begin
h := FindWindow(nil, '生产单');
sendMessage(h,WM_CLOSE,0,0);
end;
上面这样写,我跟踪了,H是大于0,不知道算不算找到真正的句柄,但发消息依然没有反映
FrmJob:=TFrmJob.Create(Application);
FrmJob.BorderStyle:=bsNone;
frmjob.ParentWindow:=AOwner.Handle;
FrmJob.Show;
FrmJob.Align:=alClient;
我不知道是不是上面几句产生窗体有问题,但我怎么试还是没有反映
Frm:THandle;
h: HWND;
hbutton:THandle;
begin
//h := FindWindow(nil, '生产单');
Frm:= Findwindowex(Application.Handle,0,nil,'生产单');
sendMessage(Frm,WM_CLOSE,0,0);
上面这样写确找不到句柄,FRM都是为0