MDI程序,子窗口在DLL中。。。up 有分!千两、瓦匠们来看看啊 我已经将DLL的Application保存起来,并在结束时返回给它,在调用中将主窗口的Application传了进来,并赋给了DLL的Application。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 兄弟们,快来帮忙UP啊,UP有分啊!我要上班了。 你把问题说清楚嘛,是不是调用方法不对?我公司作的erp系统用的也是这种方式,没什么不对呀,把你调用有关代码发过来看看~~~~~~~~~~ 天啊!为什么没人回答啊?不在DLL中子窗口可以列出来的! library MK_Stock;uses Windows, SysUtils, Classes, PubData, Forms, Parent in '\\HZOW\SOFT2\HINGE\PARENTS\PARENT.pas' {FParent}, FormParent in '\\HZOW\SOFT2\HINGE\PARENTS\FORMPARENT.pas' {FFormParent}, MK_MJRK in 'MK_MJRK.pas' {FMK_MJRK};var DllApp : TApplication; pConfig: ST_CONFIG; pShareData: ST_SHAREDATA;{$R *.RES}procedure MyDLLProc(Reason: Integer);begin { DLL is unloading. Restore the Application pointer. } if Reason = DLL_PROCESS_DETACH then//退出时 begin if Assigned(DllApp) then Application := DllApp; end;end;procedure MK_MJRK(const Config: ST_CONFIG; const ShareData: ST_SHAREDATA);stdcall;export;var Child : TFMK_MJRK;//一个功能子窗口begin Child := nil; pConfig := Config; pShareData := ShareData; if not Assigned(DllApp) then begin DllApp := Application; Application := pShareData.MainApp; end; try Child := TFMK_MJRK.Create(Application.MainForm); Child.Show(); except Child.Free(); end;end;exports MK_MJRK;begin DLLProc := @MyDLLProc;end. TO:散发弄舟,扣舷独笑你能将你们的框架发给我看一下吗?先谢了!Mail:[email protected] try Child := TFMK_MJRK.Create(Application.MainForm); Child.Show(); except Child.Free(); end;中的...TFMK_MJRK.Create(Application.MainForm);这句是否有问题,目前的Application是谁呢,你单步跟踪一下,是在哪一句报错,错误信息是什么? Application 已经是主窗口的Application,我用参数传进来的!在调用过程中是没有任何错误的,子窗口了显示正常,不好意思!Windos菜单中也是列出了子窗口的名字,但是当子窗口只剩下DLL中的子窗口时,水平地排列,垂直排列等菜单已经变灰不能用了。如果一有其它不在DLL的子窗口出现,这些菜单就又可以用了。 也就是说在语法上可以排除错误,可能是逻辑上有问题了,我以前的系统是除了一个主窗体,所有子窗口都由dll调用,你这种混用的情况,我也没经验,如果找不出问题何在你是不是可以用强制的方法不要菜单灰显(if enable=false then ...true),如果不行,那一定有冲突~~~~~~~gz,帮你up 你单步跟踪一下,是在哪一句报错,错误信息是什么? 要不你发过文件来我帮你调试([email protected]) 退出报错?你单步跟踪一下,是在哪一句报错,错误信息是什么? 要不你发过文件来我帮你调试([email protected]) 主程序和dll编译时都使用runtime packages,这样就行了,没有必要传Application。相信我,没错的。 TO:hellion(恶人) 这样是没有报错,但是水平,垂直排列还是不能用。 我怎么可以呀procedure TMainForm.muiCascadeClick(Sender: TObject);begin Cascade;end;procedure TMainForm.muiHorTileClick(Sender: TObject);begin TileMode := tbHorizontal; Tile;end;procedure TMainForm.muiVerTileClick(Sender: TObject);begin TileMode := tbVertical; Tile;end; to:Nizvoo(瓦匠泥) 没有解决! To:(恶人) 我用的是ActionList中的标准Action,用你的方法准实可以,但为什么runtime packages不钩上就会出错呢? to:liang_z(千山一刀之忍者神龟)没收到,若问题仍没解决再发[email protected]试试hellion(恶人)所说的我也有经历。两者都要带包编绎。 to liang_z:我的理解是:delphi的全局变量定义在bpl中,使用runtime packages后exe与dll共享bpl映射到一个地址空间的变量。希望各位指正。 不好意思,没搞定.试试全用dll的form行不行 我试过了,现在它都不会变灰了,在不写代码,Windwos的标准Action还是用不来 只要把DLL中的子FROM一连进来,WINDOS的标准Action就再也不会灰掉了。 请帮帮忙! 关于fastreport得问题 文本文件导入数据库 怎样将ParamStr(1)取得的短路径/文件名转换成长路径/文件名? 用delphi做客户端的程序员能拿多少呢? 帮我看看这段代码,为何出错 请问,在delphi 中如何读出数码相机中的照片?在线等待,高分相送。 怪啊!求教高手。我的U盘的文件全部变成00000000.00了 我的程序消耗的资源太多了,怎么解决呢?给点意见吧! 想请问大家一下Self到底指向什么? 如何得知windows使用的字体?? 求救!高手请进!!
把你调用有关代码发过来看看~~~~~~~~~~
Windows,
SysUtils,
Classes,
PubData,
Forms,
Parent in '\\HZOW\SOFT2\HINGE\PARENTS\PARENT.pas' {FParent},
FormParent in '\\HZOW\SOFT2\HINGE\PARENTS\FORMPARENT.pas' {FFormParent},
MK_MJRK in 'MK_MJRK.pas' {FMK_MJRK};var
DllApp : TApplication;
pConfig: ST_CONFIG;
pShareData: ST_SHAREDATA;
{$R *.RES}procedure MyDLLProc(Reason: Integer);
begin
{ DLL is unloading. Restore the Application pointer. }
if Reason = DLL_PROCESS_DETACH then//退出时
begin
if Assigned(DllApp) then
Application := DllApp;
end;
end;procedure MK_MJRK(const Config: ST_CONFIG; const ShareData: ST_SHAREDATA);stdcall;export;
var
Child : TFMK_MJRK;//一个功能子窗口
begin
Child := nil;
pConfig := Config;
pShareData := ShareData;
if not Assigned(DllApp) then
begin
DllApp := Application;
Application := pShareData.MainApp;
end;
try
Child := TFMK_MJRK.Create(Application.MainForm);
Child.Show();
except
Child.Free();
end;
end;exports
MK_MJRK;begin
DLLProc := @MyDLLProc;
end.
你能将你们的框架发给我看一下吗?先谢了!
Mail:[email protected]
Child := TFMK_MJRK.Create(Application.MainForm);
Child.Show();
except
Child.Free();
end;
中的...TFMK_MJRK.Create(Application.MainForm);这句是否有问题,目前的Application是谁呢,你单步跟踪一下,是在哪一句报错,错误信息是什么?
在调用过程中是没有任何错误的,子窗口了显示正常,
不好意思!Windos菜单中也是列出了子窗口的名字,
但是当子窗口只剩下DLL中的子窗口时,水平地排列,垂直排列等菜单
已经变灰不能用了。如果一有其它不在DLL的子窗口出现,这些菜单就
又可以用了。
我以前的系统是除了一个主窗体,所有子窗口都由dll调用,
你这种混用的情况,我也没经验,
如果找不出问题何在你是不是可以用强制的方法不要菜单灰显(if enable=false then ...true),如果不行,那一定有冲突~~~~~~~gz,帮你up
要不你发过文件来我帮你调试([email protected])
你单步跟踪一下,是在哪一句报错,错误信息是什么?
要不你发过文件来我帮你调试([email protected])
相信我,没错的。
这样是没有报错,但是水平,垂直排列还是不能用。
procedure TMainForm.muiCascadeClick(Sender: TObject);
begin
Cascade;
end;procedure TMainForm.muiHorTileClick(Sender: TObject);
begin
TileMode := tbHorizontal;
Tile;
end;procedure TMainForm.muiVerTileClick(Sender: TObject);
begin
TileMode := tbVertical;
Tile;
end;
没有解决!
我用的是ActionList中的标准Action,用你的方法准实可以,
但为什么runtime packages不钩上就会出错呢?
没收到,若问题仍没解决再发[email protected]试试hellion(恶人)所说的我也有经历。两者都要带包编绎。
我的理解是:delphi的全局变量定义在bpl中,使用runtime packages后exe与dll共享bpl映射到一个地址空间的变量。
希望各位指正。
试试全用dll的form行不行
WINDOS的标准Action就再也不会灰掉了。