delphi如何在stringgrid中加入combobox
procedureTForm1.sss(Sender:TObject;ACol,ARow:Integer;varCanSelect:Boolean);begincombo...
procedure TForm1.sss(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
combobox1.Visible := TRUE;
combobox1.Left := stringgrid2.CellRect(ACol, ARow).Left;
combobox1.Top := stringgrid2.CellRect(ACol, ARow).Top;
combobox1.Parent := self;
combobox1.Width := stringgrid2.CellRect(ACol, ARow).Right-stringgrid2.CellRect(ACol, ARow).Left;
colTmp:=ACol;
rowTmp:=ARow;
end;
执行这句话后,combobox总是在stringgrid表格之外,而不是在cell里面。这句哪里有问题 展开
var CanSelect: Boolean);
begin
combobox1.Visible := TRUE;
combobox1.Left := stringgrid2.CellRect(ACol, ARow).Left;
combobox1.Top := stringgrid2.CellRect(ACol, ARow).Top;
combobox1.Parent := self;
combobox1.Width := stringgrid2.CellRect(ACol, ARow).Right-stringgrid2.CellRect(ACol, ARow).Left;
colTmp:=ACol;
rowTmp:=ARow;
end;
执行这句话后,combobox总是在stringgrid表格之外,而不是在cell里面。这句哪里有问题 展开
3个回答
展开全部
procedure TForm1.StringGrid1Click(Sender: TObject);
var
comtest : TComboBox;
begin
StringGrid1.RowCount := 3;
StringGrid1.ColCount := 3;
StringGrid1.Rows[0].Text := 'testcombox';
comtest := TComboBox.Create(self.StringGrid1);
comtest.Left := StringGrid1.CellRect(1, 1).Left;
comtest.Top := StringGrid1.CellRect(1, 1).Top;
comtest.Parent := self.StringGrid1;
comtest.Width := stringgrid1.CellRect(1, 1).Right-StringGrid1.CellRect(1, 1).Left;
comtest.AddItem('stringgrid1(1,1)',comtest);
comtest.ItemIndex :=0;
comtest.Visible := TRUE;
ComboBox1.Left := StringGrid1.CellRect(2, 1).Left;
ComboBox1.Top := StringGrid1.CellRect(2, 1).Top;
ComboBox1.Parent := self.StringGrid1;
ComboBox1.Width := stringgrid1.CellRect(2, 1).Right-StringGrid1.CellRect(2, 1).Left;
ComboBox1.ItemIndex :=0;
ComboBox1.Visible := TRUE;
end;
测试性的写了下。第一个是使用动态创建的,第二个是本来有的。对比发现,主要是那句
combobox1.Parent := self;
错了。
应该是
combobox1.Parent := self.stringgrid2;
var
comtest : TComboBox;
begin
StringGrid1.RowCount := 3;
StringGrid1.ColCount := 3;
StringGrid1.Rows[0].Text := 'testcombox';
comtest := TComboBox.Create(self.StringGrid1);
comtest.Left := StringGrid1.CellRect(1, 1).Left;
comtest.Top := StringGrid1.CellRect(1, 1).Top;
comtest.Parent := self.StringGrid1;
comtest.Width := stringgrid1.CellRect(1, 1).Right-StringGrid1.CellRect(1, 1).Left;
comtest.AddItem('stringgrid1(1,1)',comtest);
comtest.ItemIndex :=0;
comtest.Visible := TRUE;
ComboBox1.Left := StringGrid1.CellRect(2, 1).Left;
ComboBox1.Top := StringGrid1.CellRect(2, 1).Top;
ComboBox1.Parent := self.StringGrid1;
ComboBox1.Width := stringgrid1.CellRect(2, 1).Right-StringGrid1.CellRect(2, 1).Left;
ComboBox1.ItemIndex :=0;
ComboBox1.Visible := TRUE;
end;
测试性的写了下。第一个是使用动态创建的,第二个是本来有的。对比发现,主要是那句
combobox1.Parent := self;
错了。
应该是
combobox1.Parent := self.stringgrid2;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试下面的方法行不行
var
TempRect: TRect;
TempRect:=Column.Grid.CellRect(Column.Grid.Col,Column.Grid.Row);
dtpDTimeP_temp.Width:=Column.Width;
dtpDTimeP_temp.Height:=20;
dtpDTimeP_temp.Left:= TempRect.TopLeft.X+ Column.Grid.Left;
dtpDTimeP_temp.Top:=TempRect.TopLeft.Y+Column.Grid.Top;
dtpDTimeP_temp.Visible:=true;
dtpDTimeP_temp.SetFocus;
这是我在dbgrid中画了个datetimepicker的代码完美嵌入
var
TempRect: TRect;
TempRect:=Column.Grid.CellRect(Column.Grid.Col,Column.Grid.Row);
dtpDTimeP_temp.Width:=Column.Width;
dtpDTimeP_temp.Height:=20;
dtpDTimeP_temp.Left:= TempRect.TopLeft.X+ Column.Grid.Left;
dtpDTimeP_temp.Top:=TempRect.TopLeft.Y+Column.Grid.Top;
dtpDTimeP_temp.Visible:=true;
dtpDTimeP_temp.SetFocus;
这是我在dbgrid中画了个datetimepicker的代码完美嵌入
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
推荐用AdvStringgrid ,Stringgrid的升级版,里面可以很轻松的加下拉框,单选框等。
我家里机器的环境上有用到AdvStringgrid的项目,具体的可以pm我咯。。
我家里机器的环境上有用到AdvStringgrid的项目,具体的可以pm我咯。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询