简介:StringGrid控件是一种很常用的表格显示控件,大家都知道在数据量比较大、需要按条目显示的时候,用表格显示会使整个显示简洁大方,有条理。
StringGrid控件用于建立显示字符串的网格,每个单元格都可以看作是显示一个字符串变量的值,整个表格则可以看作一个字符串的二维数组按顺序依次显示出来(eg.StringGrid1[ColNum,RowNum])。
最后希望这边文章对于需要熟悉StringGrid控件使用的人能够提供一点帮助。
1、固定行及固定列: (没有固定行列的时候,不能在运行时调节各个单元格的宽度和高度)
StringGrid.FixedCols := 固定行数;
StringGrid.FixedRows := 固定列数;
StringGrid.FixedColor := 固定行列的颜色;
StringGrid.Color := 未固定行列的颜色(资料区);
StringGrid.ColCount:= 当前行数(未固定,可改变);
StringGrid.RowCount := 当前列数(未固定,可改变);
2、资料区行列的宽度和高度:
StringGrid.DefaultColWidth := 內定全部的宽度;
StringGrid.DefaultRowHeight := 內定全部的高度;
StringGrid.ColWidths[Index:Longint]:=某一行整行的宽度;
StringGrid.RowHeights[Index:Longint]:=某一列整列之高度;
3、资料区(CELL)指定(将某一行列停在资料区最左上角)
StringGrid.LeftCol:=某一行號;
StringGrid.TopRow:=某一列號;
4、焦点移动到某一单元格内:
StringGrid.Row:=?;
StringGrid.Col:=?;
5、设定资料区行数和列数:(包含固定行、列亦算在內)
StringGrid.RowCount:=?;
StringGrid.ColCount:=?;
6、给某一个单元格赋值(从0开始):
StringGrid.Cells[Col值 , Row值]:=字串;
7、判断鼠标处于哪一个单元格中
在StringGrid的Mouse事件中(UP,DOWN或MOVE)下:
VAR C , R : Longint;
StringGrid.MouseToCell(X,Y,C,R); {X,Y由MOUSE事件传入}
{取回 C , R 即为目前之Col , Row值 }
8、StringGrid之Options属性:
若要在执行中开启合租关闭Options某一功能如 ‘goTABS’,则可以如下:
开启: StringGrid.Options:= StringGrid.Options + [goTABS];
关闭: StringGrid.Options:= StringGrid.Options - [goTABS];
goFixedHorzLine 固定列之间的水平分割线
goFixedVertLine 固定行之间的垂直分割线
goHorzLine 可滚动列之间的水平分割线
goVertLine 可滚动行之间的垂直分割线
goRangeSelect 可多重选择单元,如果包含goEditing,则忽略goRangeSelect。
goDrawFocusSelected 用鼠标多重选择时,第一个选择的单元反白
goRowSizing 用鼠标可改变列高
goColSizing 用鼠标可改变行寬
goRowMoving 用鼠标可移动可滚动行
goColMoving 用鼠标可移动可滚动列
goEditing 可编辑单元的内容
goAlwaysShowEditor 表格总是编辑模式,不需要F2或ENTER即有等待输入的游标。如果Options不包含goEditing或包含goRowSelect,则goAlwaysShowEditor无效。
goTabs 用TAB及Shift+TAB可切换表格单元
goRowSelect 用滑鼠點一下可選取整列(亦與滑鼠可多重選擇互斥)
goThumbTracking 捲軸動時GRID跟著動,否則捲軸動完放開,GRID才動
StringGrid控件在使用时,显示的数据会在程序里对应定义一种记录类型,一行数据对应一条数据,下面以一些程序为例讲解。
1、 StringGrid表头初始化:
procedure TMainForm.StringGridDisIni;// StringGrid表头初始化
begin
stringGrid1.RowCount:=OiltankNum+1;
StringGrid1.Cells[0,0]:='多功能罐';
StringGrid1.Cells[1,0]:='所属区域';
StringGrid1.Cells[2,0]:='连接方式';
StringGrid1.Cells[3,0]:='终端IP';
StringGrid1.Cells[4,0]:='液位计地址';
StringGrid1.Cells[5,0]:='终端登录号';
StringGrid1.Cells[6,0]:='是否连接';
StringGrid1.Cells[7,0]:='采集时间';
StringGrid1.Cells[8,0]:='液位';
StringGrid1.Cells[9,0]:='油量';
StringGrid1.Cells[10,0]:='是否装车';
StringGrid1.Cells[11,0]:='装车体积';
StringGrid1.Cells[12,0]:='罐运行状态';
end;
2、StringGrid一行数据显示刷新:
下面的事件是刷新一行的数据,如果需要刷新整个表格,做一个循环就可以了。
procedure TMainForm.StringGridUpdateItem(row:Integer;itemindex:Integer);
begin
StringGrid1.Cells[0,row]:=oiltank[itemindex].TankName;
StringGrid1.Cells[1,row]:=oiltank[itemindex].BelongBlockName+'/'
+oiltank[itemindex].BelongControlCenterName+'/'
+oiltank[itemindex].TankName;
StringGrid1.Cells[2,row]:=oiltank[itemindex].CollectMode;
StringGrid1.Cells[3,row]:=oiltank[itemindex].IpAddress;
StringGrid1.Cells[4,row]:=IntToStr(oiltank[itemindex].DeviceAddress);
StringGrid1.Cells[5,row]:=oiltank[itemindex].GPRSID;
StringGrid1.Cells[6,row]:=oiltankSCSJ[itemindex].ConnectStus;
StringGrid1.Cells[7,row]:=DateTimeToStr(oiltankSCSJ[itemindex].TMRecord);
StringGrid1.Cells[8,row]:=FormatFloat('0.000',oiltankSCSJ[itemindex].Height);
StringGrid1.Cells[9,row]:=FormatFloat('0.000',oiltankSCSJ[itemindex].Volume);
StringGrid1.Cells[10,row]:=oiltankSCSJ[itemindex].ZCFlag;
StringGrid1.Cells[11,row]:=FormatFloat('0.000',oiltankSCSJ[itemindex].RecordVolume);
StringGrid1.Cells[12,row]:=oiltankSCSJ[itemindex].AlarmRecord[1].AlertReason;
end;
3、StringGrid单元格点击事件的使用:
//想编写使StringGrid中的一列具有Check功能,和CheckBox效果一样,单击后yes和no相互切换显示
procedure TForm1.gridClick(Sender:TObject);
begin
ifgrid.Cells[grid.col,grid.row]='yes' then
grid.Cells[grid.col,grid.row]:='no'
else
grid.Cells[grid.col,grid.row]:='yes';
end;
4、// 添加一行
procedureTReferContentForm.mmiN1Click(Sender: TObject);
var
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
SGrid.RowCount := SGrid.RowCount + 1;
SetSGridTitle(SGrid);
end;
end;
5、// 插入一行
procedureTReferContentForm.mmiN2Click(Sender: TObject);
var
i,curRow: integer;
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
curRow := SGrid.Row; //记录当前选定行的位置
SGrid.rowcount := SGrid.rowcount + 1;
for i := SGrid.rowcount - 1 downto curRow + 1 do
SGrid.Rows[i] := SGrid.Rows[i - 1];
SGrid.Rows[curRow].Clear;
SetSGridTitle(SGrid);
end;
end;
6、// 删除当前一行
procedureTReferContentForm.mmiN3Click(Sender: TObject);
var
i:integer;
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
for i := SGrid.row to SGrid.RowCount - 1 do
SGrid.Rows[i] := SGrid.Rows[i + 1];
SGrid.RowCount := SGrid.RowCount - 1; //删除
SetSGridTitle(SGrid);
end;
end;
7、// 添加一列
procedureTReferContentForm.mmiN5Click(Sender: TObject);
var
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
SGrid.ColCount := SGrid.ColCount + 1;
SetSGridTitle(SGrid);
end;
8、// 插入一列
procedureTReferContentForm.mmiN6Click(Sender: TObject);
var
i,CurCol: integer;
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
CurCol := SGrid.Col; //记录当前选定行的位置
SGrid.ColCount := SGrid.ColCount + 1;
for i := SGrid.ColCount - 1 downto CurCol + 1 do
SGrid.Cols[i] := SGrid.Cols[i - 1];
SGrid.Cols[CurCol].Clear;
end;
SetSGridTitle(SGrid);
end;
9、// 删除一列
procedureTReferContentForm.mmiN7Click(Sender: TObject);
var
i:integer;
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
for i := SGrid.Col to SGrid.ColCount - 1 do
SGrid.Cols[i] := SGrid.Cols[i + 1];
SGrid.ColCount := SGrid.ColCount - 1; //删除
end;
SetSGridTitle(SGrid);
end;
10、// 清空
procedure TReferContentForm.mmiN9Click(Sender:TObject);
var
SGrid: TsuiStringGrid;
begin
SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent);
ifSGrid <> nil then
begin
ClearSGrid(SGrid, 5, 5)
end;
SetSGridTitle(SGrid);
end;