Delphi讲义电子科技大学讲师,屈鸿电话,13198563731
信箱,croacer@etang.com
Qq:3004887
第三讲 delphi语法基础作为一种程序设计的语言,Object Pascal 语言具有很多优点。数据类型丰富,并且支持结构化程序设计和面向对象程序设计。此外,易于阅读,编译迅速,并且可以使用多个单元文件来进行模块化程序设计。
Object Pascal语言是在传统 Pascal语言的基础上发展扩充的,主要体现在面向对象的方面。
一,第一个 delphi例子
Delphi主界面
● 标题栏:标题栏中显示了当前的工程名,标题栏位于最上部。
●主菜单:通过主菜单可以实现集成开发环境中的绝大部分命令。
另外,在程序开发的过程中,在界面的不同部位点击鼠标右键,
看看是否会弹出菜单,通过这些弹出菜单能实现什么新的功能或快捷操作。
●工具栏
●组件栏:在利用 D e l p h i 开发应用程序的过程中,正确、合理、恰当地使用组件非常重要。
●对象编辑器 (Object Inspector):对象编辑器的功能是实现对象 (尤其是组件 )的属性设置,创建事件处理过程并进行管理。分为下面的三个部分:
1.简介
(1),对象列表:是一个组合框,包含了当前窗体上的所有组件。
(2).属性页 ( P r o p e r t y ):属性页中列举了当前被选中的对象
(比如说组件 )的属性。可以在程序设计的过程中直接对这些属性进行修改,也可以在程序运行期间通过代码进行修改。
(3).事件页 ( E v e n t ):通常情况下,事件处理过程为空。可以双击事件右面的组合框来添加事件的处理过程。如果要共用已存在的事件处理过程,可通过下拉式组合框进行选择。
窗体设计窗口 ( F o r m ):窗体就是将来在应用程序中显示的界面。在窗体设计窗口中可以添加组件栏中的组件,窗体设计窗口的标题栏中显示的是当前正在设计的窗体的名称。
代码浏览器 (Code Explorer):可以在代码编辑器中快速地定位,
并可以在其中将定义的类完善。
代码编辑器 (Code Editor):代码编辑器为代码的输入和编辑提供了一个方便的环境。
2.第一个 delphi例子通过一个简单的例子说明 delphl的可视化和面向对象,为学习 delphi语法准备.
第一步,启动 delphi
第二步,创建新应用程序第三步,设计界面第四步,编写 Button1事件响应代码
showMessage(‘欢迎进入 delphi的世界’);
Button1.caption,=‘Hell’;
Labell.Caption:=‘这是我的第一个 Delphi程序” ;
第五步,编写 button2的事件代码
Close;
第六步,运行应用程序第七步,查看结果第八步,退出
1.注释二、基础语法文档是软件的重要组成部分。 delphi的注释有多种方法:
{}用于注释一段文字;
// 表示行注释;
{$..} 是特例,表示编译指令。
2.标识符
Delphi 中一些量的名称:变量、常量、过程、类型、函数。
◇标识符的定义规则是:字母开头;不含空格;最长 255;一般只含字母,数字,下划线。
◇名字要有意义,不要用拼音缩写。可以用英语或全拼。 GZ:工资?
高中?规则?广州?
◇ Delphi不区分大小写
3.变量是程序代码中代表一个内存地址的标识符,而此地址的内容在程序运行过程中是可变的.
Var
Value,Sum,Integer
4.常量被说明为一个固定的值,在程序运行过程中不允许改变
const
Pi=3.1415
name=“quhong”
普通常量不分配内存地址,表现为代码中的立即数
3.数据类型
◇ 学习数据类型时要弄清楚的问题:用处?定义?占多少内存?常量怎样表示?有关的函数?
◇数据类型可从多个角度划分。我们从使用该类型的角度看,可划分为整型、实型、布尔型、枚举型等;若从是否需要定义的角度看,可分为原始类型和用户定义类型。
◇要注意各个类型间是否可转换及如何实现转换。比如整数和实数。
(1).整型
◇ 用处:表达可数的数目;记录循环次数
◇定义,var a,integer; b,c,int64;
◇ 内存占用:
◇常量表示:普通 123;十六进制 $1FE7;
◇必会函数,Div,Mod,Dec,Inc,StrToInt,
(2 ).实数
◇ 用处:表示连续量
◇定义,var x,y,double;
◇ 内存占用:
◇常量表示,34.56; 0.23;,23; 1.2E-3;
◇必会函数,FloatToStr,FormatFloat,Int,Frac,Round
formatfloat('00000.00',x);
(3).字符型
● 基本的字符类型 (character)Char,精确分类包括 AnsiChar和
WideChar两种。
● AnsiChar类型的数据具有一个字节,与扩展的 ANSI字符集对应。
WideChar 类型的数据为双字节,与 Unicode字符集对应。 Unicode字符集的前 256个字符与 ANSI字符集的相同。
●通用的字符类型为 Char,与 AnsiChar类型相同。建议在获取字符类型数据的字节数时使用 SizeOf函数。
◇ 用处:表示单个字母或数字
◇定义,var a,char; const b:char='x';
◇ 内存占用:
◇常量表示,'a';单引号本身的表示,''''; chr(39); #39;
◇必会函数,chr,ord
(4).布尔型
◇ 用处:表示是或不是
◇定义,var a,boolean;
◇ 内存占用:
◇常量表示,true,false
◇ 必会函数,not and or
四种,Boolean,ByteBool,WordBool和 LongBool。其中 Boolean和
ByteBool为单字节,WordBool为双字节,LongBool为四字节。
对象 Pascal语言预定义了两个常量标识符 False和 True,可以为
Boolean类型的数据赋值为 False或 True,对应的序数值为 0 和 1 。当
ByteBool,WordBool和 LongBool类型的数据为 0 时,可以认为是
False;当不为 0时,可以认为是 True 。
(5).枚举型
◇ 用处:代表有限集合中的每一个元素,为每个元素指定一个有意义的名字。
◇定义,type TV_Color = (TV_red,TV_Blue,TV_Green); var a,
TV_Color;
◇ 内存占用:相当于常量,无内存地址
◇常量表示,TV_red,TV_Blue。
◇必会函数,ord取得序号;序号从零开始。
例如:
type Suit=(Club,Diamond,Heart,Spade); // 类型定义
var Suit1,Suit; // 变量声明其中 C l u b,D i a m o n d,H e a r t 和 S p a d e 的序数值分别为 0,1,2 和 3 。
(6).字界型
◇ 用处:限定范围的字符类型或整型(序数类型),可在编译阶段检查赋值合法性。
◇定义,type Age=1..200; var a,Age;
◇ 内存占用:与它使用的序数类型相同。
例如定义了一个表示颜色的枚举类型:
type TColors = (Red,Blue,Green,Ye l l o w,Orange,Purple,White,
Black);
接着就可以定义一个子界类型如下:
type TMyColors = Green..White;
其中 T M y C o l o r s 包括了 G r e e n,Ye l l o w,O r a n g e,P
u r p l e 和 W h i t e 。
(7).记录
◇ 用处:把许多量组合在一个类型中
◇定义:
type STU=record name,string[10]; id:integer; age,double; end;
var a,STU;
◇ 内存占用:基本上等于组成的变量所占内存的和(存在整字对齐问)
◇引用,edit1.text,= a.name; a.age,= 15.5;
◇ 注意:元素可以是任何类型,甚至是另一个记录类型;可以用 packed
指定不要整字对齐。
(8).数组
◇ 用处:表示同型元素构成的列表
◇定义:
type AAA = array[0..100] of char; BBB=array[5..10] of
STU;
var a,AAA;
◇ 内存占用:数组大小乘单个元素的占用。
◇引用,a[下标 ];如 a[2],a[34]
◇ 必会函数,Low,High。
(9).字符串
◇ delphi的串有短串和长串之分。一般短串在栈中分配空间,长串在堆中分配空间。短串最大长度是 255,与 C的串占用空间相同,结构有区别。
在堆上分配的长串,是自动堆对象,不需要手动地申请和释放。
◇定义,var s,string; {长串 } s2,string[12]; {短串}
◇可以用下标的方法引用串中的单个字母,s,=?hello?; 则 s[1] 表示‘ h?;
◇必会的内部函数,length(s); s1:=copy(s,1,2); delete(s,3,2);
insert('abc',s,2); i,= Pos('abc',s); s:=LowerCase(s); upperCase;
4.运算符对象 Pascal语言中的运算符 (Operators)有:
@,n o t,^,*,/,d i v,m o d,and,s h l,s h r,a s,+、
-,o r,xor,=,>,<,< >,< =,> =,i n 和 i s 等运算符分为下面两类,单目运算符和双目运算符。
上面的 @,n o t 和 ^ 为单目运算符,其余的为双目运算符。其中 + 和 -
也可以作为单目运算符来使用。
注:只有 ^ 可以放在操作对象的后面
(1).运算符优先级第一级 (最高 ),@,n o t
第二级,*,/,div,mod,and,shl,shr,as
第三级,+、-,o r,x o r
第四级 (最低 ),=,< >,<,>,<=,>=,i n,i s
(2).算术运算符,算术运算符对浮点数和整数进行加、减、乘、
除和取模运算
(3).逻辑运算符:
对逻辑类型的操作数进行运算,数据结果也为逻辑类型
(4).位运算符:
对整型的数据进行按位操作,所得结果也为整型数据
(5).集合运算符:
对两个集合进行操作,判断两个集合之间的关系
(6).关系运算符:
对两个普通数据类型、类、对象、接口类型或字符串类型的数据进行比较,结果数据类型为布尔类型
5.语句
● 利用保留字 v a r 可以声明已存在数据类型的变量,例如:
var
X,Y,I n t e g e r ;
M,M y Ty p e ;
(1).声名语句:
主要实现对标号、常量、数据类型、变量、过程、函数、过程和函数的输出等进行声明。
● 常量的声明:
const PI = 3.1415926535897932385;
等号右边可以使用一些预定义的函数。
● 在基本数据类型的基础上,还可以利用保留字 t y p e 自定义一些数据类型,例如 type MyType = Array[1..100] of real;
(2).赋值语句:
形式如下:
variable,= expression
Done,= (I >= 1) and (I < 100); // 将逻辑表达式的结果赋值为一个变量
Hue1,= [Blue,Succ(C)]; // 将一个子集赋值为一个变量
I,= Sqr(J) - I* K; // 将一个表达式的结果赋值为一个变量
Shortint(MyChar),= 122; // 给类型转换后的变量赋值
MyString[I],=?A?; // 给数组的一个元素赋值
TMyObject.SomeProperty,= Tr u e ; // 给对象的属性赋值
(3).复合语句:
首尾使用 b e g i n 和 e n d 括起来一组语句称为复合语句。复合语句可以嵌套使用,也允许空的复合语句出现,也就是在 begin 和
end 之间没有其他语句。
例如:
b e g i n
Z,= X; X,= Y;
Y,= Z;
b e g i n
e n d ;
e n d ;
(4),with语句:
在使用记录类型的变量时,可以通过 w i t h 语句指定一些语句都是针对某一个变量来说的,这样可以简化代码的输入量。
形式如下:
with obj do statement
注:如果 w i t h 语句指定的某个变量具有某个字段,另一个变量也具有该字段,则在 w i t h 语句中对不指明变量的该字段来说,所有的操作都是针对 w i t h 语句指定的变量来进行的。如果要对其他变量的该字段进行操作,要在 w i t h 语句中指明变量名。
(5),IF语句:
i f 语句主要实现了判断的功能。具体形式如下:
if expression then statement 或者
if expression then statement1 else statement2
注意:
在第二种情况下,语句 statement1 的最后不需要分号,;”。
如果 statement1是一个复合语句,则该复合语句的 end后面也不需要分号。 s
(6),CASE语句:
c a s e 语句对一个结果的多个分支进行判断,具体形式如下:
case selectorExpression of
caseList1,statement1;
.,,
caseListn,statementn;
e l s e
s t a t e m e n t ;
如果 selectorExpression的数值等于 caseList1,则执行 statement1语句,执行完毕后就退出 case语句。如果 selectorExpression的数值不等于 caseList1,则依次向下判断。如果所有罗列出来的数值都不满足,
就执行 else语句后面的 statement语句。 else及其后面的 statement语句可以不要。
(7),REPEAT语句:
repeat语句可以实现循环操作的功能。
具体形式如下:
repeat
statement1;
...;
statementn;
until expression
在表达式 expression为 True之前,循环执行语句 statement1到
statementn。例:
Project1;
var I,Integer;
b e g i n
I,= 1 ;
r e p e a t // repeat 语句开始行
w r i t e l n ( I ) ;
I,= I + 1 ;
until I=100; // repeat 语句结束行
e n d,
(8),WHILE语句:
w h i l e 语句也可以实现循环操作的功能。
具体形式如下:
while expression do statement
在表达式 e x p r e s s i o n 为 F a l s e 之前,循环执行语句 s t a
t e m e n t 。
例,
while I<=100 do // while 语句开始行
b e g i n
w r i t e l n ( I ) ;
I,= I + 1 ;
end; // while 语句结束行
(9),FOR语句:
for语句可以实现循环操作的功能。形式如下:
for counter,= initialValue to finalValue do statement
或者:
for counter,= initialValue downto finalValue do statement
其中 counter为一个有序类型的数据,initialValue为 counter的初始值。在第一种形式中,使用的是保留字 to,counter则从初始值 initialValue开始逐一增加到 finalValue;在第二种形式中,使用的是保留字 downto,counter则从初始值 initialValue开始逐一递减到 finalValue。每次执行一次 s t a t e m e n t 语句。
(10),TRY EXCEPT语句:
在 t r y.,,e x c e p t 语句中可以进行抛出异常和处理异常的工作。 一般形式如下:
t r y
S t a t e m e n t s 1 ;
e x c e p t
Exception block;
end;
Try后面到 Except之前的语句通常是希望正常执行的代码,执行时如果触发了异常,程序就跳入 Except部分。
(11),TRY … FINALLY语句:
在 t r y.,,Finally 语句主要用于在发生异常的情况下确保释放应用程序已分配的资源。一般形式如下:
t r y
Statement list1;
Finally
statement list2;
end;
例如:
R e s e t ( F ) ;
t r y
..,// 对文件进行操作
f i n a l l y
C l o s e F i l e ( F ) ; // 关闭文件
e n d;