TAdvStringGrid用法.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TAdvStringGrid 用法
- 资源描述:
-
TAdvStringGrid(一) ****************************** 技巧一 本文全部摘自网络,出处很多,感谢原创作者及其它引用者。 文章介绍了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类的相关属性。 ************************** 技巧二 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; 一、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列按顺序显示数字,即1,2,3…… 十、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; 十四、如果在录入的过程中,要对某列做格式化,比如保留几位小数,可用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; 十五、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); --------------------------------------------------------------------- 3、AdvStringGrid插入checkbox列 把advstringgrid的option属性中的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); --------------------------------------------------------------------- 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; 前面是我在程序中拉的一段. 控件常用事件: //单元格可否被修改 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设置为taCenter、VAlign设置为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; 7、cell中内嵌combobox OnGetEditorType事件 if ACol = 1 then begin aEditor := edComboList; grdMain.ClearComboString; grdMain.AddComboString('借'); grdMain.AddComboString(' 贷'); end;展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




TAdvStringGrid用法.docx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/6665651.html