




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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;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为一个TCheckBoxAdvStringGrid1-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 chkfull-Checked) findparams chkregular-Checked) findparams dir-ItemIndex=1) findparams where-ItemIndex=1) findparams where-ItemIndex=2) findparams FindFirst(Find-findtext-Text,findparams);if (res.x=0)AdvStringGrid1-Col=res.x;AdvStringGrid1-Row=res.y;elseShowMessage(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;elseShowMessage(Text not found);/-16.TAdvStringGrid: Intsint AColint 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).自动添加编号:AutoNumberColTAdvStringGrid: 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-CellImages51-Add(0);AdvStringGrid2-CellImages51-Add(1);(7).如果TAdvStringGrid: EnableHTML属性启用,那么,单元格中输入HTML源代码,它将以HTML格式显示出来,例如:AdvStringGrid2-Cells71=Easy HTMLformatting;AdvStringGrid2-Cells72=Including AdvStringGrid2-Cells73=Enjoy-miniHTML;AdvStringGrid2-Cells74=AdvStringGrid2-Cells75=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:Intscol,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-Cells83=Cell withcomment;(11).通过TAdvStringGrid增强型的HTML语法解析,添加内部单元格之间的链接,例如:AdvStringGrid2-Cells84= AdvStringGrid2-Cells85= (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-StringsComboBox1-ItemIndex;fd-Column = 1;fd = AdvStringGrid3-Filter-Add();fd-Con_dition=ComboBox2-Items-StringsComboBox2-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);beginAdvStringGrid1.FixedRows:=2;AdvStringGrid1.SaveFixedCells := false;AdvStringGrid1.MergeCells(1,0,2,1);AdvStringGrid1.MergeCells(3,0,2,1);AdvStringGrid1.Cells1,0 := Identification;AdvStringGrid1.Cells1,1 := Brand;AdvStringGrid1.Cells2,1 := Type;AdvStringGrid1.Cells3,1 := CC;AdvStringGrid1.Cells4,1 := Pk;AdvStringGrid1.Cells3,0 := Power;AdvStringGrid1.BtnEdit.ButtonWidth := 24;end;一、NavigationAdvancelInsert:控制当光标在最后一个CELL时是否可以按回车插入新行二、NavigationAdvanceOnEnter:控制按回车是否自动移到下一个CELL三、NavigationAllowDeleteRow:控制是否按Delete键删除当前行四、NavigationAppendOnArrowDown:控制按下箭头是否可以新增一行五、EnableWheel:=true时,一次滚动多行,EnableWheel:=False时,一次滚动一行。六、SearchFooterVisible:=TRUE时,会在ADVStringGrid的底部显示出搜索框七、OptionsgoTabs:控制是否可用TAB键将光标移到下一CELL八、AutoNumAlign:=True则数字类型数据在CELL里会自动右对齐九、ADVStringGrid.AutoNumberCol(0);表示第0列按顺序显示数字,即1,2,3十、FloatingFooterVisible:为TRUE时,即在ADVStringGrid底部显示求和列,要想让求和列显示小数,还需要将FloatFormat属性设置为:%g十一、当合并行后,如果想使文字垂直居中,可以先设置ADVStringGrid的 MultilineCells 设置为 True,然后在文字前面加 #13 换行来实行十二、改变固定列的显示样式:ControlLookFixedGradientFrom(起始色)FixedGradientFrom(结束色)十三、改变单元格的背景色,可在OnGetCellColor事件中写代码实行(前提需将FLAT设置为TRUE):procedure Tfrm_dingdan.strgridGetCellColor(Sender: TObject; ARow,ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);beginif 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);begincase ACol of 4: floatformat:=%.0f; /第4列保留0位小数 5: floatformat:=%.3f; /第5列保留3位小数 6: floatformat:=%.6f; /第6列保留6位小数 7: floatformat:=%.5f; /第7列保留5位小数end;end;十五、OptionsgoRangeSelect:控制是否可以选择多行,goRowSelect控制选中整行、AdvStringGrid做多表头在onIsFixedCell事件中返回true的就是表头-2、怎样实现AdvStringGrid的列宽自动按内容调整? 怎样实现AdvStringGrid的列宽自动按列标题宽度调整? autosize属性的作用是什么?autosize,可以根据内容调整列宽。自动按标题列调整,自己在其RESIZE事件里对COLWIDTHSI赋值就行了。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.Cells0,0:=123456; advstringgrid.mergecol(3,4); advstringgrid.MergeCells(0,0,2,2);5、with advStringGrid1 do /引用单元格时, 列数在前,行数在后.MergeCells(0,0,1,3);/合并单元格.前两参数为列数行数. 后两参数分别为要合并的列数和行数Cells1,0 := Format(分度线( %s ),m_sMeasureRangeUnit); MergeCells(3,JieDianStart - 1,1,1); Cells3,JieDianStart - 1 := 动作方式; ColWidths3 := ColWidths3 + 10; Colors3,JieDianStart - 1 := FixedColor; FontNames3,JieDianStart -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论