StringGrid组件用于建立显示字符串的网格,与电子表格相似。它可使表格中的字符串和相关对象操作简单化。StringGrid组件提供了许多可控制网格外观念的属性,以及利用表格的结构响应用户操作的事件和方法。StringGrid具有关联对象与网格中的每个字符串的作用,这些对象为用户封装了字符串表示的信息或行为。
一、Delphi StringGrid控件的属性及使用说明 1、固定行及固定列: (没有固定行列的时候,不能在运行时调节各个单元格的宽度和高度) StringGrid.FixedCols := 固定行数; StringGrid.FixedRows := 固定列数; StringGrid.FixedColor := 固定行列的颜色; StringGrid.Color := 未固定行列的颜色(资料区);
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 用鼠标多重选择时,第一个选择的单元反白 goColSizing 用鼠标可改变行寬 goColMoving 用鼠标可移动可滚动列 goEditing 可编辑单元的内容 goAlwaysShowEditor 表格总是编辑模式,不需要F2或ENTER即有等待输入的游标。如果Options不包含goEditing或包含goRowSelect,则goAlwaysShowEditor无效。 goTabs 用TAB及Shift+TAB可切换表格单元 goRowSelect 用滑鼠點一下可選取整列(亦與滑鼠可多重選擇互斥) goThumbTracking 捲軸動時GRID跟著動,否則捲軸動完放開,GRID才動
一、Delphi StringGrid控件的常用操作代码 // 初始化StirngGrid的首行和首列 procedure TReferContentForm.SetSGridTitle(SGrid: TSuiStringGrid); var ColIndex, RowIndex: integer; begin //画第一行(标题栏) for colIndex := 1 to SGrid.ColCount do begin SGrid.Cells[colIndex, 0] := '列名' + Chr(ord('A') - 1 + colIndex); end;
//画第一列(数字栏) SGrid.ColWidths[0] := 30; SGrid.Cells[0, 0] := '序列'; for RowIndex := 1 to SGrid.RowCount - 1 do begin SGrid.Cells[0, RowIndex] := IntToStr(RowIndex); end; end;
// 清楚StirngGrid,指定行数和列数 procedure TReferContentForm.ClearSGrid(SGrid: TSuiStringGrid; aRow, aCol: integer); var i: integer; begin SGrid.RowCount := aRow; SGrid.ColCount := aCol; for i := 0 to SGrid.RowCount - 1 do //如果不清表头则从1开始 SGrid.Rows[i].Clear; setSGridTitle(SGrid); end;
// 添加一行 procedure TReferContentForm.mmiN1Click(Sender: TObject); var SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> nil then begin SGrid.RowCount := SGrid.RowCount + 1; SetSGridTitle(SGrid); end; end;
// 插入一行 procedure TReferContentForm.mmiN2Click(Sender: TObject); var i, curRow: integer; SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> 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;
// 删除当前一行 procedure TReferContentForm.mmiN3Click(Sender: TObject); var i: integer; SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> 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;
// 添加一列 procedure TReferContentForm.mmiN5Click(Sender: TObject); var SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> nil then SGrid.ColCount := SGrid.ColCount + 1; SetSGridTitle(SGrid); end;
// 插入一列 procedure TReferContentForm.mmiN6Click(Sender: TObject); var i, CurCol: integer; SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> 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;
// 删除一列 procedure TReferContentForm.mmiN7Click(Sender: TObject); var i: integer; SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> 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;
// 清空 procedure TReferContentForm.mmiN9Click(Sender: TObject); var SGrid: TsuiStringGrid; begin SGrid := TsuiStringGrid(suiPMSGrid.PopupComponent); if SGrid <> nil then begin ClearSGrid(SGrid, 5, 5) end; SetSGridTitle(SGrid); end;
// 右击选择单元格 procedure TReferContentForm.suiStringGridContentMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbRight) then begin SendMessage(SGridContent.Handle, WM_LBUTTONDOWN, 0, MAKELONG(x, y)); SendMessage(SGridContent.Handle, WM_LBUTTONUP, 0, MAKELONG(x, y)); end; end;
procedure TReferContentForm.FormShow(Sender: TObject); begin SetSGridTitle(SGridContent); end;
// 把标题栏和数字列中是内容,居中显现 procedure TReferContentForm.SGridContentDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var s: string; r: TRect; begin if (ACol = 0) or (ARow = 0) then begin with TSuiStringGrid(Sender) do begin Canvas.Brush.Color := $00F0DDCE; Canvas.FillRect(Rect); s := Cells[ACol, ARow]; r := Rect; DrawText(Canvas.Handle, PChar(s), Length(s), r, DT_CENTER or DT_SINGLELINE or DT_VCENTER); end end end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论