當前最全的TAdvStringGrid控件屬性事件介紹和使用方法(AdvStringGrid使用技巧/Cells)


當前最全的TAdvStringGrid控件屬性事件介紹和使用方法(AdvStringGrid使用技巧/Cells)
   
  TAdvStringGrid是Delphi編程中常用的控件,經常用於統計數據和設計比較復雜的表格。控件功能很強大,但相應的使用也很復雜!
  以下是我整理出的常用技巧,有一部分是我自己的經驗,有一部分是網上搜的別人的總結,有一部分整理了,有一部分沒有整理;有一部分測試了,有一部分沒有經過測試~~~呵呵,但都是我手工編輯的啊~~。(部分示例過程是用於創建和設置動態Cells的過程,如果不理解請參考我總結的另一篇文章<完美動態TAdvStringGrid(cells)一例>)
  常用屬性設置
  --- 
    Options—goEditing:是否可以編輯
    Options—goTabs:控制是否可用TAB鍵將光標移到下一CELL
    Option—goColSizing/RowSizing=true:設置列寬/行高可調整
    Navigation—AlwaysEdi=true:進入單元格時自動變成編輯狀態
    Navigation—AdvanceOnEnter=true:回車時自動移到下一個CELL
    Navigation—AdvancelInsert:控制當光標在最后一個CELL時是否可以按回車插入新行
    Navigation—AllowDeleteRow:控制是否按DELETE鍵刪除當前行
    Navigation—AppendOnArrowDown:控制按下箭頭是否可以新增一行(未找到這個屬性)
    MouseActions—RowSelect/ColSelect=true :選擇整行/選擇整列
    Navigation—AutoComboDropSize=true組合框下拉框展開寬度自動設置
    MouseActions—DirectComboDrop=True組合框進入時自動展開
    (點擊鼠標時直接進入編輯,或允許、不允許改變行或列寬等特性,都可以在MouseActions中設置。)
    AutoNumAlign:=True則數字類型數據在CELL里會自動右對齊
    AutoNumberCol(n);自動在第n列按順序顯示數字,即1,2,3……
    AutoSize:=true :自動設置列寬,不推薦使用,自動調整后,真的很難看。
    EnableWheel:=true :一次滾動多行,EnableWheel:=False時,一次滾動一行。
    SearchFooter—Visible:=TRUE時,會在ADVStringGrid的底部顯示出搜索框(未找到屬性)
    FloatingFooter—Visible:為TRUE時,即在ADVStringGrid底部顯示求和列,要想讓求和列顯示小數,還需要將FloatFormat屬性設置為:%g(未找到屬性)
    (自動換行到新追回行:必須在onCellValidate過程中執行strGrid.AddRow;可以同時加一些賦值語句。)
    (當合並行后,如果想使文字垂直居中,可以先設置ADVStringGrid的 MultilineCells 設置為 True,然后在文字前面加 #13 換行來實行)
    (改變固定列的顯示樣式:ControlLook——FixedGradientFrom(起始色)——FixedGradientFrom(結束色)

  +++
  用過程設置相關屬性
  ---

    1,設定單元表各列是否可以編輯: 首先在設置屬性:Options—goEditing=true;然后,在CanEditCell事件中設定。

    procedure TForm50.stgPartListCanEditCell(Sender: TObject; ARow, ACol: Integer; var CanEdit: Boolean);
    Var
      I:integer;
    begin
        if (stgPartList.cells[cC1Data_Flag,ARow]='') or (stgPartList.cells[cC1Data_Flag,ARow]='C') then begin
            canEdit:=false;
            exit;
        end  else begin
            for I:=0 to cColQty1 do begin
                if ACol=I then begin
                    if stgPartList.cells[cC1Data_Flag,aRow]='C' then CanEdit:=false
                    else begin
                        if cColProp1[I,1]='Y' then CanEdit:=true;       //cColProp1:列屬性數組,下同
                        if cColProp1[I,1]='N' then CanEdit:=False;
                    end;
                end;
            end;
        end;
    end;

    2,設定單元表各列對齊方式: 在GetAlignment事件中設定。

    procedure TForm1.strGrid1GetAlignment(Sender: TObject; ARow, ACol: Integer; var AAlignment: TAlignment);
    Var
      I:integer;
    begin
        //直接定義
        {if ARow=0 then AAlignment:=tacenter
        else begin
            case ACol of
            0:   AAlignment:=taRightJustify;
            1:   AAlignment:=taCenter;
            //2:   AAlignment:=taCenter;
            3:   AAlignment:=taRightJustify;
            4:   AAlignment:=taCenter;
            6:   AAlignment:=taCenter;
            8:   AAlignment:=taCenter;
            9:  AAlignment:=taCenter;
            else AAlignment:=taLeftJustify;
            end;
        end;  }
        //用屬性數組定義
        if ARow=0 then AAlignment:=taCenter
        else begin
            for I:=0 to xpColQty1-1 do begin
                if ACol=I then begin
                    //case strToInt(xaColProp1[I,4])
                    if xaColProp1[I,4]='C' then AAlignment:=taCenter;
                    if xaColProp1[I,4]='L' then AAlignment:=taLeftJustify;
                    if xaColProp1[I,4]='R' then AAlignment:=taRightJustify;
                end;
            end;
        end;
        {//以下代碼不明,此過程沒有HAlign,VAlign
        HAlign := taCenter;
         VAlign := vtaCenter;}
    end;

   3,改變單元格的背景色,可在OnGetCellColor事件中寫代碼實行(前提需將FLAT設置為TRUE)/設定Grid顏色:在GetCellColor事件中設定:

    procedure TForm50.stgPartListGetCellColor(Sender: TObject; ARow,
      ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
    Var
      I:integer;
    begin
            {if stgPList.Cells[cNCols1[3]-2,ARow]='1' then
            abrush.Color:=clScrollBar
        else begin
            if (ARow=0) or (ACol=0) then
                abrush.Color:=clBtnFace
            else begin
               if ACol=cNCols1[2]-2 then
                   abrush.Color:=clwindow
               else
                   abrush.Color:=clinfoBK;
            end;
        end;}
        if ARow=0 then
                abrush.Color:=clBtnFace
        else begin
            for I:=0 to cColQty1 do begin
                if ACol=I then abrush.Color:=StringToColor(cColProp1[I,5]);
            end;
        end;
        {if ARow=0 then begin    //如果不加這一句,則是以下對應的整列,我這里是只改變固列,所以要把ARow設為0
          Case ACol of
            1: ABrush.Color:=RGB(227,249,248);
            2: ABrush.Color:=RGB(250,232,193);
            3: ABrush.Color:=RGB(227,249,248);
            4: ABrush.Color:=RGB(250,232,193);
            12: ABrush.Color:=RGB(227,249,248);
            14: ABrush.Color:=RGB(250,232,193);
            24: ABrush.Color:=RGB(227,249,248);
            48: ABrush.Color:=RGB(250,232,193);
            51: ABrush.Color:=RGB(227,249,248);
          End;
        END;}
    end;

  4,設置Grid中列特殊類型,某一列的數據格式,預定義的格式有:
  enum TEditorType { edNormal, edSpinEdit, edComboEdit, edComboList, edEditBtn, edCheckBox, edDateEdit, edDateEditUpDown, edTimeEdit, edButton, edDataCheckBox, edNumeric, edPositiveNumeric, edFloat, edCapital, edMixedCase, edPassword, edUnitEditBtn, edLowerCase, edUpperCase, edFloatSpinEdit, edTimeSpinEdit, edDateSpinEdit, edNumericEditBtn, edFloatEditBtn, edCustom, edRichEdit, edNone, edUniEdit, edUniComboEdit, edUniComboList };
  通過OnGetEditorType()事件進行設置,例如:
    procedure TForm1.strGrid1GetEditorType(Sender: TObject; ACol,  ARow: Integer; var AEditor: TEditorType);
      switch (aCol)
        case 1:aEditor=edComboList; break;  //設置第一列為ComboBox類型輸入
        case 2:aEditor=edEditBtn; break;  //設置第二列為EditBtn類型輸入,彈出一個選擇框
        case 3:aEditor=edSpinEdit; break;  //設置第三列為SpinEdit類型輸入
        case 4:aEditor=edDateEdit; break;  //設置第四列為日期型輸入,彈出DatetimePicker。
    end;

    5,增加edComboEdit和edComboList的下拉列表:
    方法:
    TAdvStringGrid:: ClearComboString(void); //清除已有了下拉列表
    TAdvStringGrid:: AddComboString(AnsiString S);
    TAdvStringGrid::Combobox->Sorted = true;
    通過Combobox可以訪問內置的Combo類型的控件的屬性和方法。
    如果列為組合框時,在此處同時設置下拉列表內容,以下為設置多個組合框時代碼:

    {procedure TForm1.strGrid1GetEditorType(Sender: TObject; ACol,
      ARow: Integer; var AEditor: TEditorType);
    Var
      I,J:integer;
    begin
            for I:=0 to xpColQty1-1 do begin
                 if ACol=I then begin
                     if Copy(xaColProp1[I,5],1,1)='C' then begin
                         AEditor:=edComBoEdit;
                         if ACol=xpC1STATUS then begin  //如果為狀態列(xp1XXXX:聲明的 列號,下同)
                             strGrid1.ClearComboString;
                             for J:=0 to xpQMS_Status-1 do begin
                                 if copy(xaRMS_Status[J],1,1)<>'C' then  //xaRMS_XXX:各項組合框選項值數組,下同
                                   strGrid1.AddComboString(xaRMS_Status[J]);
                             end;
                         end;
                         if ACol=xpC1Operation_MODE then begin
                             strGrid1.ClearComboString;
                             for J:=0 to xpQMS_OpMode-1 do begin
                                 strGrid1.AddComboString(xaRMS_OpMode[J]);
                             end;
                         end;
                         if ACol=xpC1FROM_DEPT then begin
                             strGrid1.ClearComboString;
                             for J:=0 to xpQMS_WH-1 do begin
                                 strGrid1.AddComboString(xaRMS_WH[J]);
                             end;
                         end;
                     end;
                 end;
            end;
    end;}

  6.增加edCheckBox界面處理/AdvStringGrid插入checkbox列
    設置:advstringgrid-->option-->goEditing=true
           advstringgrid-->enableGraphics=true
    在from create事件中加入

    for i:=1 to advstringgrid.rowcount-1 do
      advstringgrid.AddCheckBox(1,i,false,false);   //其中1表示所在列數

    使用時要聲明變量bCheck

    var  bCheck:boolean;

    讀取狀態:

        for I:=1 to stgPartList.RowCount-1 do begin
            stgPartList.GetCheckBoxState(cC1Issue_Flag,I,bCheck);  //取得狀態,賦給變量bCheck
            if (bCheck=true) then begin
            end;
        end;

    設定狀態:

        for I:=1 to stgPartList.RowCount-1 do begin
            if pFlag=true then begin
                stgPartList.SetCheckBoxState(cC1Issue_Flag,I,true);  //設為選中狀態
            end else begin
                stgPartList.SetCheckBoxState(cC1Issue_Flag,I,false);  //設為清空狀態
            end;
        end;        
  {在Grid中數據載入之后,使用:
    TAdvStringGrid:: void __fastcall AddCheckBox(int ACol, int ARow, bool State, bool Data)方法來添加CheckBox界面處理.
    例如:
    for(i=1;i<editgrid->RowCount;i++)
    editgrid->AddCheckBox(5,i,FALSE,FALSE);}

    +++以下未測試
    7、如果在錄入的過程中,要對某列做格式化,比如保留幾位小數,可用ADVStringGrid的GetFloatFormat事件中操作。比如:

    procedure Tfrm_dingdan.strgridGetFloatFormat(Sender: TObject; ACol,
      ARow: Integer; var IsFloat: Boolean; var FloatFormat: String);
    begin
      case ACol of
        4: floatformat:='%.0f';     //第4列保留0位小數
        5: floatformat:='%.3f';     //第5列保留3位小數
        6: floatformat:='%.6f';    //第6列保留6位小數
        7: floatformat:='%.5f';    //第7列保留5位小數
      end;
    end;

    8,怎樣實現AdvStringGrid的列寬自動按內容調整?怎樣實現AdvStringGrid的列寬自動按列標題寬度調整?autosize屬性的作用是什么?
    autosize,可以根據內容調整列寬。
    自動按標題列調整,自己在其RESIZE事件里對COLWIDTHS[I]賦值就行了。
    procedure AutoSizeColumns(const DoFixedCols: Boolean; const Padding: Integer);
    例:AdvStringGrid1.AutoSizeColumns(False,16);
    AdvStringGrid1.AutoSizeColumns(False,16);
    第一參數:是否為固定列;第二個參數,文字后面留的空格數
    所有單元格自動調整,由第一個參數設置是否含固定單元,
    如要固定行折行顯示應將其行高設為自動調整即:
    AdvStringGrid1.AutoSizeRow(0);

    9、如何在AdvStringGrid中為每個單元格內的字體定制顏色
    在OnDrawCell事件(看名字這個控件應該有這個事件把,呵呵!)寫如下代碼:
    (Sender as TAdvStringGrid).Canvas.Font.Color:=clNavy;
    十五、Options—goRangeSelect:控制是否可以選擇多行,goRowSelect控制選中整行、AdvStringGrid做多表頭,在onIsFixedCell事件中返回true的就是表頭

    4、stringGrid中的行或列和並
    grdList.MergeCells(0,0,2,2);
    grdList.Cells[0,0]:='123456';
    advstringgrid.mergecol(3,4);
    advstringgrid..MergeCells(0,0,2,2);

    5、
    with advStringGrid1 do   //引用單元格時, 列數在前,行數在后.
    MergeCells(0,0,1,3);
    //合並單元格.前兩參數為列數行數. 后兩參數分別為要合並的列數和行數
    Cells[1,0] := Format('分度線( %s )',[m_sMeasureRangeUnit]);;
    MergeCells(3,JieDianStart - 1,1,1);
    Cells[3,JieDianStart - 1] := '動作方式';
    ColWidths[3] := ColWidths[3] + 10;
    Colors[3,JieDianStart - 1] := FixedColor;
    FontNames[3,JieDianStart - 1] := FixedFont.Name;
    FontSizes[3,JieDianStart - 1] := FixedFont.Size;
    FontStyles[3,JieDianStart - 1] := FixedFont.Style;

    +++以下未整理

  7.TAdvStringGrid中每一種格式的輸入與輸出都要對應,否則載入時不能識別(因為各種類型的文件之間存儲格式是不一樣的)。例如:
  如果保存時使用TAdvStringGrid::SaveToFile(),那么載入時就要相應的使用TAdvStringGrid::LoadFromFile();其它對應如下:
    TAdvStringGrid:: LoadFromBinFile();??TAdvStringGrid:: SaveToBinFile();TAdvStringGrid:: LoadFromCSV ();??TAdvStringGrid:: SaveToCSV();等等。

  8.通過TAdvStringGrid:: SpinEdit對象,可以訪問內置的SpinEdit類的特性;
  同樣的道理,通過其它一些內置的對象,可以訪問這些類的屬性,執行這些類的方法。

  9.TAdvStringGrid中的排序問題:
  首先設置排序參數:通過TAdvStringGrid:: SortSettings屬性(發布TSortSettings類為一個屬性),通過這個屬性設置
    然后調用TAdvStringGrid::QSort()方法應用SortSettings。
    排序方向: SortSettings-> Direction=enum {sdAscending, sdDescending};
    排序列:SortSettings->Column = 3;

  10.多行顯示
  bool TAdvStringGrid:: Multilinecells屬性,是否支持多行顯示,如果支持的話,可以用”#13”作為分隔符插入多行字符串,用多行顯示。
折中的方法,可以用WordWrap來支持多行顯示
  一般在設置和取消多行顯示時,同時,對TAdvStringGrid::DefaultRowHeight進行設置,將有良好的效果。

  11.欲設置某些行或列為Fixed風格的顯示,使用OnIsFixedCell()事件句柄來處理,調用TAdvStringGrid:: Repaint()方法來使設置生效。
    例如:

    If(colfix->Checked) { //colfix為一個TCheckBox
    AdvStringGrid1->Repaint();
    }
    //事件處理句柄
    void __fastcall TForm1::AdvStringGrid1IsFixedCell(TObject *Sender,
    int Arow, int Acol, bool &isfixed)
    {undefined
    if ((Acol==3) && (colfix->Checked))
    isfixed=TRUE; else isfixed=FALSE;
    }

  12.處理顯示風格,如添加貨幣前綴和物理量單位 
  在TAdvStringGrid::OnGetFormat()事件處理句柄中處理。 
    aPrefix參數設置顯示前綴;
    aSuffix參數設置顯示后綴;
    AStyle參數enum TSortStyle { ssAutomatic, ssAlphabetic, ssNumeric, ssDate, ssAlphaNoCase, ssAlphaCase, ssShortDateEU, ssShortDateUS, ssCustom, ssFinancial, ssAnsiAlphaCase, ssAnsiAlphaNoCase, ssRaw, ssHTML, ssImages, ssCheckBox, ssUnicode };設置排序風格;

  13.是否能對特定的單元格進行編輯 
    用TAdvStringGrid::OnCanEit()事件句柄來處理,
    設置bool &canedit參數來達到能否編輯某些單元格的效果

  14.隱藏和顯示某些單元格
    TAdvStringGrid:: UnHideColumn(int ACol)
    TAdvStringGrid::HideColumn(int ACol);

  15.查找的實現:
    TAdvStringGrid::Find()
    TAdvStringGrid::FindNext();
    兩個方法返回TPoint類型,
    Find()需要一個TFindParams類型的參數,enum TFindParameters { fnMatchCase, fnMatchFull, fnMatchRegular, fnDirectionLeftRight, fnMatchStart, fnFindInCurrentRow, fnFindInCurrentCol, fnIncludeFixed, fnAutoGoto, fnIgnoreHTMLTags, fnBackward, fnIncludeHiddenColumns };可通過自己設計一個查找窗體來實現。
    例如:

    //----------findfirst----------
    void __fastcall TForm1::Findfirst1Click(TObject *Sender)  
    {  
    TFind *Find;  
    TFindParams findparams;  
    TPoint res;  
    Find = new TFind(Form1);  
    if (Find->ShowModal()==mrOk)  
    {  
    if (Find->chkcase->Checked) findparams << fnMatchCase;  
    if (Find->chkfull->Checked) findparams << fnMatchFull;  
    if (Find->chkregular->Checked) findparams << fnMatchRegular;  
    if (Find->dir->ItemIndex==1) findparams << fnDirectionLeftRight;  
    if (Find->where->ItemIndex==1) findparams << fnFindInCurrentCol;  
    if (Find->where->ItemIndex==2) findparams << fnFindInCurrentRow;  
    res = AdvStringGrid1->FindFirst(Find->findtext->Text,findparams);  
    if (res.x>=0)  
    {  
    AdvStringGrid1->Col=res.x;  
    AdvStringGrid1->Row=res.y;  
    }  
    else  
    ShowMessage("Text not found");  
    }  
    delete Find;  
    }
    //----------findnext----------
    void __fastcall TForm1::Findnext1Click(TObject *Sender)
    {undefined
    TPoint res;  
    res = AdvStringGrid1->FindNext();
    if ((res.x>=0) && (res.y>=0))  
    {  
    AdvStringGrid1->Col=res.x;  
    AdvStringGrid1->Row=res.y;  
    }  
    else  
    ShowMessage("Text not found");  
    }
    //----------

  16.TAdvStringGrid:: Ints[int ACol][int ARow]以Integer類型的值來訪問單元格,如果讀取失敗,會觸發異常.

  18.

  (1).添加圖標:TAdvStringGrid::AddIcon(); 
    原型:void __fastcall AddIcon(int ACol, int ARow, Graphics::TIcon *aicon, TCellHAlign hal, TCellVAlign val)
  (2).添加旋轉字體:TAdvStringGrid:: AddRotated;
    原型:void __fastcall AddRotated(int ACol, int ARow, short AAngle, AnsiString s);
  (3).從ImageList中取出圖象添加到單元格中:TAdvStringGrid:: AddImageIdx;
    原型:void __fastcall AddImageIdx(int ACol, int ARow, int Aidx, TCellHAlign hal, TCellVAlign val);
    參數Aidx為圖片在ImageList中的索引.
  (4).向單元格中添加位圖:TAdvStringGrid:: AddBitmap;
    原型:void __fastcall AddBitmap(int ACol, int ARow, Graphics::TBitmap *ABmp, bool Transparent, TCellHAlign hal, TCellVAlign val);
    參數bool Transparent設置是否顯示透明.
  (5).自動添加編號:AutoNumberCol
    TAdvStringGrid:: AutoNumberCol(int ACol)方法,對指定的列從1進行編號,不對Fixed行中的列編號;
    用途:用於產生首列的自動編號。
  (6).向單元格中添加多個圖象:TAdvStringGrid::AddMultiImage
  原型:void __fastcall AddMultiImage(int ACol, int ARow, int Dir, TCellHAlignhal, TCellVAlign val);
  事實上只是向系統聲明一下,這個單元格將放置多個圖象,圖象的添加通過GridImages來添加。例如:

    AdvStringGrid2->AddMultiImage(5,1,0,haBeforeText,vaCenter);
    AdvStringGrid2->CellImages[5][1]->Add(0);
    AdvStringGrid2->CellImages[5][1]->Add(1);

  (7).如果TAdvStringGrid:: EnableHTML屬性啟用,那么,單元格中輸入HTML源代碼,它將以HTML格式顯示出來,例如:
    AdvStringGrid2->Cells[7][1]="Easy HTML
    formatting";
    AdvStringGrid2->Cells[7][2]="Including <IMG src=" "\x022" "idx:0" "\x022" ">
    AdvStringGrid2->Cells[7][3]="Enjoy
    ----------
    miniHTML";
    AdvStringGrid2->Cells[7][4]="
    AdvStringGrid2->Cells[7][5]="125 <SUP>9</SUP>/<SUB>16</SUB>";
    這些內容在TAdvStringGrid中將以HTML格式顯示出來。

  (8).通過TAdvStringGrid:: RichEdit屬性可以調用TAdvStringGrid的內置的RichEdit類,是一個RichEdit編輯器,可以使用它處理RTF格式文檔,然后使用TAdvStringGrid::RichToCell方法寫入單元格. 
    原型:void __fastcall RichToCell(int Col, int Row, Comctrls::TRichEdit *Richeditor);
    可以把用TAdvStringGrid::RichEdit::Clear()把RichEdit清空,再重新添加內容,然后再添加到單元格中。
    可以通過TAdvStringGrid::RichEdit::SelAttributes來調整RichEdit的格式。

  (9).通過TAdvStringGrid:: AddProgress方法來在單元格中添加進度條 
    原型:void __fastcall AddProgress(int ACol, int ARow, Graphics::TColor FGColor, Graphics::TColor BKColor);
    單元格的整數值就是當前進度值,可以使用TAdvStringGrid::Ints[col,row]來訪問這個值。

  (10).通過TAdvStringGrid::AddComment方法來添加注釋。
    原型:void __fastcall AddComment(int ACol, int ARow, AnsiString comment);
    添加注釋之后,會在單元格的右上角顯示一個小的紅色的三角號,例如:
    AdvStringGrid2->AddComment(8,3,"This is a custom" "\x00D" "comment for this cell");
    AdvStringGrid2->Cells[8][3]="Cell with comment";

  (11).通過TAdvStringGrid增強型的HTML語法解析,添加內部單元格之間的鏈接,例如:
    AdvStringGrid2->Cells[8][4]=" AdvStringGrid2->Cells[8][5]=" (12).通過TAdvStringGrid:: AddButton來在單元格中添加按鈕
    原型:void __fastcall AddButton(int ACol, int ARow, int bw, int bh, AnsiString Caption, TCellHAlign hal, TCellVAlign val);
    當添加的按鈕被按下時,OnButtonClick事件被觸發(?經測試,不能觸該事件)。

  19.在TAdvStringGrid::OnGetCellsColor()事件處理句柄中,可以對單元格的顏色和字體進行設置.

  21.添加可收縮結點,外觀上看起來類似於分組,
    方法:
    TAdvStringGrid::FixedCols=0;
    TAdvStringGrid::FixedColWidth=20;
    TAdvStringGrid::AddNode(2,4);
    TAdvStringGrid::AddNode(7,2);
    TAdvStringGrid::AddNode(13,4);
    TAdvStringGrid::AddNode()方法原型:
    void __fastcall AddNode(int ARow, int Span);第二個參數為分組的跨越度。

 22.展開所有結點:
    TAdvStringGrid:: ExpandAll()方法
   收縮所有結點:TAdvStringGrid:: ContractAll()方法
   TAdvStringGrid::CellNode->NodeType=cnFlat;
   TAdvStringGrid::CellNode->NodeType=cn3D;
   TAdvStringGrid::CellNode->NodeType=cnGlyph;
    以上三個屬性設置StringGrid以結點的方式顯示時的結點顯示風格。

  23.對TAdvStringGrid添加過濾
    使用TAdvStringGrid中預定義的一種Filter類: TFilterData
    例如:


    TFilterData* fd;
    AdvStringGrid3->Filter->Clear();
    fd = AdvStringGrid3->Filter->Add();
    fd->Condition = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
    fd->Column = 1;
    fd = AdvStringGrid3->Filter->Add();
    fd->Con_dition=ComboBox2->Items->Strings[ComboBox2->ItemIndex];
    fd->Column = 3;
    AdvStringGrid3->FilterActive=true;

  24.自動調整列寬AutoSizeColumns
    原型:void __fastcall AutoSizeColumns(const bool DoFixedCols, const int Padding)
    用第二個參數來指定自動調整后需要額外增加的空間

  25.TAdvStringGrid的打印。
  使用TAdvPreviewDialog連接TAdvStringGrid來預覽.這個控件中提供了接口可以直接對界面進行本地化。
  使用TAdvStringGrid的Print()方法來打印。打印設置調整TAdvStringGrid::TPrintSettins類的相關屬性。


///
procedure TForm1.FormCreate(Sender: TObject);
begin
  AdvStringGrid1.FixedRows:=2;
  AdvStringGrid1.SaveFixedCells := false;
  AdvStringGrid1.MergeCells(1,0,2,1);
  AdvStringGrid1.MergeCells(3,0,2,1);
  AdvStringGrid1.Cells[1,0] := '<p align="center"> <b>Identification</b></p>';
  AdvStringGrid1.Cells[1,1] := 'Brand';
  AdvStringGrid1.Cells[2,1] := 'Type';
  AdvStringGrid1.Cells[3,1] := 'CC';
  AdvStringGrid1.Cells[4,1] := 'Pk';
  AdvStringGrid1.Cells[3,0] := '<p align="center"><b>Power</b></p>';
  AdvStringGrid1.BtnEdit.ButtonWidth := 24;
end;

 

出處 :http://www.cnblogs.com/Richard1981/p/3582521.html

 

 

結合最近自己做的一些工作,用到了第三方控件AdvStringGrid,這里就常用的一些技巧做個小小的總結
(1)如何設置表格固定的列數,如下圖所示:
AdvStringGrid使用小結
這里固定的列數為3列,通過設置下面屬性來改變固定的列數:
AdvStringGrid.FixedCols:=n;(n為要固定的列數值)
(2)如何從AdvStringGrid中讀取和向AdvStringGrid中導入值:
AdvStringGrid.Cells[j,i]:=str;(向其單元格賦值)這里需要注意的是,j為列數,i為行數。
(3)如何在運行界面中手動調整列寬與行寬,效果圖如下所示:
AdvStringGrid使用小結
這只如下屬性即可以在運行界面中手動的調整行寬與列寬:
Options ->  goColsizing:=true 列寬
Options ->  goRowsizing:=true 行寬
(4)如何使文字換行,並垂直居中,效果圖如下:
AdvStringGrid使用小結
    把goRowsizing設置為true后,將WordWrap也設置為true;
(5)如何使列寬根據單元格內容與列標題內容自動調整列寬
AdvStringGrid2.AutoSizeColumns(true,4);4代表前后留出的字節數。
(6)如何下AdvStringGrid中添加CheckBox,並判斷其是否被選中的狀態,效果圖如下:
AdvStringGrid使用小結
在窗體創建單元添加如下代碼:
for i:=1 to AdvStringGrid3.rowcount-1  do
     begin
       AdvStringGrid3.AddCheckBox(2,i,false,false);
     end;
那么如何判斷其是否被選取,並讀取其中的值,參考代碼如下:
var
      flag:boolean;
    for j:=1 to m do (m為表格的行數)
begin
      AdvStringGrid3.GetCheckBoxState(2,j,flag);
      if flag then
      begin
…………
end;
(7)如何調整單元格總字體的顏色,比如對於一些異常數據希望顯示為紅色,效果圖如下:
AdvStringGrid使用小結
編輯代碼如下:
AdvStringGrid2.FontColors[21,j]:=clred;
    (8)如何合並單元格:
這里我所采用的方法是,把所有數據采集完了以后再合並單元格,合並后的效果圖如下:
AdvStringGrid使用小結
合並的具體思路是這樣的,先定義一個數組類型,把每列中值不一樣的初始位置記錄下來,然后再進行合並,參考代碼如下:
i:=0;
    setlength(ipos,100);
    for j:=1 to m do
    begin
      if AdvStringGrid2.Cells[0,j]<>AdvStringGrid2.Cells[0,j+1] then
      begin
        ipos[i]:=j;
        i:=i+1;
      end;
    end;
    AdvStringGrid2.MergeCells(0,1,1,ipos[0]);
    AdvStringGrid2.MergeCells(23,1,1,ipos[0]);
    AdvStringGrid2.MergeCells(24,1,1,ipos[0]);
    if i>1 then
    begin
      for j:=0 to i-2 do
      begin
        AdvStringGrid2.MergeCells(0,ipos[j]+1,1,ipos[j+1]-ipos[j]);
        AdvStringGrid2.MergeCells(23,ipos[j]+1,1,ipos[j+1]-ipos[j]);
        AdvStringGrid2.MergeCells(24,ipos[j]+1,1,ipos[j+1]-ipos[j]);
      end;
    end;
    (9)如何清空表格
    使用Clear過程
AdvStringGrid2.Clear;
    (10)如何使單元格的所有內容居中顯示
AdvStringGrid2.VAlignment:=vtacenter;
    for j:=0 to m do//TabSheet2所有單元格顯示居中
begin
      for i:=0 to AdvStringGrid2.ColCount-1 do
      begin
        AdvStringGrid2.Alignments[i,j]:=TaCenter;
      end;
    end; 

出處:http://www.cnblogs.com/Richard1981/p/3582521.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM