鱼C论坛

 找回密码
 立即注册
查看: 4174|回复: 4

[学习笔记] 基本数据类型与表达式02 - 零基础入门学习Delphi003

[复制链接]
发表于 2017-6-10 10:39:03 | 显示全部楼层 |阅读模式

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

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

x
这节课就轻松多了,上来就是一个编程实例,这也是初学者最爱做的,也是最有成就感的。
程序要求,输入一个四位数字,分别以个位十位百位千位显示。
3.PNG
下面先用鼠标画出整个布局。
6.png
要求鼠标点击Edit控件时自动清空其内容,可以调用Edit1Click事件。
  1. procedure TForm1.Edit1Click(Sender: TObject);
  2. begin
  3.   edit1.Text := '';
  4. end;
复制代码

接着
分别给4Button控件编写Click事件的过程。
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. Var
  3.   temp: Integer;
  4. begin
  5.   temp := StrToInt(edit1.Text);
  6.   label1.Caption := IntToStr(temp Mod 10)
  7. end;

  8. procedure TForm1.Button2Click(Sender: TObject);
  9. Var
  10.   temp: Integer;
  11. begin
  12.   temp := StrToInt(edit1.Text);
  13.   temp := temp div 10;
  14.   label2.Caption := IntToStr(temp Mod 10);
  15. end;

  16. procedure TForm1.Button3Click(Sender: TObject);
  17. Var
  18.   temp: Integer;
  19. begin
  20.   temp := StrToInt(edit1.Text);
  21.   temp := temp div 100;
  22.   label3.Caption := IntToStr(temp Mod 10);
  23. end;

  24. procedure TForm1.Button4Click(Sender: TObject);
  25. Var
  26.   temp: Integer;
  27. begin
  28.   temp := StrToInt(edit1.Text);
  29.   temp := temp div 1000;
  30.   label4.Caption := IntToStr(temp);
  31. end;
复制代码
最后的结果就是这样的。
4.PNG
注:这里的程序都是片段,要是完整的程序包括好几个文件。如:.dpr是项目文件,.dfm是窗体的设计,.pas是代码文件。
我们看到计算部分分布在4个过程中,如何把这些集中起来,问题的关键是这段程序放在哪里,什么时候让它执行。通过观察Edit控件的事件发现Exit事件可以满足要求,它是在焦点离开Edit时执行的。第二个问题是计算一遍以后再输入时,没有自动清除原来的结果,这很好办,只要在edit的Click中加上相应的语句即可。

首先在implementation之后定义几个变量:
  1. var
  2.   temp, g, s, b, q : Integer;
复制代码

其后的程序如下:
  1. procedure TForm1.Edit1Click(Sender: TObject);
  2. begin
  3.   edit1.Text := '';
  4.   label1.Caption := '';
  5.   label2.Caption := '';
  6.   label3.Caption := '';
  7.   label4.Caption := '';
  8. end;

  9. procedure TForm1.Button1Click(Sender: TObject);
  10. begin
  11.   label1.Caption := IntToStr(g)
  12. end;

  13. procedure TForm1.Button2Click(Sender: TObject);
  14. begin
  15.   label2.Caption := IntToStr(s);
  16. end;

  17. procedure TForm1.Button3Click(Sender: TObject);
  18. begin
  19.   label3.Caption := IntToStr(b);
  20. end;

  21. procedure TForm1.Button4Click(Sender: TObject);
  22. begin
  23.   label4.Caption := IntToStr(q);
  24. end;

  25. procedure TForm1.Edit1Exit(Sender: TObject);
  26. begin
  27.   temp := StrToInt(edit1.Text);
  28.   g := temp Mod 10; //这段可以使用循环简化程序
  29.   temp := temp Div 10;
  30.   s := temp Mod 10;
  31.   temp := temp Div 10;
  32.   b := temp Mod 10;
  33.   q := temp Div 10;
  34. end;
复制代码

我们看到程序中需要反复在整数和字符串之间转换,能否直接利用字符串操作呢?学过python的很容易想到字符串的索引,这个在Delphi中也可以实现。
  1. implementation

  2. var
  3.   temp : string;

  4. {$R *.dfm}

  5. procedure TForm1.Edit1Click(Sender: TObject);
  6. begin
  7.   edit1.Text := '';
  8.   label1.Caption := '';
  9.   label2.Caption := '';
  10.   label3.Caption := '';
  11.   label4.Caption := '';
  12. end;

  13. procedure TForm1.Button1Click(Sender: TObject);
  14. begin
  15.   label1.Caption := temp[1];
  16. end;

  17. procedure TForm1.Button2Click(Sender: TObject);
  18. begin
  19.   label2.Caption := temp[2];
  20. end;

  21. procedure TForm1.Button3Click(Sender: TObject);
  22. begin
  23.   label3.Caption := temp[3];
  24. end;

  25. procedure TForm1.Button4Click(Sender: TObject);
  26. begin
  27.   label4.Caption := temp[4];
  28. end;


  29. procedure TForm1.Edit1Exit(Sender: TObject);
  30. begin
  31.   temp := Edit1.Text
  32. end;
复制代码

这样程序是不是简单多了,需要注意的是:与python的最大区别是索引从1开始。
小技巧
精细的调节控件可以Ctrl+方向键移动,shift+方向键缩放,或者说,Ctrl+方向键改变控件的左上角,shift+方向键改变控件的右下角。
相同类型的控件,可以在一个调整好属性后,复制粘贴,得到其他的。
小甲鱼在设置Label控件时,当Caption清空后,控件的尺寸变得很小,不好操作,可以将AutoSize属性改为False,就不会随着Caption内容改变大小了。
控件全部选中可以在对象观察器中同时调整属性。

好了,程序也编好了,我们再进入基本概念部分。
常量:直接常量、符号常量和类型常量。
具体的数值就是直接常量,如12 3.14‘a’’abc’
符号常量就是我们通常意义的常量,一般全用大写字符表示,通过const来起始,如:
const
  PI= 3.14
LANG = ‘Delphi’
常数的定义的用等号,其实这点上有些混乱,delphicpython的变量赋值和逻辑等于从’=’’==’改为了’:=’’=’,但常量又用’=’来定义,感觉有其他的符号为好,如空格,但就是这样规定的改不了了。
类型常量与符号常量的区别是多了一个类型名,如:
  1. const
  2.   PI : Real = 3.14
  3.   LANG : String = ‘Delphi’
复制代码


感觉类型常量的意义不到,大概能省些内存吧,不知运算起来速度是不是更快。
变量
变量在使用前必须先声明(定义),这就是静态语言的特点。与python有很大的区别,python的变量实际上是给内存中的一个值贴上标签,而delphi则是在内存中申请一个空间,用以存放数值,空间的大小是固定的,由其类型来决定。由于内存中这块地址可能已经存放了0或1,因此这个新申请的空间的值是不可预知的,最好先赋给一个初值,以免程序得到混乱的结果。
变量有不同的作用域
在过程和函数中声明的变量,只在其内部有效。这个就是局部变量
Implementation之后声明的是单元级变量,本单元内的过程和函数都可使用。又称为超级变量。
interface之后声明的是真正的全局变量,其他引用该单元的单元也可以使用。
变量的声明是以var开头的,如:
  1. var
  2.   x, y, z : Integer
  3.   name : String
复制代码





评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-2-23 20:20:45 | 显示全部楼层
给力给力 ,初学者很方便的复习了学过的知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-23 20:27:52 | 显示全部楼层
这个最后一步感觉精华啊 ,只学会了小甲鱼的教法,看到你这里原来还可以这么用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-23 20:32:24 | 显示全部楼层
第三段中  temp[1]、temp[2]、temp[3]、temp[4]  temp定义的是字符串型 这样表示意思是什么啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-25 20:14:02 | 显示全部楼层
不多太少 发表于 2018-2-23 20:32
第三段中  temp[1]、temp[2]、temp[3]、temp[4]  temp定义的是字符串型 这样表示意思是什么啊

我是菜虫
中括号是 数组.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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