Allen 2009-06-10 08:47:19 25115 13 0 0 0

当前最全的TAdvStringGrid控件属性事件介绍和使用方法(AdvStringGrid使用技巧/Cells)
---
作者:TTT
日期:20090306
---       
  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)
    {
    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)
    {
    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;
 

 


【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=qyatEhGVcy7u
Tag: Delphi技巧 推荐 TTTBLOG
我也要發一個   ·   返回首頁   ·   返回[Delphi]   ·   前一個   ·   下一個
評論
Allen#1Allen 2013-05-14 07:22:55(N) 鏈接地址
| 2523 | 东北肉牛 | 2013-05-14 07:22:55 | [email protected] | http://www.jilinhuangniu.com |
-----
吉林省东丰德诚牧业公司出售西门塔尔肉牛,联系人;李德刚,电话:0437-6590570 13179283425 网址:http://www.jilinhuangniu.comgmex3
Allen#2Allen 2013-05-15 11:16:07(N) 鏈接地址
| 2524 | 南京验房师 | 2013-05-15 11:16:07 | [email protected] | http://www.zglajyf.com |
-----
你对我很好,很爱我,很呵护我,我谢谢你。但不知道从什么时候开始,你就慢慢地不在乎我了,我到底做错什么了,以至于你不要我了?我可是你的,脸啊!v0DrE
Allen#3Allen 2013-05-16 11:42:02(N) 鏈接地址
| 2525 | Fx3miP | 2013-05-16 11:42:02 | [email protected] | http://www.jxfypump.com |
-----
写的实在是太好了,一定要支持一下wzeZX
Allen#4Allen 2013-05-21 19:27:38(N) 鏈接地址
| 2533 | FdTGCv | 2013-05-21 19:27:38 | [email protected] | http://www.chnjun.com |
-----
路过看看 学习了,谢谢分享http://www.chnjun.com2JLaB
Allen#5Allen 2013-05-22 14:51:30(N) 鏈接地址
| 2536 | F62p2U | 2013-05-22 14:51:30 | [email protected] | http://www.barbeiri.com |
-----
这个文章真要好好学习学习【shop, online shopping! www.barbeiri.com】
Allen#6Allen 2014-07-29 22:46:09(N) 鏈接地址
| 2692 | FBCF5D | 2014-07-29 22:46:09 | [email protected] | |
-----
北京报废汽车解体中心从事老旧汽车、事故车等的报废解体业务,可以办理在京各企事业单位、个的各种报废车辆解体,并负责全过程免费 办理正规报废手续,如果您需要还可以免费上门拖车。http://www.qcbfc.com本汽车解体中心拆解设备多,有规模,具有大批量拆解车辆的能力。我们始终信奉对客户负责就是对自己负责 的理念,注重信誉和高质量的服务,我们坚信客户的利益才是我们生存的保障。因此经过多年努力,我们的知名度很高,得到很多企业和个人的信赖,因此多家单位 与我们建立了固定业务关系,我们真诚地迎候北京市的各社会单位和个人前来咨询洽谈,我们愿为您耐心热情的服务,尽最大努力为您解决车辆报废过程中的困难, 并充分提供便利,我们承诺可免费上门拖车,免费办理正规报废手续,让您无任何风险.
Allen#7Allen 2014-08-05 08:15:32(N) 鏈接地址
| 2703 | 华夏装饰网 | 2014-08-05 08:15:32 | [email protected] | http://cq.hx116.com |
-----
这篇文章不错,欢迎看一下我的NvaiL
Allen#8Allen 2014-08-05 10:30:47(N) 鏈接地址
| 2705 | FKGOvK | 2014-08-05 10:30:47 | [email protected] | |
-----
北京报废汽车解体中心从事老旧汽车、事故车等的报废解体业务,可以办理在京各企事业单位、个的各种报废车辆解体,并负责全过程免费 办理正规报废手续,如果您需要还可以免费上门拖车。http://www.qcbfc.com本汽车解体中心拆解设备多,有规模,具有大批量拆解车辆的能力。我们始终信奉对客户负责就是对自己负责 的理念,注重信誉和高质量的服务,我们坚信客户的利益才是我们生存的保障。因此经过多年努力,我们的知名度很高,得到很多企业和个人的信赖,因此多家单位 与我们建立了固定业务关系,我们真诚地迎候北京市的各社会单位和个人前来咨询洽谈,我们愿为您耐心热情的服务,尽最大努力为您解决车辆报废过程中的困难, 并充分提供便利,我们承诺可免费上门拖车,免费办理正规报废手续,让您无任何风险.
Allen#9Allen 2014-08-05 11:28:03(N) 鏈接地址
| 2706 | 护栏网坤源 | 2014-08-05 11:28:03 | [email protected] | http://www.apkunyuan.com |
-----
安平县坤源护栏网厂(www.apkunyuan.com)位于亚洲最大的丝网生产基地,拥有“中国丝网之乡”美誉的安平县境内,是以生产销售GRC复合隔离栅立柱、复合立柱、刺绳立柱、桥梁防护网、防抛网、金刚网防盗窗纱、防风拟尘网、 钢笆网 、煤矿支护网、公路 铁路护栏网、监狱防护网、车间隔离网、电焊网、焊接网片、轧花网、不锈钢丝网、过滤网片、冲孔网等系列产品为主的生产型企业。电话:0318-8066806 传真:0318-8066805手机:13315826888 13323081888 业务QQ: 13323081888MMtdy
Allen#10Allen 2014-08-05 19:05:16(N) 鏈接地址
| 2707 | 南京验房公司 | 2014-08-05 19:05:16 | [email protected] | http://www.zglajyf.com |
-----
春花一缕寄相思,碧水一湾表衷肠,秋月一捧书华章,冬雪一季舞吉祥,南京绿安居验房公司愿你生命里的每一个季节都蕴含不同的收获和体验,都积存不同的美丽和幸福。I54wA
頂部     1/2  ·  下頁
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[Delphi]   ·   返回頂部