鱼C论坛

 找回密码
 立即注册
查看: 4678|回复: 8

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

[复制链接]
发表于 2017-8-4 22:05:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
动态数组。
动态数组的定义:
数组名: 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[5..6] of String;
begin
  SetLength(ArrStr1, 2);
  ArrStr1[1, 6]:= 'AAA';

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

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

end;
可以用Low、High和Length返回数组下标的最大最小值和长度。
例题:输入人数,录入姓名、语数英成绩,完成后做表。要求先弹出窗口输入人数,完成输入成绩前不出现表格。
InputBox函数,有三个参数:标题,提示信息和缺省值,如果不要缺省值将其设为’’。
注意中文的提示信息可以显示不全,可以在最后加一些空格
3.JPG
4.JPG
5.JPG
在FormCreate中设置InputBox,则在主窗口出现前,先出现InputBox窗口,点击OK后InputBox窗口消失,主窗口显示。
StringGrid先设置为隐藏,待输入完毕后在显示。
根据人数设置数组,设置StringGrid的行数和高度,注意高度要比行数X行高加一(因为网格线还占用1像素,高度和宽度要比要求的大一点,否则会滚动。
  1. implementation

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

  6. procedure TForm1.FormCreate(Sender: TObject);

  7. begin
  8.   n:= StrToInt(InputBox('请输入', '请输入人数    ', ''));
  9.   StringGrid1.RowCount:= n + 1;
  10.   StringGrid1.Height:= (StringGrid1.DefaultRowHeight + 1) * (n + 1) + 5;
  11.   SetLength(ArrStr, n, 4);
  12.   i:= 0;
  13.   Button1.Caption:= '成绩录入  ' + IntToStr(i + 1) + '/' + IntToStr(n);
  14.   Edit1.Text:= '';
  15.   Edit2.Text:= '';
  16.   Edit3.Text:= '';
  17.   Edit4.Text:= '';
  18. end;

  19. procedure TForm1.Button1Click(Sender: TObject);
  20. var
  21.   r, c: Integer;
  22. begin
  23.   ArrStr[i, 0]:= Edit1.Text;
  24.   ArrStr[i, 1]:= Edit2.Text;
  25.   ArrStr[i, 2]:= Edit3.Text;
  26.   ArrStr[i, 3]:= Edit4.Text;
  27.   Edit1.Text:= '';
  28.   Edit2.Text:= '';
  29.   Edit3.Text:= '';
  30.   Edit4.Text:= '';
  31.   i:= i + 1;
  32.   Button1.Caption:= '成绩录入  ' + IntToStr(i + 1) + '/' + IntToStr(n);
  33.   if i >= n then
  34.   begin
  35.     Button1.Caption:= '录入完毕';
  36.     StringGrid1.cells[1, 0]:= '语文';
  37.     StringGrid1.cells[2, 0]:= '数学';
  38.     StringGrid1.cells[3, 0]:= '英语';
  39.     for r:= 1 to n do
  40.       for c:= 0 to 3 do
  41.         StringGrid1.cells[c, r]:= ArrStr[r - 1, c];
  42.     StringGrid1.Visible:= True;
  43.   end;

  44. end;
复制代码

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-6 19:53:41 From FishC Mobile | 显示全部楼层
lwm4 发表于 2018-4-6 19:44
今天刚学了 为啥没人回帖呢

Delphi板块人气不旺
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表