StringGrid組件用於創建顯示字符串的網格,與電子表格類似。它可以使表格中的字符串和相關對象操做簡單化。StringGrid組件提供了許多可控制網格外觀念的屬性,以及利用表格的結構響應用戶操做的事件和方法。StringGrid具備關聯對象與網格中的每一個字符串的做用,這些對象爲用戶封裝了字符串表示的信息或行爲。ui
1、Delphi StringGrid控件的屬性及使用說明orm
一、固定行及固定列: (沒有固定行列的時候,不能在運行時調節各個單元格的寬度和高度)對象
StringGrid.FixedCols := 固定行數;事件
StringGrid.FixedRows := 固定列數; 字符串
StringGrid.FixedColor := 固定行列的顏色; string
StringGrid.Color := 未固定行列的顏色(資料區); it
二、資料區行列的寬度和高度: io
StringGrid.DefaultColWidth := 內定所有的寬度; 方法
StringGrid.DefaultRowHeight := 內定所有的高度; 移動
StringGrid.ColWidths[Index:Longint]:=某一行整行的寬度;
StringGrid.RowHeights[Index:Longint]:=某一列整列之高度;
三、資料區(CELL)指定(將某一行列停在資料區最左上角)
StringGrid.LeftCol:=某一行號;
StringGrid.TopRow:=某一列號;
四、焦點移動到某一單元格內:
StringGrid.Row:=?;
StringGrid.Col:=?;
五、設定資料區行數和列數:(包含固定行、列亦算在內)
StringGrid.RowCount:=?;
StringGrid.ColCount:=?;
六、給某一個單元格賦值(從0開始):
StringGrid.Cells[Col值 , Row值]:=字串;
七、判斷鼠標處於哪個單元格中
在StringGrid的Mouse事件中(UP,DOWN或MOVE)下:
VAR C , R : Longint;
StringGrid.MouseToCell(X,Y,C,R); {X,Y由MOUSE事件傳入}
{取回 C , R 即爲目前之Col , Row值 }
八、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才動
1、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;