程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> XE7 那些年我們一起上過的控件:StringGrid,xe7控件stringgrid

XE7 那些年我們一起上過的控件:StringGrid,xe7控件stringgrid

編輯:Delphi

XE7 那些年我們一起上過的控件:StringGrid,xe7控件stringgrid


FMX下的Grid類控件似乎不太盡如人意,可能是和官方的資料沒有跟得上它的發行版本有關系。

以下討論StringGrid的列表頭及對齊方式。

先上個效果圖:

 

FMX的列表頭估計很多人都是用盒子上流傳甚久的 AlignHeaders(StGrid: TStringGrid) 這個函數(在此感謝作者),其實這個函數也有不如意的地方。

具體表現為:用此函數生成的列表頭標題文字,有一定機率在點擊StringGrid的Cell格子時全部消失,當然這可能會有環境、版本等因素有關。

所以,這裡我們直接修改一下它,或者如果不需要自定義列表頭高度和樣式的話,可以直接不用該函數。

以下為簡單代碼:注意工程中Uses: FMX.Grid, FMX.header

procedure TForm1.Button1Click(Sender: TObject);
var
  i,c,r: Integer;
  Header: THeader;
  sc: TStringColumn;
begin
  //首先生成[列]
  for i := 0 to 3 do
  begin
    sc:=TStringColumn.Create(StringGrid1);
    sc.Parent := StringGrid1;
    sc.Width := StringGrid1.ClientWidth / 4-5;
    sc.Header :='Align: Center'; //此處給列表頭標題賦值
  end;

  //定義列表頭的樣式,如加粗、居中等。
  Header := THeader(StringGrid1.FindStyleResource('header'));
  Header.Height := 30;
  for I := 0 to StringGrid1.ColumnCount-1 do
    begin
      with Header.Items[I] do
      begin
        TextAlign := TTextAlign(0); //標題對齊:0居中,1左,2右
        //Text:='我是列表頭標題';  //由於上面已賦值列表頭,所以這裡是不需要的。
        StyledSettings:=[];
        Font.Size := 12;   //標題文字大小
        Font.Style := [TFontStyle.fsBold]; //標題樣式風格,如加粗、下劃線等
      end;
    end;

  //填充數據
  with StringGrid1 do
  begin
    RowCount := 20;
    TextSettings.HorzAlign:=TTextAlign(0); //文字橫向對齊:0居中,1左,2右
    TextSettings.VertAlign:=TTextAlign(0); //文字縱向對齊:0居中,1左,2右
    //TextSettings.FontColor:=TAlphaColor($FF0000);
    //上面這句是改變文字顏色,在XE7下發現用代碼改顏色會導致整體文字變白,所以
    //只能在設計期內改(默認黑色,如果有需要改變文字顏色的話。)
  end;
  for c := 0 to StringGrid1.ColumnCount - 1 do
    for r := 0 to StringGrid1.RowCount - 1 do
        StringGrid1.Cells[c, r] := Format('%d,%d', [c, r]);
end;

 

如果不需要自定義列表頭高度和樣式的話,可以這樣,列表頭則使用默認樣式:

procedure TForm1.Button1Click(Sender: TObject);
var
  i,c,r: Integer;
  Header: THeader;
  sc: TStringColumn;
begin
  //首先生成[列]
  for i := 0 to 3 do
  begin
    sc:=TStringColumn.Create(StringGrid1);
    sc.Parent := StringGrid1;
    sc.Width := StringGrid1.ClientWidth / 4-5;
    sc.Header :='Align: Left'; //此處給列表頭標題賦值
  end;

  //填充數據
  with StringGrid1 do
  begin
    RowCount := 20;
    TextSettings.HorzAlign:=TTextAlign(0); //文字橫向對齊:0居中,1左,2右
    TextSettings.VertAlign:=TTextAlign(0); //文字縱向對齊:0居中,1左,2右
    //TextSettings.FontColor:=TAlphaColor($FF0000);
    //上面這句是改變文字顏色,在XE7下發現用代碼改顏色會導致整文字變白,所以
    //只能在設計期內改(默認黑色,如果有需要改變文字顏色的話。)
  end;
  for c := 0 to StringGrid1.ColumnCount - 1 do
    for r := 0 to StringGrid1.RowCount - 1 do
        StringGrid1.Cells[c, r] := Format('%d,%d', [c, r]);
end;

 

 

PS:
--------------------------------------------------------------- 
FireMonkey移動開發可加QQ群:165232328 (本人非管理員,僅僅其中一成員,此群高手林立,期待各位Delphi愛好者共同交流)。 

 


delphi,stringgrid控件,怎在已輸入文本的最後一行 後 繼續添加文本?

StringGrid1.RowCount 就是表格的行數。你那裡cells[4,StringGrid1.RowCount+1]這樣寫。
 

怎用程序設置StringGrid的列寬

ColWidths 屬性存放所有列的寬度,可以零丁改每一列。DefaultColWidth 屬性可同時設置所有列的寬度。我用的 BCB5,不知 Delphi 的 StringGrid 是否一樣,鮮攀來蟠應當差不多吧:
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved