冬雪雪冬 发表于 2017-8-4 22:05:13

关于数组的认识03 - 零基础入门学习Delphi 017

动态数组。
动态数组的定义:
数组名: Array of 基类型;
如:ArrStr: Array of String;
使用时需先确定数组的长度,SetLength(ArrStr, n);
数组的下标从0开始。
二维动态数组:
ArrStr: Array of Array of String;
SetLength(ArrStr, n1, n2);
那么拌静态版动态数组可以吗?我做了如下尝试:
这样是可以的,也就是先固定第二级,再动态第一级。
var
ArrStr1: Array of Array of String;
begin
SetLength(ArrStr1, 2);
ArrStr1:= 'AAA';

end;
反过来则在SetLength处报错。
var
ArrStr1: Array of Array of String;
begin
SetLength(ArrStr1, 2);
ArrStr1:= 'AAA';

end;
如果这样写,可以通过,且可以使每行的列数不一样。
var
ArrStr1: Array of Array of String;
begin
SetLength(ArrStr1, 2);
ArrStr1:= 'AAA';
SetLength(ArrStr1, 4);
ArrStr1:= 'BBB';

end;
可以用Low、High和Length返回数组下标的最大最小值和长度。
例题:输入人数,录入姓名、语数英成绩,完成后做表。要求先弹出窗口输入人数,完成输入成绩前不出现表格。
InputBox函数,有三个参数:标题,提示信息和缺省值,如果不要缺省值将其设为’’。
注意中文的提示信息可以显示不全,可以在最后加一些空格



在FormCreate中设置InputBox,则在主窗口出现前,先出现InputBox窗口,点击OK后InputBox窗口消失,主窗口显示。
StringGrid先设置为隐藏,待输入完毕后在显示。
根据人数设置数组,设置StringGrid的行数和高度,注意高度要比行数X行高加一(因为网格线还占用1像素,高度和宽度要比要求的大一点,否则会滚动。
implementation

{$R *.dfm}
var
i, j, n: Integer;
ArrStr: Array of Array of String;

procedure TForm1.FormCreate(Sender: TObject);

begin
n:= StrToInt(InputBox('请输入', '请输入人数    ', ''));
StringGrid1.RowCount:= n + 1;
StringGrid1.Height:= (StringGrid1.DefaultRowHeight + 1) * (n + 1) + 5;
SetLength(ArrStr, n, 4);
i:= 0;
Button1.Caption:= '成绩录入' + IntToStr(i + 1) + '/' + IntToStr(n);
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';
Edit4.Text:= '';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
r, c: Integer;
begin
ArrStr:= Edit1.Text;
ArrStr:= Edit2.Text;
ArrStr:= Edit3.Text;
ArrStr:= Edit4.Text;
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';
Edit4.Text:= '';
i:= i + 1;
Button1.Caption:= '成绩录入' + IntToStr(i + 1) + '/' + IntToStr(n);
if i >= n then
begin
    Button1.Caption:= '录入完毕';
    StringGrid1.cells:= '语文';
    StringGrid1.cells:= '数学';
    StringGrid1.cells:= '英语';
    for r:= 1 to n do
      for c:= 0 to 3 do
      StringGrid1.cells:= ArrStr;
    StringGrid1.Visible:= True;
end;

end;

lwm4 发表于 2018-4-6 19:44:46

今天刚学了 为啥没人回帖呢

冬雪雪冬 发表于 2018-4-6 19:53:41

lwm4 发表于 2018-4-6 19:44
今天刚学了 为啥没人回帖呢

Delphi板块人气不旺

chxchxkkk 发表于 2018-6-8 09:36:16

顶起来,后续的学习呢

皮蛋秋 发表于 2018-11-9 21:55:53

感觉Delphi挺好的,为什么会不火了

36914541 发表于 2019-4-4 01:58:14

StringGrid1.Height:= (StringGrid1.DefaultRowHeight + 1) * (n + 1) + 5
这里最后为什么要 + 5 呢?

wa674199614 发表于 2021-8-30 21:26:02

panel把label挡住了,怎么办

13328593595 发表于 2023-8-17 14:36:32

36914541 发表于 2019-4-4 01:58
**** 作者被禁止或删除 内容自动屏蔽 ****

我也想问

星之波比 发表于 2023-11-24 15:24:55

13328593595 发表于 2023-8-17 14:36
我也想问

不然会滚动 你可以加任意
页: [1]
查看完整版本: 关于数组的认识03 - 零基础入门学习Delphi 017