DELPHI中如何不设置控件的Parent属性而显示控件

例如:
a: TButton
a := TButton.CreateParented(PatentHande);
a.left := 1;
a.top:= 1;
a.show;
一般情况下要设置
a.parent := Self;
Self为当前窗体,设置了该属性后控件才能显示,否则不能显示。我现在只能获得父容器的句柄,而不能获得父容器的CObject*,所以设置不了parent属性。有没有那位高人可以不设置parent属性让控件显示啊。

第1个回答  2011-03-11
Panel: TPanel;
Panel := TPanel.CreateParented(PatentHandle);
a := TButton.CreateParented(PatentHande);
a.Patent := Panel;
这样控件就能在VC中的FormView上显示了,但控件和FormView之间就又多了一层Panel。大家看看有没有更直接的方法可以实现的。
第2个回答  2011-03-11
//hWndChild 子窗体的句柄
//hWndNewParent 新的父窗体句柄
//Windows. 是必需的
Windows.SetParent(hWndChild, hWndNewParent);追问

在a := TButton.CreateParented(PatentHande);
函数中就已经指明了控件的父容器句柄为PatentHande了,不用再写SetParent函数了,而且加了SetParent函数后还是显示不了控件,非得设置控件的Parent属性才行。

追答

Windows.SetParent 是API 函数,你试过了吗?一定要带 Windows的

追问

我试过了,还是不能显示控件。我在论坛上看到很多人都说过VCL的控件必须要指明Parent属性才能显示,所以我先创建了一个Panel,而Panel是不用设置Parent属性的,然后将控件的Parent属性设置为Panel就可以显示了

追答

谁说“Panel是不用设置Parent属性”?
constructor Create(AOwner: TComponent); override;
这是 TPanel 的构造函数,AOwner 参数就是 Parent 。

我一直都是使用这个函数的,都可以很正常的把自己的组件嵌入到其它程序里面。

如果这个函数在你那里不行,那可能是 MFC 的缘故了。

本回答被网友采纳
第3个回答  2011-03-11
如果你的父容器可以显示的话,那么你将a.parent就是设置为这个容器不行吗?追问

我的父容器是一个MFC中的FormView,它的类型是CWnd的啊,我现在是要在MFC中用到DELPHI的表盘控件,因为MFC中没有,我自己不会做表盘,而且就算用C++写了一个表盘的程序也不知道稳定不稳定,所以想将Delphi中的表盘贴在MFC的FormView上

DELPHI中如何不设置控件的Parent属性而显示控件
Panel: TPanel;Panel := TPanel.CreateParented(PatentHandle);a := TButton.CreateParented(PatentHande);a.Patent := Panel;这样控件就能在VC中的FormView上显示了,但控件和FormView之间就又多了一层Panel。大家看看有没有更直接的方法可以实现的。

用DELPHI动态创建一个控件并显示在窗口,可以吗
可以的,先声明一个变量,再create,然后设置其parent和postion,最后show出来就行了。要注意的是:1、控件必须要有parent 2、控件最好指定位置和大小信息 3、控件要显示出来,必须要调用show方法。

Delphi中Owner和Parent的区别
当按Button 时 将在Panel 上创建一个Button 而如果把第 句改为Button parent =self 按Button 时 将在Form 上创建一个Button了 如果将第 句删除 按Button 时 什么都不会发生 这是因为创建方法无法知道应在哪里显示构件 Owner属性是指构件的所有者 它负责构件的创建和释放 如在上例中 系统默认窗体上...

为什么delphi 中窗体的parent设为panel后edit控件不能编辑,怎样该才能...
常规做法:镶嵌在控件里面的窗体为Frame。File--New--Other 里面找到 Frame 创建的 Frame,Frame 和普通窗体差不多。把这个 Frame 放在 Panel 或 GroupBox 里面时,可以用 Standard 控件里面的第一个,就是 Frame,点击这个,会选择你刚才创建的 Frame 放在控件(Panel或GroupBox)里面。如果要单独运行 Fr...

Delphi 子控件如何获得父控件名称或caption
每个控件都有一个Parent的指向父控件的属性,但Parent属性只是一个TWinControl类控件,也就是说只能访问TWinControl类所存在的属性和方法,像Name这种属性是有的,但Caption是没有的,如果你知道父控件具体是哪个类继承下来的话,可以通过类型转换来访问,如在一Form里放一按钮,通过按钮来显示Form的Name和...

delphi 动态创建按钮并显示在最上面
先声明一个变量,再create,然后设置其parent和postion,最后show出来就行了。要注意的是:1、控件必须要有parent 2、控件最好指定位置和大小信息 3、控件要显示出来,必须要调用show方法。

delphi 运行时控件为什么不显示
首先检查是否是可视控件,如果你放个TTimer控件,显然运行时不显示;其次检查控件的Visible属性是否为True;再者检查程序运行时是否有代码将该控件的属性置为False;再检查Form上该控件是否被其他控件遮挡,或者是Control中被Send To Back

DELPHI 为什么我用{}的方法可以生成BUTTON 用WITH的方法不行
少了一句btn2.Parent := Self,不指定父窗口控件无法显示。

Delphi中Owner和Parent的区别
1、Owner 指构件的 “所有者”,它负责构件的创建和释放。Parent 指构件的包容器(构件的上一层构件:“父母”),构件只能在此范围内显示和移动。2、与 Owner 关联的对象是 TComponent(元件),而与 Parent 关联的是TControl(控件)。举例说明:在窗体 (TForm1) 上放置1个 Panel,并在 Panel 中...

delphi中panel控件应用
直接把控件放到Panel上就行了,如果想把原来的控件添加到panel上,剪切控件再选中panel,黏贴就行了。

相似回答