关于Delphi中二维数组的声明和大小调整
这是一个实例:
procedure TMainForm.Button1Click(Sender: TObject);
var
arr:array of array of string;
begin
setlength(arr,2,3);
arr[1,2]:='this is a test';
setlength(arr,0,0);
setlength(arr,4,5);
showmessage(arr[1,2]);
end;
声明一个二维数组的方法是用 array of array of 类型 这很贴近人们的思维方式。同理可推出三维数组的声明方法为 array of array of array of 类型
对二维数组大小的调整仍然使用SetLength函数,第一个参数是数组名称,第二个参数是最靠近数组名称那个维度的大小,第三个参数是远离数组名称的维度的大小,以此类推。
在以上的例子中还有一个特别之处。就是声明了一个大一点范围的二维数组以后,如果对数组重新分配大小,并且这个新的大小是小于原来数组的,那么,大的二维数组与小的二维数组之间相差的部分将会被清除。即便是马上将数组大小调整回来甚至更大,都不能使这些数据回来。这个和Delphi中提供的TStringGrid控件不一样。对TStringGrid的行列数量进行调整后,原来的数据都不会丢失,除非使用TStringGrid.Rows.Clear;
另外,Delphi中还允许设置非矩阵型的动态数组。以下是一个例子
procedure TMainForm.Button1Click(Sender: TObject);
var
arr:array of array of string;
begin
setlength(arr,10);
setlength(arr[2],5);
arr[2,4]:='this is a test';
showmessage(arr[2,4]);
showmessage(arr[3,1]);
end;
这里面声明了一个二维字符串数组arr,首先对这个数组的第一维度(按照习惯,称之为“列”)进行设置,大小为10个。然后将这个数组的第三列(下标是2,但实际却是第三列)的行数进行单独设置,大小为5个。这样就构成了下图这样的矩阵
N N X N N N N N N N
N N X N N N N N N N
N N X N N N N N N N
N N X N N N N N N N
N N * N N N N N N N
(“X” 代表可用 “N”代表不可用 “*”代表arr[2,4]元素)
然后对arr[2,4]进行赋值“this is a test”。先要求显示arr[2,4]的值,OK,完全没有问题,但到了arr[3,1]的时候却报错,原因就是这个二维数组不是矩阵形式,除了第三列,其他地方都是不存在的,尽管已经声明了。
相关文档:
我一直使用Delphi6开发软件,看到CSDN上的OPhone手机开发,又去Google一番,听说编写手机软件
能赚钱,所以要学习Java ME,读了几天博文,大多数概念搞清楚了。
要学JavaME就得先学JavaSE,所以装了很多软件(不装那么多,OPhone就装不上去)。
推荐一篇优秀的文章:
在 NetBeans IDE 中设计 Swing GUI
读完这篇文章,初 ......
如何在Delphi里面利用Word的VBA代码进行一些总结。
1、 生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现
的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual Basic编辑器”里面就可以看
到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动 ......
procedure TForm1.Button3Click(Sender: TObject);
begin
//显示创建的数据集: dbgrid->datasource->clientdataset
//如果手工控制dbgrid显示宽度,dbgrid右键创建两个字段aa,bb,分别设置宽度即可
cds1.FieldDefs.Add('aa',ftString,40);
......
procedure mc_SplitStr(sourStr:String;splitChar:String;desLst:TStringList);
var
tmpStr:String;
sValue:String;
iStart,iPos:Integer;
begin
try
desLst.Clear; //很重要,否则,会一 ......
VCL中的Shape是个很不错的控件,可以选择几种图形,以满足我们的需求,但有时候就是觉得它的可选图形少了一点,比如我们想要一个三角形,它却没有。于是就想到来扩展一下这个控件,名为ShapeEx。其实扩展的功能不多,只是增加了一些图形。而类也并不是继承自TShape,而是继承自TGraphicControl,这样可以让我们彻底看看图形 ......