关于把MDI子窗体做成DLL的问题?

ahyf 2003-06-01 02:51:25
我把MDI子窗体做成DLL后。子窗体中,不能用Tab切换控件焦点.也不能用Button上设置的快捷键了。
我的代码如下:

DLL中这么写的

function ShowChild(App :TApplication ; pFormFreeCallBack : Pointer) : TFormChild;stdcall; export;
Begin
Application:=App;
Form_Record:=TFormChild.Create(Application);
result:=FormChild;
End;
///**Application 保存另一个单独的单元中

procedure SetOldApplication;stdcall;export;
Begin
Application:=OldApp;
end;

exports
ShowChild,SetOldApplication;
begin
OldApp:=Application;
end.

主窗体中这么写的:
TF_ShowChild=Function(App :TApplication ;pFreeCallBack : Pointer):TForm ;stdcall;

var
ShowChild : TF_ShowChild;
Form : TForm;
testDLL :DWODRD;
begin
testDll:=LoadLibrary('Project3.dll');
showChild:=GetProcAddress(testDll,'ShowChild');
Form:=ShowChild(application,nil);
fORM.Show;
end;

谁能帮我解决,我可以发例程,有重谢哦。
...全文
55 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ahyf 2003-06-02
昨天查了一下资料,不好实现的。
  • 打赏
  • 举报
回复
bluedelphi 2003-06-02
哈哈! 应该是可以的!
要注意几点:
1,参数Application 可以不用传递的,在 Project -> option 的 packages 钩上 build
with runtime packages. 主窗体和MDI 子窗体都要钩上的!
2, MDI子窗体不能用 ShowModal 只能用 Show;
3, MDI子窗体关闭的时候记得 Action := Cafree; 而且 窗体变量 := nil;
4, 所有MDI子窗体最好在程序由代码创建,不要自动创建.
好处:节省内存,启动快!
  • 打赏
  • 举报
回复
ahyf 2003-06-01
UP
  • 打赏
  • 举报
回复
ahyf 2003-06-01
调试一下,错在哪里?
  • 打赏
  • 举报
回复
luming988 2003-06-01
我想,你报错的地方,应该是PageControll 的OnChange 事情里吧
如果情况就象你所说的,那该怎么办?总不能不用吧
  • 打赏
  • 举报
回复
luming988 2003-06-01
dll的project定义了一个open函数供其他程序调用,代码如下:
Function Open():Boolean;stdcall;
var
frmMain:TfrmMain;//主窗体
Begin
Application.CreateForm(TfrmMain, frmMain);
Application.CreateForm(TmessageFrm, messageFrm);//子窗体
Application.CreateForm(TfrmPubInfo, frmPubInfo);//子窗体
frmMain.ShowModal;

Result:=True;
End;
  • 打赏
  • 举报
回复
ahyf 2003-06-01
luming988():
我想,你报错的地方,应该是PageControll 的OnChange 事情里吧
  • 打赏
  • 举报
回复
ahyf 2003-06-01
RuinRice(紫泪) :
感谢你的回答,但是我的子窗体的FormStyle=fsMDIChild 不能ShowModal
  • 打赏
  • 举报
回复
luming988 2003-06-01
up,up,up
我用的dll中封装了一个主窗体和子窗体,子窗体(frmstytle 设置为fsMDIChild)上有一个tabpage控件,有一个系统默认的激活页面,系统运行时报错:Error reading PageControl1:TTabIndex:can't create form.No MID forms are current active
该怎么解决?
  • 打赏
  • 举报
回复
RuinRice 2003-06-01

ahyf(冷剑白狐) :
你写的应该没问题啊!

主窗体改为:
TF_ShowChild=Function(App :TApplication ;pFreeCallBack : Pointer):TForm ;stdcall;

var
ShowChild : TF_ShowChild;
Form : TForm;
testDLL :DWODRD;
begin
testDll:=LoadLibrary('Project3.dll');
showChild:=GetProcAddress(testDll,'ShowChild');
Form:=ShowChild(application,nil);
fORM.Show;//--改为fORM.ShowModal
end;
  • 打赏
  • 举报
回复
RuinRice 2003-06-01
我先考虑一下
  • 打赏
  • 举报
回复
ahyf 2003-06-01
谁能解决,分数再番
  • 打赏
  • 举报
回复
ahyf 2003-06-01
怎么没人回答呀,55555~~~~~~~~~~~~~~
  • 打赏
  • 举报
回复
发帖
Delphi

5141

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
帖子事件
创建了帖子
2003-06-01 02:51
社区公告
暂无公告