StringGrid控件的网格中是否可以显示其他的VCL控件,如果可以,怎样实现? ( 积分: 100 )

  • 主题发起人 主题发起人 Deoline
  • 开始时间 开始时间
D

Deoline

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,请教问题,谢谢!
StringGrid控件的网格中是否可以显示其他的VCL控件,如果可以,怎样实现?
 
设置控件的Parent为StringGrid,用控件的SetBounds设置控件的位置及大小即可
 
不能这样啊大哥,你自己移动VCL的位置吧,给你一个代码,好象是覆盖最后一行从ColStart开始一直到最后一列
procedure TForm4.SetCoverPositionRow(ColStart:Integer);
var i,iSum,X,Y:Integer;
begin
iSum:=ImpStringGrid1.Left;
for i:=0 to ColStart-1 do
iSum:=iSum+ImpStringGrid1.ColWidths;
X:=iSum;
Y:=ImpStringGrid1.Top+ImpStringGrid1.RowHeights[0]+ImpStringGrid1.RowHeights[1]*(ImpStringGrid1.RowCount-2)+(ImpStringGrid1.RowCount-2);
iSum:=ImpStringGrid1.RowHeights[1];
pnCover.Left:=X+ImpStringGrid1.ColCount+1;
pnCover.Top:=Y+3;
pnCover.Height:=iSum;
pnCover.Width:=ImpStringGrid1.ColWidths[2];
end;
 
需要测试一下,我再自己研究研究。。。。谢谢,
测试完毕送分。
 
恩...我也看看...
 
lake_cx都说了,补充一点,
当向GRID中插入如combobox等控件时,由于它有下拉的范围,所以需要把COMBOBOX的PARENT指定为GRID的容器及其以上,EDIT,BUTTON等控件则可以直接指定PARENT为GRID;可使用BoundsRect、CELLRECT等获取CELL的位置范围,方便设置大小
另外,当要实现滚动就复杂咯~~
 
刚测试了一下
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var
Rect: TRect;
S: string;
I: integer;
begin
if ACol = 2 then
begin
S := Self.StringGrid1.Cells[ACol, ARow];
Self.ComboBox1.ItemIndex := -1;
for I := 0 to Self.ComboBox1.Items.Count - 1 do
begin
if S = ComboBox1.Items then
begin
ComboBox1.ItemIndex := I;
Break;
end;
end;
Rect := Self.StringGrid1.CellRect(ACol, ARow);
Self.ComboBox1.BoundsRect := Rect;
Self.ComboBox1.Left := Rect.Left + StringGrid1.Left + 2;
Self.ComboBox1.Top := Rect.Top + StringGrid1.Top + 2;
Self.ComboBox1.Width := Rect.Right - Rect.Left;
Self.ComboBox1.Height := Rect.Bottom - Rect.Top;
Self.ComboBox1.Visible := True;
Self.ComboBox1.Tag := ARow;
end
else
Self.ComboBox1.Visible := False;
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
var
S: string;
begin
S := ComboBox1.Text;
Self.StringGrid1.Cells[2, ComboBox1.Tag] := S;
end;
 
多人接受答案了。
 
后退
顶部