冬雪雪冬 发表于 2017-6-10 10:39:03

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

这节课就轻松多了,上来就是一个编程实例,这也是初学者最爱做的,也是最有成就感的。
程序要求,输入一个四位数字,分别以个位十位百位千位显示。

下面先用鼠标画出整个布局。

要求鼠标点击Edit控件时自动清空其内容,可以调用Edit1的Click事件。
procedure TForm1.Edit1Click(Sender: TObject);
begin
edit1.Text := '';
end;

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

procedure TForm1.Button2Click(Sender: TObject);
Var
temp: Integer;
begin
temp := StrToInt(edit1.Text);
temp := temp div 10;
label2.Caption := IntToStr(temp Mod 10);
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
temp: Integer;
begin
temp := StrToInt(edit1.Text);
temp := temp div 100;
label3.Caption := IntToStr(temp Mod 10);
end;

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

其后的程序如下:procedure TForm1.Edit1Click(Sender: TObject);
begin
edit1.Text := '';
label1.Caption := '';
label2.Caption := '';
label3.Caption := '';
label4.Caption := '';
end;

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

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

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

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

procedure TForm1.Edit1Exit(Sender: TObject);
begin
temp := StrToInt(edit1.Text);
g := temp Mod 10; //这段可以使用循环简化程序
temp := temp Div 10;
s := temp Mod 10;
temp := temp Div 10;
b := temp Mod 10;
q := temp Div 10;
end;

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

var
temp : string;

{$R *.dfm}

procedure TForm1.Edit1Click(Sender: TObject);
begin
edit1.Text := '';
label1.Caption := '';
label2.Caption := '';
label3.Caption := '';
label4.Caption := '';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := temp;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
label2.Caption := temp;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
label3.Caption := temp;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
label4.Caption := temp;
end;


procedure TForm1.Edit1Exit(Sender: TObject);
begin
temp := Edit1.Text
end;

这样程序是不是简单多了,需要注意的是:与python的最大区别是索引从1开始。小技巧:精细的调节控件可以Ctrl+方向键移动,shift+方向键缩放,或者说,Ctrl+方向键改变控件的左上角,shift+方向键改变控件的右下角。相同类型的控件,可以在一个调整好属性后,复制粘贴,得到其他的。小甲鱼在设置Label控件时,当Caption清空后,控件的尺寸变得很小,不好操作,可以将AutoSize属性改为False,就不会随着Caption内容改变大小了。控件全部选中可以在对象观察器中同时调整属性。
好了,程序也编好了,我们再进入基本概念部分。常量:直接常量、符号常量和类型常量。具体的数值就是直接常量,如12, 3.14,‘a’,’abc’。符号常量就是我们通常意义的常量,一般全用大写字符表示,通过const来起始,如:constPI= 3.14 LANG = ‘Delphi’常数的定义的用等号,其实这点上有些混乱,delphi将c和python的变量赋值和逻辑等于从’=’和’==’改为了’:=’和’=’,但常量又用’=’来定义,感觉有其他的符号为好,如空格,但就是这样规定的改不了了。类型常量与符号常量的区别是多了一个类型名,如:const
PI : Real = 3.14
LANG : String = ‘Delphi’


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





不多太少 发表于 2018-2-23 20:20:45

给力给力 ,初学者很方便的复习了学过的知识{:10_298:}

不多太少 发表于 2018-2-23 20:27:52

这个最后一步感觉精华啊 ,只学会了小甲鱼的教法,看到你这里原来还可以这么用。

不多太少 发表于 2018-2-23 20:32:24

第三段中temp、temp、temp、temptemp定义的是字符串型 这样表示意思是什么啊

john19997 发表于 2021-8-25 20:14:02

不多太少 发表于 2018-2-23 20:32
第三段中temp、temp、temp、temptemp定义的是字符串型 这样表示意思是什么啊

我是菜虫
中括号是 数组.
页: [1]
查看完整版本: 基本数据类型与表达式02 - 零基础入门学习Delphi003