• TAdvStringGrid控件使用技巧[转]


    http://www.delphibbs.com/keylife/iblog_show.asp?xid=24767 大富翁

    本文简单的介绍了TAdvStringGrid控件的一些常用的属性事件和方法,主要用于统计数据和设计比较复杂的表格!核心部分:合并单元格的几个函数和过程!


      1.可否进行编辑
      设置Options中goEditing设置为true。

      2.点击鼠标时直接进入编辑,或允许、不允许改变行或列宽等特性,都可以在MouseActions中设置。

      3.设置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()事件进行设置,例如:
      void __fastcall TForm1::editgridGetEditorType(TObject *Sender,int aCol, int aRow, TEditorType &aEditor)
    {
      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。
      }
    }

      4.TAdvStringGrid中每一种格式的输入与输出都要对应,否则载入时不能识别(因为各种类型的文件之间存储格式是不一样的)。例如:
      如果保存时使用TAdvStringGrid::SaveToFile(),那么载入时就要相应的使用TAdvStringGrid::LoadFromFile();其它对应如下:
    TAdvStringGrid:: LoadFromBinFile();??TAdvStringGrid:: SaveToBinFile();
    TAdvStringGrid:: LoadFromCSV ();??TAdvStringGrid:: SaveToCSV();
    等等。

      5.增加edComboEdit和edComboList的下拉列表:
    方法:
    TAdvStringGrid:: ClearComboString(void); //清除已有了下拉列表
    TAdvStringGrid:: AddComboString(AnsiString S);
    TAdvStringGrid::Combobox->Sorted = true;
    通过Combobox可以访问内置的Combo类型的控件的属性和方法。

      6.增加edCheckBox界面处理
      在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.通过TAdvStringGrid:: SpinEdit对象,可以访问内置的SpinEdit类的特性;
      同样的道理,通过其它一些内置的对象,可以访问这些类的属性,执行这些类的方法。

      8.TAdvStringGrid中的排序问题:
      首先设置排序参数:通过TAdvStringGrid:: SortSettings属性(发布TSortSettings类为一个属性),通过这个属性设置
    然后调用TAdvStringGrid::QSort()方法应用SortSettings。
    排序方向: SortSettings-> Direction=enum {sdAscending, sdDescending};
    排序列:SortSettings->Column = 3;

      9.TAdvStringGrid::AutoSize属性,自动设置列宽,不推荐使用,自动调整后,真的很难看。

      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类型的值来访问单元格,如果读取失败,会触发异常.

      17.对特定单元格的对齐方式进行处理
      添加TAdvStringGrid::OnGetAlignment事件处理句柄。

      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, TCellHAlign
    hal, 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类的相关属性

  • 相关阅读:
    如何实现shell并发 一个入门级可控多线程shell脚本方案
    Android SDK 开发指南
    Android SDK上手指南:知识测试
    JavaScript apply
    chrome 调试
    jQuery file upload上传图片出错分析
    jQuery插件开发
    yarn
    What is 'typeof define === 'function' && define['amd']' used for?
    jQuery .closest()
  • 原文地址:https://www.cnblogs.com/linyawen/p/1905146.html
Copyright © 2020-2023  润新知