下面是我动态生成的一组控件 i:=0; //创建确认单明细
L:=32;
T:=0;
No:=0;
while not DM.AqCreate.Eof do
begin
with FmTCheckDetail do
begin
T:=T+40;
D:=TDateTimePicker.Create(self); //创建DataPicker;
D.Parent:=SB;
D.Name:='D'+inttostr(i);
D.Left:=8;
D.Top:=T;
D.Width:=89;
D.TabOrder:=No;
No:=No+1;
if(FmTCheck.State='New')then
D.DateTime:=FmTCheck.D_BeginDate.DateTime+i
else
D.DateTime:=DM.AqCreate.fieldbyname('LineDate').AsDateTime; M:=TMemo.Create(self); //创建MEMO
M.Parent:=SB;
M.Name:='M'+inttostr(i);
M.Left:=112;
M.Top:=T;
M.Width:=580;
M.Height:=35;
M.Text:='';
if(FmTCheck.State='New')then
M.Text:=DM.AqCreate.fieldbyname('Details').AsString
else
M.Text:=DM.AqCreate.fieldbyname('Details').AsString;
M.TabOrder:=No;
No:=No+1; Cmb:=TCombobox.Create(Self); //创建酒店
Cmb.Parent:=SB;
Cmb.Name:='H'+inttostr(i);
Cmb.Left:=695;
Cmb.Top:=T;
Cmb.Width:=110;
CmbInitFromTable(Cmb,'T_HotelInfo','HotelName','','');
if(FmTCheck.State='New')then
Cmb.Text:=''
else
Cmb.Text:=DM.AqCreate.fieldbyname('Hotel').AsString;
Cmb.TabOrder:=No;
No:=No+i; Cmb:=TCombobox.Create(self); //创建星级
Cmb.Parent:=SB;
Cmb.Name:='RL'+inttostr(i);
Cmb.Left:=810;
Cmb.Top:=T;
Cmb.Width:=50;
CmbInit(Cmb,'星级');
{ CmbInitCompany(Cmb,'T_Company','Company_SingleName',GetID('T_Type','TypeID','TypeName','酒店')); }
if(FmTCheck.State='New')then
begin
if RoomLevel<>'' then
Cmb.Text:=RoomLevel
else
Cmb.Text:='';
end
else
Cmb.Text:=DM.AqCreate.fieldbyname('HotelLevel').AsString;
Cmb.TabOrder:=No;
No:=No+1; C:=TCheckBox.Create(self); //早餐
C.Parent:=SB;
C.Name:='C'+inttostr(i);
C.Left:=868;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('BreakFast').AsBoolean; C:=TCheckBox.Create(self); //中餐
C.Parent:=SB;
C.Name:='CC'+inttostr(i);
C.Left:=901;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('Lunch').AsBoolean; C:=TCheckBox.Create(self); //晚餐
C.Parent:=SB;
C.Name:='CCC'+inttostr(i);
C.Left:=933;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('Supper').AsBoolean; Cmb:=TComboBox.Create(self); //住宿区域
Cmb.Parent:=SB;
Cmb.Name:='CCCC'+inttostr(i);
Cmb.Left:=953;
Cmb.Top:=T;
Cmb.Width:=50;
Cmb.Text:='';
CmbInit(Cmb,'住宿');
Cmb.TabOrder:=No;
No:=No+1;
if(FmTCheck.State='Edit')then
Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString
else
Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString;
end; E:=TEdit.Create(self); // 创建景点域
E.Parent:=SB;
E.Name:='S'+inttostr(i);
E.Left:=980;
E.Top:=T;
E.Width:=30;
E.Text:=DM.AqCreate.fieldbyname('Sights').AsString;
E.TabOrder:=No;
E.Visible:=false;
No:=No+1;
// Showmessage(TDatetimePicker(FindComponent('D'+inttostr(i))).Name);
i:=i+1;
DM.AqCreate.Next;
end;问题
我想要动态再生成控件的事件 如TCombobox控件的联动事件
比如说,我要用上面的星级行的星级TCombobox 来联动 酒店行的酒店行TCombobox下拉例表,请问这个事件如何写
或些过程如何写,请各位高手或写过些事件的帮帮忙,谢谢!
L:=32;
T:=0;
No:=0;
while not DM.AqCreate.Eof do
begin
with FmTCheckDetail do
begin
T:=T+40;
D:=TDateTimePicker.Create(self); //创建DataPicker;
D.Parent:=SB;
D.Name:='D'+inttostr(i);
D.Left:=8;
D.Top:=T;
D.Width:=89;
D.TabOrder:=No;
No:=No+1;
if(FmTCheck.State='New')then
D.DateTime:=FmTCheck.D_BeginDate.DateTime+i
else
D.DateTime:=DM.AqCreate.fieldbyname('LineDate').AsDateTime; M:=TMemo.Create(self); //创建MEMO
M.Parent:=SB;
M.Name:='M'+inttostr(i);
M.Left:=112;
M.Top:=T;
M.Width:=580;
M.Height:=35;
M.Text:='';
if(FmTCheck.State='New')then
M.Text:=DM.AqCreate.fieldbyname('Details').AsString
else
M.Text:=DM.AqCreate.fieldbyname('Details').AsString;
M.TabOrder:=No;
No:=No+1; Cmb:=TCombobox.Create(Self); //创建酒店
Cmb.Parent:=SB;
Cmb.Name:='H'+inttostr(i);
Cmb.Left:=695;
Cmb.Top:=T;
Cmb.Width:=110;
CmbInitFromTable(Cmb,'T_HotelInfo','HotelName','','');
if(FmTCheck.State='New')then
Cmb.Text:=''
else
Cmb.Text:=DM.AqCreate.fieldbyname('Hotel').AsString;
Cmb.TabOrder:=No;
No:=No+i; Cmb:=TCombobox.Create(self); //创建星级
Cmb.Parent:=SB;
Cmb.Name:='RL'+inttostr(i);
Cmb.Left:=810;
Cmb.Top:=T;
Cmb.Width:=50;
CmbInit(Cmb,'星级');
{ CmbInitCompany(Cmb,'T_Company','Company_SingleName',GetID('T_Type','TypeID','TypeName','酒店')); }
if(FmTCheck.State='New')then
begin
if RoomLevel<>'' then
Cmb.Text:=RoomLevel
else
Cmb.Text:='';
end
else
Cmb.Text:=DM.AqCreate.fieldbyname('HotelLevel').AsString;
Cmb.TabOrder:=No;
No:=No+1; C:=TCheckBox.Create(self); //早餐
C.Parent:=SB;
C.Name:='C'+inttostr(i);
C.Left:=868;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('BreakFast').AsBoolean; C:=TCheckBox.Create(self); //中餐
C.Parent:=SB;
C.Name:='CC'+inttostr(i);
C.Left:=901;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('Lunch').AsBoolean; C:=TCheckBox.Create(self); //晚餐
C.Parent:=SB;
C.Name:='CCC'+inttostr(i);
C.Left:=933;
C.Top:=T;
C.Width:=20;
C.Checked:=true;
C.Caption:='';
C.TabOrder:=No;
No:=No+1;
C.Checked:=DM.AqCreate.fieldbyname('Supper').AsBoolean; Cmb:=TComboBox.Create(self); //住宿区域
Cmb.Parent:=SB;
Cmb.Name:='CCCC'+inttostr(i);
Cmb.Left:=953;
Cmb.Top:=T;
Cmb.Width:=50;
Cmb.Text:='';
CmbInit(Cmb,'住宿');
Cmb.TabOrder:=No;
No:=No+1;
if(FmTCheck.State='Edit')then
Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString
else
Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString;
end; E:=TEdit.Create(self); // 创建景点域
E.Parent:=SB;
E.Name:='S'+inttostr(i);
E.Left:=980;
E.Top:=T;
E.Width:=30;
E.Text:=DM.AqCreate.fieldbyname('Sights').AsString;
E.TabOrder:=No;
E.Visible:=false;
No:=No+1;
// Showmessage(TDatetimePicker(FindComponent('D'+inttostr(i))).Name);
i:=i+1;
DM.AqCreate.Next;
end;问题
我想要动态再生成控件的事件 如TCombobox控件的联动事件
比如说,我要用上面的星级行的星级TCombobox 来联动 酒店行的酒店行TCombobox下拉例表,请问这个事件如何写
或些过程如何写,请各位高手或写过些事件的帮帮忙,谢谢!
procedure mychange(Sender: TObject);//必须同ComboBox1Change(Sender: TObject)的格式一样
begin
...
end;ComboBox1.OnChange:=mychange;就可以了
Cmb.OnClick := MyCmbClick; 定义procedure MyCmbClick(Sender: TObject);procedure TmainForm.MyCmbClick(Sender: TObject);
var //第n个
i : integer;
myform:BCXZ.TBCXZZCT;
begin
i:= 0;
i := TComboBox(Sender).Tag; //判断选择的是哪个ComboBox
myform:=BCXZ.TBCXZZCT.Create(self.Context);
if myform.ShowModal=Business.Forms.Controls.mrOK then
begin
MyEdit[i-1].Text := myform.Str_BCMC; //在对应的Edit上写入东西
end;
myform.Free;
end;
上面的给的不是太爽啦,
myform:BCXZ.TBCXZZCT;这个是什么意思
Business从何定义的
procedure MyCmbClick(Sender: TObject);
过程中取得目前点的是那一个TComboBox,的cmb.Name
比如说Cmb.Name:='RL'+inttostr(i); 中
RL(X) 这个名字是多少?
MyCmb : array of TCombobox;
---------------------------
SetLength(MyCmb ,30);
for i:=0 to sum-1 do
begin
//动态添加TCombobox控件
MyCmb[i] := TCombobox.Create(self);
MyCmb[i].Name:='MyCmb'+inttostr(i);
MyCmb[i].Text:='';
MyCmb[i].Top:=10+i*40;
MyCmb[i].Left:=196;
MyCmb[i].Width:=256;
MyCmb[i].ReadOnly := true;
MyCmb[i].Parent:=ScrollBox1;
MyCmb[i].Tag := i+1; //标识
MyCmb[i].OnClick := MyCmbClick;
end;
---------------------------
定义procedure MyCmbClick(Sender: TObject);procedure TmainForm.MyCmbClick(Sender: TObject);
var //第n个
i : integer;
begin
i:= 0;
i := TComboBox(Sender).Tag; //判断选择的是哪个ComboBox
MyCmb[i].Text := i; //在对应的Edit上写入东西
end;差不多是这样吧,可能代码会有点差错,没编译过
begin
self.ScrollBox1.Controls[0].Free;
end;
在创建前释放下容器