我的问题:在 .ocx 中出现 has no parent window 错误,谁帮我解决分大大的。(300分)

  • 主题发起人 主题发起人 大文
  • 开始时间 开始时间

大文

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一个.ocx文件时用到了EHlib 1.56包中的打印控件 PrinttDbgrideh控件,错误
信息如下
Error Reading PrintDBGridEh1.Left:Control '' has no parent window.

而同样的程序在.exe中却不会出错,点解?
 
你用的是否是第三方控件,可能该OCX控件必须在MDI风格的界面种使用。
 
是OCX中的错误。
可能是在释放某个子控件时其父控件已经被释放了,你应该查查你程序中控件之间的关系和
他们是否正常的顺序释放。
 
这个问题属于 OCX 内部错误。
并不是没有 Parent ,而是在句柄生成之前产生了对窗口的刷新。这个问题以前有过详细
解答的,如果是 Delphi 控件带源码,估计能解决, OCX 就不好说了。
 
看这里:
<a href="DispQ.asp?LID=387955" title="来自:colorstone">组件问题:在Create给Items添加字串</a>
 
会不会是你的某个控件无效后,又给PrintDBGridEh1.Left根据这个控件位置付值?
 
BaKuBaKu说得有一点道理,不过我查过相关资料,资料上说:
一个.EXE文件中的所有控件可以自动获得application.handle 而 .Dll和.Ocx却不能
自动得到 Application.handle,通俗一点就是 .Exe文件的每个控件可以自动为其设置
Parent属性,而.Ocx文件在实现却不能,原因是它不知道到底是那个程序在调用它,为此
程序员必须手动为.Ocx的相关控件设置 Handle 或 parent属性,

可是怎么设定?????

下面是Delphi帮助中对Application.handle 和 Dll类型的说明:
Provides access to the window handle of the main form (window) of the application.

property Handle: HWND;

Description

Use Handle when calling Windows API functions that require a parent window handle. For example, a DLL that displays its own top-level pop-up windows needs a parent window to display its windows in the application. Using the Handle property makes such windows part of the application, so that they are minimized, restored, enabled and disabled with the application.

Note: When writing a DLL that uses VCL forms, assign the window handle of the host EXE抯 main window to the DLL抯 Application.Handle property. This makes the DLL抯 form part of the host application. Never assign to the Handle property in an EXE.
 


附带说明一下:如果把这个程序编译成.Exe文件则没有任何问题。
 
PrintDBGridEh1放在什么上面?还是动态创建的?
 
PrintDBGridEh1 放在一个标准的Form上。
 
那么form你创建了吗?OCX是不会替你创建Form的。
如果创建了form还出这种事,就确实奇怪了。
 
是在创建form之后出现这个问题的。
 
PrintDBGridEh1.parent:=form1
 
不是这个问题!
出错信息是读XXX。LEFT时错误!
Control '' has no parent window.
~~~~ (1) 没有名称!(2) 没有父窗体!
有原码吗?
 
关于 PrintDBGridEh1.parent:=form1 的方法我最开始就试过了,可问题还是顽固的存在。
 
你程序里有存取PrintDBGridEh1.Left的代码吗?
如果有,写在什么位置?
 
to gcq:
有源码,要不给你一份帮我看看?
 
如果不大的话,可以贴出来吗?
要是太大了就发到
<A
href="mailto:gcqmail@sohu.com">gcqmail@sohu.com</A>
 
gcq我发了一份给你,请帮忙看看,谢谢!
 
已经搞定了(但是不知道还有没有其他问题),多谢各位出手相助,虽然没有具体
解决,但是给了我不少提示!至于更改后的结果嘛,因为太大,不能放上来,以后
那位要的话给我一个邮件(DavidWen@263.net),我当以最快速度邮上。

再次多谢各位!
 
后退
顶部