您的位置:首页 > 编程语言 > Delphi

Delphi StringGrid常用属性和常用操作

2014-01-16 12:49 465 查看
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   用鼠标多重选择时,第一个选择的单元反白  
  goRowSizing        用鼠标可改变列高  
  goColSizing         用鼠标可改变行寬  
  goRowMoving       用鼠标可移动可滚动行  
  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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: