聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> TAdvStringGrid用法

TAdvStringGrid用法

时间:2018-07-02 08:38:42    下载该word文档

TAdvStringGrid()

******************************
技巧一

本文全部摘自网络,出处很多,感谢原创作者及其它引用者。

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


  1.可否进行编辑
  设置OptionsgoEditing设置为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.增加edComboEditedComboList的下拉列表:
方法:
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;iRowCount;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

AdvStringGrid2->Cells[7][3]="Enjoy
----------

miniHTML";

AdvStringGrid2->Cells[7][4]="
AdvStringGrid2->Cells[7][5]="125 9/16";
这些内容在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来预览.这个控件中提供了接口可以直接对界面进行本地化。
  使用TAdvStringGridPrint()方法来打印。打印设置调整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] := '

Identification

';
AdvStringGrid1.Cells[1,1] := 'Brand';
AdvStringGrid1.Cells[2,1] := 'Type';
AdvStringGrid1.Cells[3,1] := 'CC';
AdvStringGrid1.Cells[4,1] := 'Pk';
AdvStringGrid1.Cells[3,0] := '

Power

';

AdvStringGrid1.BtnEdit.ButtonWidth := 24;
end;
一、Navigation——AdvancelInsert:控制当光标在最后一个CELL时是否可以按回车插入新行
二、Navigation——AdvanceOnEnter:控制按回车是否自动移到下一个CELL

三、Navigation——AllowDeleteRow:控制是否按Delete键删除当前行

四、Navigation——AppendOnArrowDown:控制按下箭头是否可以新增一行

五、EnableWheel:=true时,一次滚动多行,EnableWheel:=False时,一次滚动一行。

六、SearchFooter—Visible:=TRUE时,会在ADVStringGrid的底部显示出搜索框

七、Options—goTabs:控制是否可用TAB键将光标移到下一CELL

八、AutoNumAlign:=True则数字类型数据在CELL里会自动右对齐

九、ADVStringGrid.AutoNumberCol(0);表示第0列按顺序显示数字,即123……

十、FloatingFooter—Visible:TRUE时,即在ADVStringGrid底部显示求和列,要想让求和列显示小数,还需要将FloatFormat属性设置为:%g

十一、当合并行后,如果想使文字垂直居中,可以先设置ADVStringGrid MultilineCells 设置为 True,然后在文字前面加 #13 换行来实行

十二、改变固定列的显示样式:ControlLook——FixedGradientFrom(起始色)——FixedGradientFrom(结束色)

十三、改变单元格的背景色,可在OnGetCellColor事件中写代码实行(前提需将FLAT设置为TRUE):

procedure Tfrm_dingdan.strgridGetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
begin
if ARow=0 then     //如果不加这一句,则是以下对应的整列,我这里是只改变固列,所以要把ARow设为0
    begin
      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;
十四、如果在录入的过程中,要对某列做格式化,比如保留几位小数,可用ADVStringGridGetFloatFormat事件中操作。比如:


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;
十五、Options—goRangeSelect:控制是否可以选择多行,goRowSelect控制选中整行

AdvStringGrid做多表头
onIsFixedCell事件中返回true的就是表头

--------------------------------------------------------------------
2、怎样实现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);
--------------------------------------------------------------------- 
3AdvStringGrid插入checkbox
advstringgridoption属性中的goEditing 设为true

from create事件中加入


for i:=1 to advstringgrid.rowcount-1 do
    advstringgrid.AddCheckBox(1,i,false,false);   //其中1表示所在列数
   GetCheckBoxState(col,row) 可以查询的
   Bchek:Boolean;
   AdvSGrid.GetCheckBoxState(Col,Arow,Bchek);
---------------------------------------------------------------------
4stringGrid中的行或列和并


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;


前面是我在程序中拉的一段.
控件常用事件:
//单元格可否被修改
onCanEditCell(Sender: TObject; ARow, ACol: Integer; var CanEdit: Boolean);
begin
if ACol = 0 then
    CanEdit := false; //false不能修改
end;

//对齐方式

AdvstringGrid设置标题行对齐方式 
procedure Tfrmmain.AdvStringGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
if ARow=0 then
begin
     HAlign := taCenter;
     VAlign := vtaCenter;
end; 
AdvstringGrid好像没有直接提供设置列标题对齐的方式,但可以在事件中来设置对齐,用到的事件是GetAlignment事件,只需要在Arow参数为0时,把HAlign设置为taCenterVAlign设置为Vtacenter就可以实现水平垂直剧中对齐。


onGetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
     HAlign := taCenter;
     VAlign := vtaCenter;
end;
//是否固定列 ,即标题列, 在表中非开头行需要固定标题列时很有用
onIsFixedCell(Sender: TObject; ARow,
ACol: Integer; var IsFixed: Boolean);
begin
     if(ARow = 10) then
     begin
          IsFixed := True;
     end;
end;
-------------------------------------------------------------------------------
6、如何在AdvStringGrid中为每个单元格内的字体定制颜色
OnDrawCell事件(看名字这个控件应该有这个事件把,呵呵!)写如下代码:
(Sender as TAdvStringGrid).Canvas.Font.Color:=clNavy;
7cell中内嵌combobox
OnGetEditorType事件
if ACol = 1 then
begin
        aEditor := edComboList;
        grdMain.ClearComboString;
        grdMain.AddComboString('');
        grdMain.AddComboString(' ');
end;

免费下载 Word文档免费下载: TAdvStringGrid用法

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服