delphi基本语法
本文参考自《delphi2010语法手册》
1. 工程文件结构
源文件联系着unit单元,delphi主模块源文件格式为.dpr,其他模块为.pas,一个完整程序由一个.dpr和若干.pas组成。
2..dpr 程序结构
一个.dpr由程序头、[use从句]、主程序块组成。一个典型工程文件如下:

1 program Project;
2 {$APPTYPE CONSOLE}
3 uses
4 SysUnits;
5 begin
6
7 end.

程序头指示所编写程序名称,良好的程序,.dpr代码尽量少,尽量将代码分布在.pas中然后再在.dpr里调用。
在程序主文件使用到的所有.pas文件必须列在uses从句里。
用begin和end包围的一段代码称为一个代码块。工程文件含有一个主程序块用于存放主程序代码,工程文件中的全局标识符必须声明于begin之前。
3. 单元文件结构
程序的每个子模块称为一个单元,每个单元存储在一个.pas文件中,一个文件对应一个单元。单元文件后缀名.pas,每个.pas文件依次包括:单元名称、Interface关键字、implementation、[initialization]、[finalization]、关键字end。一个完整的.pas文件如下:

1 unit Unit1; //单元名称
2
3 interface //interfae起始部分
4 uses ...
5
6 implementation //implementation起始处
7 uses.....
8
9 initialization //initialization部分起始处
10 .....
11
12 finalization //finalization部分起始处
13 .....
14
15 end. //单元文件结尾(end后必须以句号结尾)

unit名称与.pas文件名称一致,一个.dpr中不能应用两个名称相同的.pas.
interface至implementation之间的部分称为interface部分。该部分可定义变量、常量、例程等。并非只有此处才可以定义标识符,但只有此处定义的标识符才能被其他文件访问(全局标识符)。此部分定义的例程只是一个原型,具体的实现部分则放在implementation中。uses关键字紧接着interface之后,两者间不允许有任何其他代码。
implementation至initialization之间的部分可书写例程的体代码,此处定义的比变量、常量、例程等,只能在本implementation单元使用,interface部分和其他单元无法使用。
initialization至finalization之间的部分可选,此部分的代码在程序启动时运行,若多个单元中都包含该部分,则按照工程文件uses顺序执行。
finalization部分可有可无,仅当initialization存在时才可使用此部分。程序退出时使用此部分代码,除非程序由Halt强行退出。当多个单元都存在此部分,运行顺序与initialization相反。
4. 单元语法与uses从句
5. delphi的数据类型
简单类型包括:整形、字符型、布尔型、枚举、子界类型、实型。除实型以外,都是有序类型,即每个值在值域中都有一个序数。
6. 整形:
7. 实型:
8. 字符类型:包括ansiChar和WideChar,ansiChar使用一个字节表示一个字符,WideChar则用两个字节表示一个字符。二者之间不能相互赋值。
9. 布尔型:用于判断真假,只有true和false两种值。delphi内置4中布尔类型:Boolean/ByteBool/WordBoolLongBool,内存中分别占1、1、2、4个字节。
10. 枚举类型:
type
名 = (标识符1,标识符2,标识符3.。。。);
11. 子界类型:
type
子界类型名 = 下界..上界
结构类型包括:集合、数组、记录
12. 集合:

type
set1 = set of 有序值得集合 例子:
type
set1 = set of 0..10; type
set2 = set of (red,green,blue); type
set3 = set of byte;

13. 数组:

静态: 一维:
type
myarr = Array[3..5] of integer //序号是3、4、5值为integer类型 多维:
type
myarr = Array[1..3] of Array[3..5] of integer;
或
type
myarr = Array[1..3,3..5] of integer; 动态:
type
dmyarr = array of char;
var
dal:dmyarr;

14. 记录类型:
type
trec = record
mem1:char;
mem2:integer;
...
end;
15. 字符串类型:
16. 指针类型:

指针的声明:
var ansiStr :^AnsiString;
或先声明类型在声明变量:
type pansiStr = ^AnsiString;
var ansiStr:pansiStr; 指针的赋值:
方式有二,即将另一指针变量值赋给该指针变量,此两个变量指向同一个地址;或者将某个变量的地址赋给该变量。
@取址符 如@ansiStr
^取值符 如ansiStr^

17. 变体类型:
variant
18.运算符
有序类型运算符:

ord:返回有序值在值域中的序数
如:ord('A') = 65
pred:返回指定值的前一个值
pred('B') = A
succ:返回指定值的下一个值
succ('A') = B
high:返回变量能够表示的最大值或某类型的上界
high(byte) = 255
low:与high相反

数学运算符:
+
-
*
/
div 整除
mod 求余
逻辑运算符:
not 反
and 且
or 或
xor 异或
位运算符:
not 按位取反
and 按位取且
or 按位取或
xor 按位取异或
shl 左移
shr 右移
字符串运算符:
+ 将字符串连接
集合运算符:
指针运算符:
关系运算符:
19. 条件语句
if语句
1 if <条件表达式> then
2 <语句1>
3 else
4 <语句2>;
20. 选择语句

1 Case 选择表达式 of
2 常量1:语句1;
3 ...
4 常量n:语句n;
5 Else
6 ...
7 End;

21. 循环语句
1》while

1 While 条件表达式 do
2 循环语句; 例:
while i < n do
begin
sum := sum+i;
i := i+1;
end;

2》Repeat

repeat 循环体
until 条件表达式 例:
repeat
i := i+1;
sum := sum+i;
until i = n;

3》for
for 计数器 := 初值 to/downto 终值 do
循环体 例:
for i := 1 to/downto n do
writeln('hello delphi');
4》for...in

for v in set do
循环体 例:
var
myset :set of AnsiChar;
ch : AnsiChar;
begin
myset := ['1','2'];
for ch in myset do
writeln(ch);
end.

for in还可以遍历数组、字符串、类、接口、记录。
22. continue和break语句
23. 程序终止
exit:退出当前正在执行的程序块,不会退出整个程序,除非将其用在了主程序块(.dpr文件中)中。

procedure Mi;
begin
exit;
end; 或返回一个参数,该参数类型和函数返回类型一致
function Mi:string
begin
exit('str');
end;

Halt:引发异常中断并通过中断直接退出整个程序。
procedure Mi;
begin
Halt;
end;
terminate:delphi窗体程序中含有一个全局程序对象(一般是application),其中的terminate方法可在窗体程序的任何地方使程序正常中断并退出。
procedure TForm1.Button1Click(sender:TObject);
begin
Application.terminate;
end;
delphi基本语法的更多相关文章
- delphi c#语法转换
delphi c#语法转换 delphi c# s:array[1..5] of integer TIArr = array of integer; Berlin有这个新功能 TArra ...
- Delphi 正则表达式语法(10): 选项
Delphi 正则表达式语法(10): 选项 // preCaseLess: 不区分大小写, 相当于其他语言中的 i var reg: TPerlRegEx; begin reg := TPe ...
- Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索"
Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var reg: TPerlRegEx; begin ...
- Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用
Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用 //准备: 我们先写一个搜索所有英文单词的表达式 var reg: TPerlRegEx; begin reg := TP ...
- Delphi 正则表达式语法(7): 匹配转义字符
Delphi 正则表达式语法(7): 匹配转义字符 // ? 号的意义是匹配 0-1 次, 如果需要匹配 ? 怎么办 var reg: TPerlRegEx; begin reg := TPe ...
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); ...
- Delphi 正则表达式语法(5): 边界
Delphi 正则表达式语法(5): 边界 // \b 单词边界 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg ...
- Delphi 正则表达式语法(4): 常用转义字符与 .
Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var reg: TPerlRegEx; begin reg := TPerlRegE ...
- Delphi 正则表达式语法(3): 匹配范围
Delphi 正则表达式语法(3): 匹配范围 // [A-Z]: 匹配所有大写字母 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(n ...
- Delphi 正则表达式语法(2): 或者与重复
Delphi 正则表达式语法(2): 或者与重复 // | 号的使用, | 是或者的意思 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create ...
随机推荐
- ubuntu16.04下安装jdk和android studio
1首先要在JDK官网下载对应的Linux的JDK版本.进入该网站后,先选择Accept License Agreement然后即可下载.本人的Linux系统为ubuntukylin 16.04 64 ...
- 20135306黄韧[2.72 2.77 3.70](http://i.cnblogs.com/EditPosts.aspx?opt=1)
2.72 A.size_t是无符号整数,因此左边都会先转换为无符号整数,它肯定是大于等于0的. B.判断条件改为 if(maxbytes > 0 && maxbytes > ...
- RocEDU.阅读.写作《你的灯亮着吗?》
<你的灯亮着吗?> 一.对本书的认识 这本书的作者就如何训练思维能力指点迷津.书中提及的观点包括"问题是理想状态和现实状态之间的差别",以及"无论表面上表现的 ...
- java个人总结
20145230<Java程序设计>课程总结 每周读书笔记链接汇总 20145230<java程序设计>第0周学习总结:http://www.cnblogs.com/kobe2 ...
- JS闭包那些事
关于闭包,我曾经一直觉得它很讨厌,因为它一直让我很难搞,不过有句话怎么说来着,叫做你越想要一个东西,就要装作看不起它的样子.所以,抱着这个态度,我终于掳获了闭包. 首先来认识一下什么是闭包,闭包,一共 ...
- EF实体框架之CodeFirst二
在codefirst一中也说了Mapping是实体与数据库的纽带,model通过Mapping映射到数据库,我们可以从数据库的角度来分析?首先是映射到数据库,这个是必须的.数据库里面一般包括表.列.约 ...
- MVVM开源框架Knot.js 教程1 - CBS初步
Knotjs教程系列 1.CBS初步(本文) 2.Knot.js Debugger ....持续增加中 CBS初步 学习Knot.js,实际上就是学习如何使用CBS.CBS使用和CSS类似的原理,将绑 ...
- 一次非常有意思的sql优化经历
补充:看到这么多朋友对sql优化感兴趣,我又重新补充了下文章的内容,将更多关于sql优化的知识分享出来, 喜欢这篇文章的朋友给个赞吧,哈哈,欢迎交流,共同进步. 2015-4-30补充:非常感觉编辑的 ...
- RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路
最近拿到了RockWorks15的安装包,可惜没有破解,试用也只能用14天.用PEiD工具察看了一下,Delphi编写的程序,竟然没加壳.本想用OllyDBG调试进去爆破一下,不意发现注册码很简单,如 ...
- WCF入门(22)
前言 本还想写一集WCF入门教程的,心情实在不好,明天又还有面试,改天再写吧. 说一下今天遇到的入职坑.面试能坑,上班能坑,完全没想到入职也能坑.切身经历. 今年10月份想换工作,更新了一下简历,接到 ...