• 当前最全的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

  • 相关阅读:
    JAR 归档文件是与平台无关的文件格式
    事件的监听是由awt完成的
    AWT和Swing之间的基本区别
    Swing AWT一套新的图形界面系统
    AWT控件称为重量级控件
    java做web项目比较多
    Swing文本域的编辑
    AWT中文译为抽象窗口工具包
    swing包含了各种组件的类
    Java中的Swing及AWT又称GUI编程
  • 原文地址:https://www.cnblogs.com/xionda/p/16109775.html
Copyright © 2020-2023  润新知