1. 程式人生 > >[轉載] Delphi StringGrid常用屬性和常用操作

[轉載] Delphi StringGrid常用屬性和常用操作

有關 del ons 關聯 ddr tabs then form 水平分割

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;

[轉載] Delphi StringGrid常用屬性和常用操作