Dll中的MDI子窗体上,Tab、Enter、光标键等对控件无效(300分)

  • 主题发起人 主题发起人 son_g
  • 开始时间 开始时间
S

son_g

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]exe主程序中有一个MDI主窗体,dll中有MDI子窗体。
当子窗体为当前窗口时,按Tab、Enter、光标键等键时,子窗体上的控件不响应,
如编辑框或按钮之间不会切换。
如果在主窗体上放置几个控件(比如Edit),就会发现按这些键时,焦点跑到主窗
口上的控件上去了。
苦思数日不得解,特奉上三百分以求高手相助!!
注:已经将exe的Application、Screen传入dll中了(是整个传入的,并不是仅仅
传Handle的)
 
这个问题真的很难吗?还是我描述得不够清晰?
亟盼各位高手解答,如能完美解决,可以单独再送100分!
 
Screen传入后应该就可以了吧
 
请看看这个贴子,有人已经解决过这个问题啦。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=992451
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1387202
这个是测试过的案例,请给分。
 
干脆不要用MDI
你就用一般的Form ,然后将它的Parent设为另一个Form,不就是达到了MDI的效果了吗??
 
有没有试过将application对象赋值?
举例:
下面是dll中的显示窗口调用函数的声明:
procedure ShowDllForm(OwnerApp:TApplication);
注意,其中一定要有一个参数用来传递TApplication类进来,下面是该函数的第一行:
begin
Application:=OwnerApp;
.....
end;
在exe工程文件中调用dll窗口时,这样使用函数:
begin
ShowDllForm(Application);
这样试试,或许管用
 
Sorry,上面有误,应该传递Application的Handle。
 
To: xzh2000
多谢你的指点,我在1387202这封帖子的相关连接中找到了答案,
并且已经解决了问题,非常感谢!!!

To: 踏雪无痕
传入Screen后,只能解决MDIChildCount这样的问题,对我的问题没有作用。

To: zxbyh
效果不一样的,你仔细试一下就知道了,有好多不同点。

To: zqw0117
我本来就是这样做的,见我的原文。
至于传Handle,不行的,创建窗体时报错。
 
xzh2000,已给分,请查。
 
说一下解决办法:
一句话,带包编译。
project--options--packages,选中build with runtime packages,
只要一个vcl包(第一个)即可。发布时把vcl?0.bpl与rtl?0.bpl一起
发布(?为Delphi版本号,如5、6、7)。
参见:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1558084
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部