dll窗体中的DbGrid为何点击后提示无父窗体?

ctk 2002-12-11 03:49:11
我做了一个DLL窗体,内放置一个DBGRID,主窗体放置一个PAGECONTROL,我通过以下代码将DLL窗体停放到PGCONTROL,形成页面方式(page dock):
procedure form1.mytest;
var
pdllform:pointer;
begin
... //调DLL的语句忽略
pdllform := createchildform(application); //该函数返回窗体的指针
with tform(pdllform) do
begin
manualdock(pgcontrol1,nil,alclient);
show;
end;
end;
显示及关闭都是正常的,但当我点击dllform中的dbgrid时,就提示"dbgrid无父窗体",请各位帮忙解决。(我在createchildform中将dbgrid的parent设置后也无效).

...全文
40 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctk 2002-12-13
  • 打赏
  • 举报
回复
谢谢apache57(虾米) ,这个产生的tabsheet是有定义的,分析manualdock的代码可以发现,应不是这个问题.
我认为是否在dbgrid处理按键消息时,由于停放于pagecontrol,该dll窗体自动转为tabsheet, 以至消息处理出错。(我把dbgrid改为memo则不会出错)
apache57 2002-12-13
  • 打赏
  • 举报
回复
是不会报错。
ctk 2002-12-13
  • 打赏
  • 举报
回复
谢谢apache57(虾米),不是自动转为tabsheet,是语法表达错误。
普通窗体manualdock的时候不会报错,我试过不用dll窗体的方式,不会报错。
apache57 2002-12-13
  • 打赏
  • 举报
回复
是的,产生的tabsheet是有定义,我看了vcl代码,发现问题出在dbgrid的消息处理函数WMSetFocus上。(算不算delphi bug?)
另外,dll窗体是放在新产生的TabSheet(TDragDockObject.FDropOnControl)上的。dll窗体没有自动转化为tabsheet.
apache57 2002-12-12
  • 打赏
  • 举报
回复
是不是delphi的bug?
普通窗体manualdock的时候也会报这个错
apache57 2002-12-12
  • 打赏
  • 举报
回复
试了一下,好像用pagecontrol就会报错,我试着用panel作为docksite,dock操作正常,点击dbgrid1也没问题,关闭也正常。(操作一切正常)
用pagecontrol作为docksite的话,无论是否指定dropcontrol为某个tabsheet,肯定会再生成一个tabsheet用做dropcontrol,而这个tabsheet是没有定义的,是不是这个原因导致点击dbgrid的时候报无父窗体错?
dock完成后,pagecontrol的pagecount确实增加了,
且pagecontrol1.pages[ pagecontrol1.pagecount -1 ] <> nil
确实比较奇怪。
建议解决方法。在pagecontrol1的某个tabsheet上放置一个panel然后在dock的时候指定dropcontrol 为这个panel 就可以放到pagecontrol里了。
hanly2008 2002-12-12
  • 打赏
  • 举报
回复
问题可能出在dll代码中!
帮你UP

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧