1. 数据类型
特定类型 日期和时间
Delphi 也用实型数表示日期和时间数据。但为了更准确起见,Delphi 特别定义了TDateTime 数据类型,这是一个浮点类型,因为这个类型必须足够宽,使变量能容纳年、月、日、时、分和秒、甚至毫秒。日期值按天计数,从1899-12-30开始,放在TDateTime 类型的整数部分;时间值则位于十进制数的小数部分。
TDateTime 不是编译器可直接识别的预定义类型,它在System单元定义:
type
TDateTime = type Double;
使用TDateTime 类型很简单,因为Delphi 为该类型定义了一系列操作函数,表3.3列出了这些函数。
表: TDateTime类型系统例程
例程 |
作用 |
Now |
返回当前日期及时间 |
Date |
返回当前日期 |
Time |
返回当前时间 |
DateTimeToStr |
按缺省格式将日期和时间值转换为字符串;特定格式转换可用 FormatDateTime函数 |
DateTimeToString |
按缺省格式将日期和时间值拷贝到字符串缓冲区 |
DateToStr |
将TDateTime值的日期部分转为字符串 |
TimeToStr |
将TDateTime值的时间部分转为字符串 |
FormatDateTime |
按特定格式将日期和时间值转换为字符串 |
StrToDateTime |
将带有日期和时间信息的字符串转换为TdateTime类型值,如串有误将引发一个异常 |
StrToDate |
将带有日期信息的字符串转换为TDateTime类型格式 |
StrToTime |
将带有时间信息的字符串转换为TDateTime类型格式 |
DayOfWeek |
根据传递的日期参数计算该日期是一星期中的第几天 |
DecodeDate |
根据日期值返回年、月、日值 |
DecodeTime |
根据时间值返回时、分、秒、毫秒值 |
EncodeDate |
组合年、月、日值为TDateTime类型值 |
EncodeTime |
组合时、分、秒、毫秒值为TDateTime类型值 |
Windows类型 通常在window.pas 或sysytem.pas中定义。可以使用ctrl+鼠标左键查看。
附表2:有序类型系统例程
例程 |
作用 |
Dec |
将例程中的参数值递减1或一个特定的值,其中特定值可在第二个可选参数中定义 |
Inc |
将例程中的参数值增加1或一个特定的值 |
Odd |
如果参数为奇数返回真 |
Pred |
根据参数在其数据类型定义中的序列,返回参数值的前驱值 |
Succ |
返回参数值的后继值 |
Ord |
返回参数值在其数据类型值集合中的序号 |
Low |
返回参数对应的有序数据类型的最小取值 |
High |
返回参数对应的有序数据类型的最大取值 |
附表3:类型转换系统例程
例程 |
作用 |
Chr |
将一个有序数据转换为一个ANSI字符 |
Ord |
将一个有序类型值转换为它的序号 |
Round |
转换一个实型值为四舍五入后的整型值 |
Trunc |
转换一个实型值为小数截断后的整型值 |
Int |
返回浮点数的整数部分 |
IntToStr |
将数值转换为字符串 |
IntToHex |
将数值转换为十六进制数字符串 |
StrToInt |
将字符串转换为一个整型数,如字符串不是一个合法的整型将引发异常 |
StrToIntDef |
将字符串转换为一个整数,如字符串不合法返回一个缺省值 |
Val |
将字符串转换为一个数字(传统Turbo Pascal例程用于向后兼容) |
Str |
将数字转换为格式化字符串(传统Turbo Pascal例程用于向后兼容) |
StrPas |
将零终止字符串转换为Pascal类型字符串,在32位Delphi中这种类型转换是自动进行的 |
StrPCopy |
拷贝一个Pascal类型字符串到一个零终止字符串, 在32位Delphi中转换是自动进行的 |
StrPLCopy |
拷贝Pascal类型字符串的一部分到一个零终止字符串 |
FloatToDecimal |
将一个浮点数转换为包含指数、数字及符号的十进制浮点记录类型 |
FloatToStr |
将浮点值转换为缺省格式的字符串 |
FloatToStrF |
将浮点值转换为特定格式的字符串 |
FloatToText |
使用特定格式,将一个浮点值拷贝到一个字符串缓冲区 |
FloatToTextFmt |
同上面例程,使用特定格式,将一个浮点值拷贝到一个字符串缓冲区 |
StrToFloat |
将一个Pascal字符串转换为浮点数 |
TextToFloat |
将一个零终止字符串转换为浮点数 |
2. 常量和变量
1) 常量
Const 常量名=常量值
True和false是boolen型的标准常量,maxint是integer型的标准常量,表示最大值。三者属于系统定义的常量,可直接使用,不必定义。
注:资源字符串的定义方式还可以这样:
resourcestring
strName = '文件';
2) var 变量名:类型名[=初始值];
3.语句和流程控制
1).基本语句
包括赋值语句: 用“:=”;
空语句:不执行任何操作;
过程语句:如读语句read用于从标准输入设备(键盘)中输入数据;写语句write用于向标准输出设备(显示器)输出数据。Writeln()输出一个回车换行符。
2).流程控制语句
<条件语句:>
If语句
(1) if...then...;
(2) if 条件
then 语句1
else 语句2;
(3) if 条件1
then 语句1
else if
then 语句2
else
语句3;
注意then 和else字句之间不能有分号,只需在最后语句加上分号和其它语句分开就好。
Case 语句
Case 表达式 of
常量1:语句1;
常量2:语句2;
…
常量n:语句n;
End;
<循环语句:>
For 语句
递增型for语句
For 控制变量:=初值 to 终值 do
语句;
递减型for语句
For 控制变量:=初值 downto 终值 do
语句;
While语句(先判断后执行)
While 布尔表达式 do
语句;
Repeat 语句(先执行后判断,保证循环体最少执行一次)
Repeat
(循环体)语句;
Until 布尔表达式;
<转移语句>
Break 跳出循环;continue结束本次循环,回到循环条件,判断是否执行下一次循环。Break 和 从continue 语句常和循环语句搭配使用。
Exit 退出函数或代码块(复合语句),halt 终值程序运行(非正常),返回操作系统。
Goto 标号;
使用前需要用关键字 label 定义 标号如:label 标号1,标号2;
3)With语句
With语句是一种用于简化代码的语句。如你要访问一个记录类型变量(或一个对象),用With语句就不必每次重复变量的名字。例如对于以下的记录类型代码:
type
Date = record
Year: Integer;
Month: Byte;
Day: Byte;
end;
var
BirthDay: Date;
begin
with BirthDay do
begin
Year := 1995;
Month := 2;
Day := 14;
end;
end;
在Delphi程序中,这种方法能用于访问控件和类变量。
4、过程和函数
无论过程和函数,都遵循“先说明后使用”的原则。
1)过程
Procedure 过程名([var] 参数:类型);//过程首部
过程变量声明; //过程说明
begin
语句 //语句体
end;
2)函数(Result:函数返回)
Funciton 函数名([var] 参数:类型); //函数首部
函数变量声明;
begin
语句 //语句体
end;
3)参数传递:
数值参数,简称值参:不带 var 的,称为数值参数。是缺省的参数传递方式:即将值参的拷贝压入栈中,例程使用、操纵的是栈中的拷贝值,不是原始值。
变量参数(传递参数),简称变参:带 var 的,实际传递的是一个实在参数变量的地址。当通过引用传递参数时,没有按正常方式把参数值的拷贝压栈(避免拷贝值压栈一般能加快程序执行速度),而是直接引用参数原始值,例程中的代码也同样访问原始值,这样就能在过程或函数中改变参数的值。引用参数用关键字var 标示。
常量参数:带 const的,常为常量参数。
4)函数重载
重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同。实际上,编译器是通过检测参数来确定需要调用的例程。
下面是从VCL的数学单元(Math Unit)中摘录的一系列函数:
function Min (A,B: Integer): Integer; overload;
function Min (A,B: Int64): Int64; overload;
function Min (A,B: Single): Single; overload;
function Min (A,B: Double): Double; overload;
function Min (A,B: Extended): Extended; overload;
当调用方式为Min (10, 20)时,编译器很容易就能判定你调用的是上列第一个函数,因此返回值也是个整数。
声明重载函数有两条原则: