CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  网络通信/分布式开发

为什么DLL中的Form就不能Dock到Exe?

楼主dulei115(前途无亮)2005-11-04 10:27:49 在 Delphi / 网络通信/分布式开发 提问

tbcMain:   TTabControl;//tbcMain.DockSite   :=   True;  
      vFormClass:   TFormClass;  
      vForm:   TForm;  
  ------------------------------------        
      if   tbcMain.DockClientCount   >   0   then  
          for   i   :=   0   to   tbcMain.DockClientCount   -   1   do  
              tbcMain.DockClients[i].Free;  
      if   tbcMain.DockClientCount   =   0   then  
          try  
              vForm   :=   vFormClass.Create(Self);  
              vForm.Align   :=   alClient;  
              vForm.Dock(tbcMain,   BoundsRect);  
              vForm.Show;  
          except  
              vForm.Free;  
          end;//end   of   try  
  ---------------------------------------  
  问题:vFormClass是从某个DLL中获得的Form类(类似TForm1),如果去掉Dock语句,Form也能Show出来而且运行正常,加上Dock就没反映了,步进跟踪时发现Form创建了就是没显现出来.  
  另外,如果vFormClass是本Project中的Form类,Form也可以被正确的Dock,运行正常。  
  怎么解决这个问题,实现Dock   DLL's   Form?  
  ---------------------------------------  
  要分可以再加,我的可用分还有好多!!!!! 问题点数:50、回复次数:10Top

1 楼chinasdp()回复于 2005-11-04 10:52:49 得分 10

你是这个意思吗?  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      Form2   :=   TForm2.Create(self);  
      Form2.Parent   :=   Panel1;  
      Form2.Align   :=   alClient;  
      Form2.Show;  
  end;  
  Top

2 楼dulei115(前途无亮)回复于 2005-11-04 11:22:37 得分 0

不是,要的问题的关键是直接使用Project中的Form可以实现Dock,利用调用Dll函数中传过来的TFormClass类型的变量来创建Form时,不能实现Dock功能  
   
  关键:Dock   Dll's   Form!!!!  
  ---------------------------------  
   
  请楼下的不要再走偏了,谢谢!!!!Top

3 楼sxqwhxq(步青云)回复于 2005-11-04 12:41:26 得分 10

borland的包括delphi、C++Builder制作出的包含窗体和其他可视VCL组件dll文件工作起来都有一些不可克服的问题:焦点获得和转移、停靠、主控程序和DLL中VCL组件的互操作等,原因非常复杂,解决起来难度大,主要原因是主控程序和DLL中均有一个Application、Screen对象,虽然在调用时用主Application、Screen替代dll中相关对象可解决部分问题,但总体上基本上没有好办法可用。  
  建议用Bpl代替dll,由于BPL是面向对象的,整体工程中只有一个application和screen对象,则所有问题都不复存在。  
  Top

4 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-11-04 12:55:50 得分 10

可以的,比较麻烦而已Top

5 楼dulei115(前途无亮)回复于 2005-11-04 13:44:46 得分 0

to   aiirii(ari-淘金坑)    
  怎么实现?????Top

6 楼cncharles(旺仔)回复于 2005-11-04 15:39:58 得分 10

传递Application,   Screen的址址到Dll中应该就可以实现的,因为我实现过DLL+MDI  
  我想原理是一样的吧,别忘了在退出的时间还原Application,   Screen.  
   
   
   
   
   
  ***********************************  
    高级群号:16497064欢迎编程高手加入.  
  ***********************************Top

7 楼Idle_(阿呆)回复于 2005-11-04 19:57:18 得分 10

sharemem了没?  
  如果没有那么dll中传出的变量地址对exe来说在它的内存管理器之外。Top

8 楼sanoul(垃圾)回复于 2005-11-08 14:58:41 得分 0

看来,我只好帮大家顶顶了Top

9 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-11-08 15:01:27 得分 0

>>怎么实现?????  
  印象   <<delphi   深度探索>>II   就有谈到Top

10 楼dulei115(前途无亮)回复于 2005-11-08 21:09:47 得分 0

我放弃了,还是改用MDI实现,结贴Top

相关问题

  • ActiveX EXE、 ActiveX DLL、 COM
  • dll问题。怎么在exe的mainform显示之前显示被调用dll的form?
  • dll与exe相互通讯
  • PE(*.exe,*.dll,*.bpl)的格式
  • dll连入.exe的疑惑?
  • 如何将exe转dll?
  • dll 中的 form 不出现?
  • 有关dll中的form!!
  • 关于MDI和DLL(FORM_CHILD)
  • 关于DLL中调用FORM

关键词

  • dll
  • 解决
  • application
  • tbcmain
  • dock
  • vform
  • vformclass
  • dockclientcount
  • 实现
  • tform

得分解答快速导航

  • 帖主:dulei115
  • chinasdp
  • sxqwhxq
  • aiirii
  • cncharles
  • Idle_

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo