做了一个控件,在自己机器的delphi6安装正常,向窗口添加这个控件无问题,但在其他机器delphi6上安装正常,向窗口添加这个控件提示control '' h

  • 主题发起人 主题发起人 foreveryouth
  • 开始时间 开始时间
F

foreveryouth

Unregistered / Unconfirmed
GUEST, unregistred user!
做了一个控件,在自己机器的delphi6安装正常,向窗口添加这个控件无问题,但在其他机器delphi6上安装正常,向窗口添加这个控件提示control '' has no parent window.,(50分)<br />如何解决?
谢谢!!!
 
请高手帮帮忙,好吗?
 
其实,控件不只是一个文件的,他需要一些辅助文件的支持,你在自己的机器里安装了,或者说编译时形成了
一些文件,建议你单独为你的控件建立一个文件夹,重新编译一次,看看是不是多了一些文件
那些文件就是你所需要的,原因!好运!!!![:)]
 
是否使用了一些嵌套的类没有创建实例直接使用了或初始化时放的位置不对,有时有些初始化代码不能放在Create事件中
 
zq67:谢谢!
是这样!
我在类的声明中加了若干组件
type
TCustomPanel1 = class(TCustomPanel)
cedit_jiansuoshi:TEdit;//供外部调用
procedure cbitbtn_jiansuoClick(Sender: TObject);
private
{ Private declarations }
//组件
clabel_rukou:TLabel;
ccombobox:TComboBox;
clabel_jiansuoshi:TLabel;
cbitbtn_jiansuo:TBitBtn;
ccheckbox_ercijiansuo:TCheckBox;
cgroupbox:TGroupBox;
cradiobutton_mohu:TRadioButton;
cradiobutton_jingque:TRadioButton;
//变量
vstringlist:TStringList;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
property Align;
end;
在类的初始化中
constructor TCustomPanel1.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
//变量
vstringlist:=TStringList.Create;
vstringlist.Add('关键词');
vstringlist.Add('标题');
vstringlist.Add('作者');
//组件初始化
clabel_rukou:= TLabel.Create(self);
clabel_rukou.parent:=self;
clabel_rukou.Font.Size:=12;
clabel_rukou.Font.Name:='仿宋体';
clabel_rukou.caption:='检索入口:';
clabel_rukou.left:=20;
clabel_rukou.top:=11;
clabel_rukou.show;

ccombobox:=TComboBox.Create(self);
ccombobox.parent:=self;
ccombobox.left:=clabel_rukou.left + clabel_rukou.Width ;
ccombobox.top:=6;
ccombobox.Width:=100;
ccombobox.Font.Size:=12;
ccombobox.Font.Name:='仿宋体';
ccombobox.Items:=vstringlist;
ccombobox.Text:=ccombobox.Items[0];
ccombobox.show;

clabel_jiansuoshi:= TLabel.Create(self);
clabel_jiansuoshi.parent:=self;
clabel_jiansuoshi.Font.Size:=12;
clabel_jiansuoshi.Font.Name:='仿宋体';
clabel_jiansuoshi.caption:='检索式:';
clabel_jiansuoshi.left:=ccombobox.left + ccombobox.Width + 10;
clabel_jiansuoshi.top:=11;
clabel_jiansuoshi.show;

cedit_jiansuoshi:=TEdit.Create(self);
cedit_jiansuoshi.parent:=self;
cedit_jiansuoshi.Font.Size:=12;
cedit_jiansuoshi.Font.Name:='仿宋体';
cedit_jiansuoshi.left:= clabel_jiansuoshi.Left + clabel_jiansuoshi.Width;
cedit_jiansuoshi.Top := 6;
cedit_jiansuoshi.width:=200;
cedit_jiansuoshi.Show ;

cbitbtn_jiansuo:=TBitBtn.Create(self);
cbitbtn_jiansuo.parent:=self;
cbitbtn_jiansuo.Kind:=bkOK;
cbitbtn_jiansuo.Font.Size:=12;
cbitbtn_jiansuo.Font.Name:='仿宋体';
cbitbtn_jiansuo.caption:='检索';
cbitbtn_jiansuo.left:= cedit_jiansuoshi.Left + cedit_jiansuoshi.Width + 10;
cbitbtn_jiansuo.Top := 6;
cbitbtn_jiansuo.OnClick:=cbitbtn_jiansuoClick;
cbitbtn_jiansuo.Show ;

ccheckbox_ercijiansuo:=TCheckBox.Create(self);
ccheckbox_ercijiansuo.parent:=self;
ccheckbox_ercijiansuo.Font.Size:=12;
ccheckbox_ercijiansuo.Font.Name:='仿宋体';
ccheckbox_ercijiansuo.caption:='二次检索';
ccheckbox_ercijiansuo.left:= cbitbtn_jiansuo.Left + cbitbtn_jiansuo.Width + 10;
ccheckbox_ercijiansuo.Top := 11;
ccheckbox_ercijiansuo.Show ;

cgroupbox:=TGroupBox.Create(self);
cgroupbox.parent:=self;
cgroupbox.left:= ccheckbox_ercijiansuo.Left + ccheckbox_ercijiansuo.Width - 5 ;
cgroupbox.Top:=1;
cgroupbox.Caption:='';
cgroupbox.Height:=29;
cgroupbox.Width:=123;
cgroupbox.Show;

cradiobutton_mohu:=TRadioButton.Create(cgroupbox);
cradiobutton_mohu.parent:=cgroupbox;
cradiobutton_mohu.Top:=10;
cradiobutton_mohu.Left:=4;
cradiobutton_mohu.Font.Size:=12;
cradiobutton_mohu.Font.Name:='仿宋体';
cradiobutton_mohu.Caption:='模糊';
cradiobutton_mohu.Checked:=true;
cradiobutton_mohu.Show;

cradiobutton_jingque:=TRadioButton.Create(cgroupbox);
cradiobutton_jingque.parent:=cgroupbox;
cradiobutton_jingque.Top:=10;
cradiobutton_jingque.Left:=60;
cradiobutton_jingque.Font.Size:=12;
cradiobutton_jingque.Font.Name:='仿宋体';
cradiobutton_jingque.Caption:='精确';
cradiobutton_jingque.Width:=50;
cradiobutton_jingque.Show;
end;

请您看看问题出在什么地方!
谢谢!!!
 
把ccombobox.show;这样的Show语句全部去掉。
这些控件的Visible属性默认都是True,不需要你自己去Show。
如果在Create中Show子控件,由于此时你自己还没有分配窗口句柄,子控件当然也无法显示。
 
yygw的答案只是一部分,
在你的create 事件中把 ccheckbox_ercijiansuo.parent:=self; 等等之类的东东全部换成
ccheckbox_ercijiansuo.SetParent(Self);
 
我今天就遇到了,不过是在自己的机器上

应该是给TWinControl类设Parent值产生的错误

在你自己的机器上不出错可能是用了旧有DCU吧
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部