结合最近自己做的一些工作,用到了第三方控件AdvStringGrid,这里就常用的一些技巧做个小小的总结
(1)如何设置表格固定的列数,如下图所示:
这里固定的列数为3列,通过设置下面属性来改变固定的列数:
AdvStringGrid.FixedCols:=n;(n为要固定的列数值)
(2)如何从AdvStringGrid中读取和向AdvStringGrid中导入值:
AdvStringGrid.Cells[j,i]:=str;(向其单元格赋值)这里需要注意的是,j为列数,i为行数。
(3)如何在运行界面中手动调整列宽与行宽,效果图如下所示:
这只如下属性即可以在运行界面中手动的调整行宽与列宽:
Options -> goColsizing:=true 列宽
Options -> goRowsizing:=true 行宽
(4)如何使文字换行,并垂直居中,效果图如下:
把goRowsizing设置为true后,将WordWrap也设置为true;
(5)如何使列宽根据单元格内容与列标题内容自动调整列宽
AdvStringGrid2.AutoSizeColumns(true,4);4代表前后留出的字节数。
(6)如何下AdvStringGrid中添加CheckBox,并判断其是否被选中的状态,效果图如下:
在窗体创建单元添加如下代码:
for i:=1 to AdvStringGrid3.rowcount-1
do
begin
AdvStringGrid3.AddCheckBox(2,i,false,false);
end;
那么如何判断其是否被选取,并读取其中的值,参考代码如下:
var
flag:boolean;
for j:=1 to m do (m为表格的行数)
begin
AdvStringGrid3.GetCheckBoxState(2,j,flag);
if flag then
begin
…………
end;
(7)如何调整单元格总字体的颜色,比如对于一些异常数据希望显示为红色,效果图如下:
编辑代码如下:
AdvStringGrid2.FontColors[21,j]:=clred;
(8)如何合并单元格:
这里我所采用的方法是,把所有数据采集完了以后再合并单元格,合并后的效果图如下:
合并的具体思路是这样的,先定义一个数组类型,把每列中值不一样的初始位置记录下来,然后再进行合并,参考代码如下:
i:=0;
setlength(ipos,100);
for j:=1 to m do
begin
if AdvStringGrid2.Cells[0,j]<>AdvStringGrid2.Cells[0,j+1]
then
begin
ipos[i]:=j;
i:=i+1;
end;
end;
AdvStringGrid2.MergeCells(0,1,1,ipos[0]);
AdvStringGrid2.MergeCells(23,1,1,ipos[0]);
AdvStringGrid2.MergeCells(24,1,1,ipos[0]);
if i>1 then
begin
for
j:=0 to i-2 do
begin
AdvStringGrid2.MergeCells(0,ipos[j]+1,1,ipos[j+1]-ipos[j]);
AdvStringGrid2.MergeCells(23,ipos[j]+1,1,ipos[j+1]-ipos[j]);
AdvStringGrid2.MergeCells(24,ipos[j]+1,1,ipos[j+1]-ipos[j]);
end;
end;
(9)如何清空表格
使用Clear过程
AdvStringGrid2.Clear;
(10)如何使单元格的所有内容居中显示
AdvStringGrid2.VAlignment:=vtacenter;
for j:=0 to m do//TabSheet2所有单元格显示居中
begin
for i:=0 to AdvStringGrid2.ColCount-1 do
begin
AdvStringGrid2.Alignments[i,j]:=TaCenter;
end;
end;
希望大家多多交流………………
转自 http://apps.hi.baidu.com/share/detail/19109764
TAdvStringGrid是Delphi编程中常用的控件,经常用于统计数据和设计比较复杂的表格。控件功能很强大,但相应的使用也很复杂!
以下是我整理出的常用技巧,有一部分是我自己的经验,有一部分是网上搜的别人的总结,有一部分整理了,有一部分没有整理;有一部分测试了,有一部分没有经过测试~~~呵呵,但都是我手工编辑的啊~~。(部分示例过程是用于创建和设置动态Cells的过程,如果不理解请参考我总结的另一篇文章<完美动态TAdvStringGrid(cells)一例>)
常用属性设置
---
Options—goEditing:是否可以编辑
Options—goTabs:控制是否可用TAB键将光标移到下一CELL
Option—goColSizing/RowSizing=true:设置列宽/行高可调整
Navigation—AlwaysEdi=true:进入单元格时自动变成编辑状态
Navigation—AdvanceOnEnter=true:回车时自动移到下一个CELL
Navigation—AdvancelInsert:控制当光标在最后一个CELL时是否可以按回车插入新行
Navigation—AllowDeleteRow:控制是否按DELETE键删除当前行
Navigation—AppendOnArrowDown:控制按下箭头是否可以新增一行(未找到这个属性)
MouseActions—RowSelect/ColSelect=true :选择整行/选择整列
Navigation—AutoComboDropSize=true组合框下拉框展开宽度自动设置
MouseActions—DirectComboDrop=True组合框进入时自动展开
(点击鼠标时直接进入编辑,或允许、不允许改变行或列宽等特性,都可以在MouseActions中设置。)
AutoNumAlign:=True则数字类型数据在CELL里会自动右对齐
AutoNumberCol(n);自动在第n列按顺序显示数字,即1,2,3……
AutoSize:=true :自动设置列宽,不推荐使用,自动调整后,真的很难看。
EnableWheel:=true :一次滚动多行,EnableWheel:=False时,一次滚动一行。
SearchFooter—Visible:=TRUE时,会在ADVStringGrid的底部显示出搜索框(未找到属性)
FloatingFooter—Visible:为TRUE时,即在ADVStringGrid底部显示求和列,要想让求和列显示小数,还需要将FloatFormat属性设置为:%g(未找到属性)
(自动换行到新追回行:必须在onCellValidate过程中执行strGrid.AddRow;可以同时加一些赋值语句。)
(当合并行后,如果想使文字垂直居中,可以先设置ADVStringGrid的 MultilineCells 设置为
True,然后在文字前面加 #13 换行来实行)
(改变固定列的显示样式:ControlLook——FixedGradientFrom(起始色)——FixedGradientFrom(结束色)
+++
用过程设置相关属性
---
1,设定单元表各列是否可以编辑:
首先在设置属性:Options—goEditing=true;然后,在CanEditCell事件中设定。
procedure
TForm50.stgPartListCanEditCell(Sender: TObject; ARow, ACol:
Integer; var CanEdit: Boolean);
Var
I:integer;
begin
if (stgPartList.cells[cC1Data_Flag,ARow]='') or
(stgPartList.cells[cC1Data_Flag,ARow]='C') then begin
canEdit:=false;
exit;
end else begin
for I:=0 to cColQty1 do begin
if ACol=I then begin
if stgPartList.cells[cC1Data_Flag,aRow]='C' then
CanEdit:=false
else begin
if cColProp1[I,1]='Y' then
CanEdit:=true;
//cColProp1:列属性数组,下同
if cColProp1[I,1]='N' then CanEdit:=False;