程序结构与基本类型
基础 Delphi 的程序基本结构 控制台应用程序 1 2 3 4 5 6 7 8 9 10 program Project1;{$APPTYPE CONSOLE} uses SysUtils; begin end .
program
语句表示生成一个应用程序,后面跟程序名称
{$APPTYPE CONSOLE}
用于控制编译器生成控制台应用程序
uses
语句用于引用其他 pascal 程序单元
“;”
分号表示分隔各个语句
begin
和 end
包含程序的主体代码
end
后面需要带上 “.” 点号
DLL动态链接库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 library Project1;uses SysUtils, Classes; {$R *.res} begin end .
library
语句表示生成一个DLL动态链接库,后面跟程序名称
窗口应用程序 1 2 3 4 5 6 7 8 9 10 11 12 13 program Project1;uses Forms, Unit1 in 'Unit1.pas' ; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end .
在 uses
语句中添加所使用到的模块以及各个 Form 窗体
单元程序 1 2 3 4 5 6 7 unit Unit1;interface implementation end .
unit
语句表示本 pascal 源程序是一个单元,被其他单元引用
interface
用于声明本单元的接口部分
implementation
用于声明本单元的具体实现部分,直到 end
结束
end
表示单元结束
包 1 2 3 4 5 6 7 8 9 10 11 package Package1; requires rtl; contains Unit2 in 'Unit2.pas' ; end .
package
语句表示生成一个程序包,后面跟包名
requires
表示该包依赖其他包的列表
contains
用于表示本包包含其他的程序单元列表
关键字 程序区块类关键字
关键字
说明
program
标明应用程序项目的名称
library
标明库项目的名称
package
标明软件包库项目的名称
unit
表示一个单元的名称,一个源代码文件
uses
指代码所依赖的其他单元
interface
表示单元中的声明的区段开始
implementation
表示单元中的实现的区段开始
initialization
当程序启动前,要先被执行的源码区段开始(每个单元都可以有)
finalization
当程序结束前,最后要被执行的源码区段开始(每个单元都可以有)
begin
代码块的开始
end
代码块的结尾
声明类型关键字
关键字
说明
tpye
开始一个类型声明块
var
开始一个变量声明块
const
开始一个常量声明块
set
用于表示集合类型
string
用于表示字符串类型
array
用于表示数组类型
record
用于表示记录类型
integer
用于表示整数类型
real
, single
, double
用于表示浮点数类型
file
用于表示文件类型
流程控制关键字
关键字
说明
if
条件语句开始
then
将条件表达式与需要执行的代码分隔开
else
不符合条件而需要执行的代码开始
case
case多重条件匹配语句开始
of
case多重条件匹配语句中将各条件与选项分隔开
for
for/for-in循环语句开始
to
for循环中指定变量递增终止值
downto
for循环中指定变量递减终止值
in
for-in循环中指示要循环迭代的集合
while
while条件循环语句开始
do
将循环条件与代码分隔开
repeat
repeat循环语句开始
until
指出repeat循环终止的条件
with
with语句开始,简化使用指定的数据结构
function
声明函数开始
procedure
声明过程开始
inline
声明函数、过程内联优化
overload
声明函数、过程重载
类对象相关关键字
关键字
说明
class
声明一个类
object
声明一个类(旧式的类、已经废弃)
abstract
指示字,声明一个抽象类、抽象方法
sealed
指示字,声明一个封闭类
interface
声明一个接口(在第一组关键字出现过)
constructor
声明一个构造方法
destructor
声明一个析构方法
virtual
指示字,声明一个虚方法
override
指示字,指明虚方法、动态方法重写
inherited
调用父类方法
private
声明类、记录中的 private 区开始
protected
声明类的 protected 区开始
public
声明类、记录中的 public 区开始
published
声明类的 published 区开始
strict
用于声明更严格的 private、protected 区开始
property
声明一个类的属性
read
声明类的字段的 read 方法
write
声明类的字段的 write 方法
nil
表示空指针、空引用
异常处理关键字
关键字
说明
try
声明可以异常处理的语句区块开始
except
发生异常后的处理区块开始
finally
不管是否发生异常都执行的区块开始
raise
抛出异常
运算符关键字
关键字
说明
as
运算符:尝试类型转换
and
运算符:与
div
运算符:整除
is
运算符:检测对象是否兼容某类型
in
运算符:数值是否在集合中
mod
运算符:取余
not
运算符:按位取反,非
or
运算符:或
shl
运算符:左移
shr
运算符:右移
xor
运算符:异或
其他关键字
关键字
说明
asm
内联汇编区块开始
assembler
指示字,说明过程或函数是用汇编实现的(废弃,保留兼容)
automated
自动类型的成员区域开始(类似private、public、protected修饰符)
default
声明类中的属性的默认值
dynamic
指示字,声明一个动态方法(另一种相当于虚拟方法的实现方式)
export
dll中用来导出符号(已经被exports取代)
exports
dll中用来导出符号
external
指出过程、函数不在本单元中实现,位于外部单元,或者外部dll
file
声明文件类型,已经很少用到了
forward
指出过程、函数前置声明(具体实现在本单元的后面)
goto
绝对跳转到标号
index
指示字,用于声明多个属性可以通过索引使用同一个 read、write方法 (现在已经很少用了)
label
声明标号
message
指示字,用于声明消息处理方法
name
指示字,用于声明外部函数的真实名称
nodefault
表示该属性没有默认值
on
用于列表异常的各种匹配的类型与值
out
输出式参数声明,引用传递,但是允许未初始化
packed
表示记录或者数组采用紧凑方式存储
reintroduce
指示字,用于表示虚拟方法、动态方法重新定义和引入
resourcestring
声明资源字符串常量,位于exe/dll中的资源区的
threadvar
线程局部存储,必须声明为全局变量
absolute
定义变量新名称,位于前面的变量同一个地址; 如:var NewByteVar: byte absolute OldInt64Var
dispinterface
用于声明一个特定的适配器的接口
dispid
dispinterface 声明的接口中,用于指定例程、属性的特定的适配序号
requires
用于软件包,指出本包必须依赖其他包
contains
用于软件包,指出本包包含哪些单元
Delphi 基本数据类型 整数类别
类型名
字节大小
位数
符号
ShortInt
1
8位
有符号整数
SmallInt
2
16位
有符号整数
Integer
4
32位
有符号整数
LongInt
4
32位
有符号整数
Int64
8
64位
有符号整数
Byte
1
8位
无符号整数
Word
2
16位
无符号整数
Cardinal
4
32位
无符号整数
LongWord
4
32位
无符号整数
UInt64
8
64位
无符号整数
NativeInt
4/8
32/64位
有符号整数(32位平台下为32位,64位平台下为64位)
NativeUInt
4/8
32/64位
无符号整数(32位平台下为32位,64位平台下为64位)
System
这个单元当中预先定义的类别别名:
1 2 3 4 5 6 7 type Int8 = ShortInt; Int16 = SmallInt; Int32 = Integer; UInt8 = Byte; UInt16 = Word; UInt32 = Cardinal;
PtrUInt
为 NativeUInt
的变体。
内建函数 处理有序类型的系统内建的函数(编译器函数):
函数名
含义
Dec
把参数一自减1,如果有参数二,则把参数一递减参数二的数值
Inc
把参数一自增1,如果有参数二,则把参数一递增参数二的数值
Odd
判断是否奇数,如测试偶数则前面加 not
(not Odd)
Pred
返回参数的前一个数值
Succ
返回参数的后一个数值
Ord
返回指定类型的参数的序列编号,例如 Ord('A')
返回 65
Low
返回该类型的最小值
High
返回该类型的最大值
SizeOf
返回该类型或者对象的占用内存字节数
Ptr
把数值转换为指针类型
Chr
把数值转换为Char字符类型,例如 Chr(65)
返回 'A'
助手函数 助手函数是可以把整数看作是一个对象,助手函数当作方法来调用的一种方式,例如:
函数名
含义
ToString
数值转成字符串后返回
ToBoolean
数值转换成布尔类型
ToHexString
把数值转换成十六进制表示字符串
ToSingle
数值转换成单精度浮点数
ToDouble
数值转换成倍精度浮点数
ToExtended
数值转成扩展精度浮点数
Size
返回占用字节数
Parse
把字符串转换为整数,无法转换则抛出异常
TryParse
把字符串转换为整数,无法转换则返回0
布尔类型
类型名
字节大小
位数
符号
Boolean
1
8位
有符号整数
ByteBool
1
8位
有符号整数
WordBool
2
16位
有符号整数
LongBool
4
32位
有符号整数
布尔类型只有 true
和 false
两种值,其他整数类型转换为布尔型时,需要显示类型转换,如:boolean(6)
注:为了跟微软的 COM
以及 OLE automation
兼容,ByteBool
, WordBool
, LongBool
都以 -1
表示 True
, 以 0
表示 False
。
实数类型
类型名
字节大小
位数
精度
其它说明
Single
4
32位
单精度浮点数
Double
8
64位
双精度浮点数
Extended
8/10/16
64/80/128位
扩展精度浮点数
与平台相关,类似 C
的long double
Comp
8
64
定点数
以Int64
来模拟浮点数实现的定点数 不能进行递增或递减运算
Currency
8
64
定点数
用于货币计算的定点数 总是会保留小数点后四位
字符类型
类型名
字节大小
位数
其它说明
AnsiChar
1
8位
单字节字符
WideChar
2
16位
宽字符
Char
1/2
8/16位
字符(依赖Delphi版本) Delphi 2010版本后默认为 WideChar
UCS4Char
4
32位
其实是 LongWord
的变体
字符类型依旧是有序的类型,也可以使用 Dec
和 Inc
等函数。
字面量 整数字面量,例如:
可以用下划线来做为数值分隔,以便于更好阅读 (Delphi 11):
十六进制方式的面量,例如:
浮点数要加上小数点表示:
字符表示:
字符串表示:
字符串分多行表示:
带换行符的字符串多行表示:
1 2 'Hello ' + sLineBreak + 'World'
特殊字符转义:
1 'Hello ' + #$0061 + ' World'
枚举类型 枚举类型的声明如下:
1 2 3 4 type TMyColor = (Red, Blue, Blue); var value1: TMyColor;
指定数值的枚举,例如:
1 2 3 4 5 6 7 type TMyColor = (Red, Blue = 8 , Blue = 14 ); var value1: TMyColor; begin value1 := TMyColor(8 ); end ;
匿名类型的枚举,例如:
1 2 var value1: (Red, Blue, Blue);
子界类型 子界类型的声明如下:
1 2 type TMySub = 100 ..200 ;
上面子界类型表示可以是 100 ~ 200 (包括100和200)之间的任何整数。
定义子界类型的变量:
1 2 3 4 5 type TMySub = 100 ..200 ; var value1: TMySub; value1: 600 ..700 ;