我做了一个控件TCWeek,里面有一个comBox,在constructor TCWeek.Create(AOwner: TComponent)中,我想给comBox赋值,能编译通过,但是在设计时,往页面上加时,就显示controwl '' have not parent,不知如何解决.下面是源程序.
unit CWeek;interfaceuses
Dialogs,SysUtils, Classes, Controls,StdCtrls, ComCtrls, Messages,ExtCtrls;
type
TCWeek = class(TWinControl) private
FDateTimePicker: TDateTimePicker;
cmbWeek: TComboBox; procedure OnDateTimePickerChange(Sender: TObject);
procedure OncmbWeekChange(Sender: TObject);
protected
procedure WMSize(var Msg: TMessage);message WM_SIZE;
public
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
published end;procedure Register;var i,year,month,day :integer;
implementationprocedure Register;
begin
RegisterComponents('Hszc', [TCWeek]);
end;constructor TCWeek.Create(AOwner: TComponent);
begin inherited Create(AOwner); self.Width := 160;
self.Height := 22;
FDateTimePicker := TDateTimePicker.Create(nil);
FDateTimePicker.Parent := self;
FDateTimePicker.Top := 0;
FDateTimePicker.Left := 0;
FDateTimePicker.Height := 21;
FDateTimePicker.Width := 100;
FDateTimePicker.OnChange := OnDateTimePickerChange; cmbWeek := TComboBox.Create(nil);
cmbWeek.Parent := self;
cmbWeek.Top := FDateTimePicker.Top;
cmbWeek.Left := FDateTimePicker.Left+FDateTimePicker.Width+5;
cmbWeek.Height := 21 ;
cmbWeek.Width := 50;
cmbWeek.OnChange := OncmbWeekChange; begin
i := 1;
while i< 54 do
begin
cmbWeek.Items.add(IntTostr(i));
i := i+1;
end;
end;end;procedure Show(Sender: TObject);
beginend;destructor TCWeek.Destroy;
begin FDateTimePicker.Free;
cmbWeek.Free;
inherited;
end;procedure TCWeek.WMSize(var Msg: TMessage);begin self.Width := 160;
self.Height := 22; FDateTimePicker.Top := 0;
FDateTimePicker.Left := 0;
FDateTimePicker.Height := 21;
FDateTimePicker.Width := 100; cmbWeek.Top := FDateTimePicker.Top;
cmbWeek.Left := FDateTimePicker.Left+FDateTimePicker.Width+5;
cmbWeek.Height := 21 ;
cmbWeek.Width := 50;end;procedure TCWeek.OnDateTimePickerChange(Sender: TObject);begin
showmessage('ok');
end;procedure TCWeek.OncmbWeekChange(Sender: TObject);begin showmessage('ok2');end;end.
unit CWeek;interfaceuses
Dialogs,SysUtils, Classes, Controls,StdCtrls, ComCtrls, Messages,ExtCtrls;
type
TCWeek = class(TWinControl) private
FDateTimePicker: TDateTimePicker;
cmbWeek: TComboBox; procedure OnDateTimePickerChange(Sender: TObject);
procedure OncmbWeekChange(Sender: TObject);
protected
procedure WMSize(var Msg: TMessage);message WM_SIZE;
public
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
published end;procedure Register;var i,year,month,day :integer;
implementationprocedure Register;
begin
RegisterComponents('Hszc', [TCWeek]);
end;constructor TCWeek.Create(AOwner: TComponent);
begin inherited Create(AOwner); self.Width := 160;
self.Height := 22;
FDateTimePicker := TDateTimePicker.Create(nil);
FDateTimePicker.Parent := self;
FDateTimePicker.Top := 0;
FDateTimePicker.Left := 0;
FDateTimePicker.Height := 21;
FDateTimePicker.Width := 100;
FDateTimePicker.OnChange := OnDateTimePickerChange; cmbWeek := TComboBox.Create(nil);
cmbWeek.Parent := self;
cmbWeek.Top := FDateTimePicker.Top;
cmbWeek.Left := FDateTimePicker.Left+FDateTimePicker.Width+5;
cmbWeek.Height := 21 ;
cmbWeek.Width := 50;
cmbWeek.OnChange := OncmbWeekChange; begin
i := 1;
while i< 54 do
begin
cmbWeek.Items.add(IntTostr(i));
i := i+1;
end;
end;end;procedure Show(Sender: TObject);
beginend;destructor TCWeek.Destroy;
begin FDateTimePicker.Free;
cmbWeek.Free;
inherited;
end;procedure TCWeek.WMSize(var Msg: TMessage);begin self.Width := 160;
self.Height := 22; FDateTimePicker.Top := 0;
FDateTimePicker.Left := 0;
FDateTimePicker.Height := 21;
FDateTimePicker.Width := 100; cmbWeek.Top := FDateTimePicker.Top;
cmbWeek.Left := FDateTimePicker.Left+FDateTimePicker.Width+5;
cmbWeek.Height := 21 ;
cmbWeek.Width := 50;end;procedure TCWeek.OnDateTimePickerChange(Sender: TObject);begin
showmessage('ok');
end;procedure TCWeek.OncmbWeekChange(Sender: TObject);begin showmessage('ok2');end;end.
解决方案 »
- 日历算法
- 怎么样暂时不用的窗口,在程序运行时,先不要读取呢?
- 关于dbgrideh的CheckBox问题!还得请大家帮忙啊!(问题解决将100分奉上)
- 请问:如何在DELPHI的安装程序中添加 安装序列号?
- 怎么取鼠标的位置?(在线等)
- 关于c/s模式的问题
- tshellListView中如何只显示指定扩展名的文件
- 请问大家:我想把一个文本框的内容转换成整数后除以3 再赋给一个整型变量,怎么写?这样子对吗:ppdetailband1.BandsPerRecord:=StrToIn
- sql server 问题
- 请教VC++中的CMUTEX在Delphi中用什么来代替或取的作用与之相近?谢谢!
- 对线程一翘不通,就这么几行代码,CPU居然达到100%
- 如何取得控件颜色的16进制的编码
FDateTimePicker := TDateTimePicker.Create(self);
cmbWeek := TComboBox.Create(self);