TAdvStringGrid控件使用技巧
2010-12-15 08:05:48 来源:WEB开发网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)
Tags:TAdvStringGrid 控件 技巧
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接