我的Delphi语法笔记1.docx

上传人:b****3 文档编号:5274999 上传时间:2022-12-14 格式:DOCX 页数:40 大小:51.71KB
下载 相关 举报
我的Delphi语法笔记1.docx_第1页
第1页 / 共40页
我的Delphi语法笔记1.docx_第2页
第2页 / 共40页
我的Delphi语法笔记1.docx_第3页
第3页 / 共40页
我的Delphi语法笔记1.docx_第4页
第4页 / 共40页
我的Delphi语法笔记1.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

我的Delphi语法笔记1.docx

《我的Delphi语法笔记1.docx》由会员分享,可在线阅读,更多相关《我的Delphi语法笔记1.docx(40页珍藏版)》请在冰豆网上搜索。

我的Delphi语法笔记1.docx

我的Delphi语法笔记1

我的Delphi語法筆記1

发表:

2004-3-1319:

06:

05 出处:

你的博客网(yourblog.org)

--------------------------------------------------------------------------------

单元程序头:

uses(子句列出了那些链接到程序的单元),block(声明,命令语句)

一个程序包括:

•一个程序头(programheading)

•一个uses子句(可选),和

•一个包含声明和命令语句的块(block)

一个单元以单元头(unitheading)开始,后面跟interface、implementation、initialization

和finalization部分,后面两个部分是可选的

一个uses子句可以出现在:

•程序或库的工程文件

•单元的接口部分,和

•单元的实现部分

在单元声明以及uses子句中(尤其是在Linux下),单元名称必须和文件名大小写一致。

在其它情

况(比如使用限定符的标志符),单元名是大小写无关的。

要避免在单元引用中出现问题,要明确指出单元文件:

usesMyUnitin"myunit.pas";

如果像上面这样在工程文件中明确引用一个单元,在其它源文件中就可以像下面那样简单地引用它,

而不必考虑大小写问题:

usesMyunit;

uses子句给编译器提供各模块间的依赖信息,因为这些信息是存于模块自身的,所以,ObjectPascal

程序不需要makefile文件、头文件以及include预处理指令(这些概念你可能要参考C语言)。

每当一个

工程调入IDE时,ProjectManager创建一个makefile,但只有在包含多个工程的工程组中才保存这些文

件。

•单元源文件(.pas)

•工程文件(.dpr)

•包源文件(.dpk)

•窗体文件,扩展名为.dfm(Delphi)或.xfm(Kylix)

•资源文件,扩展名为.res(已经编译的资源文件)

•工程选项文件,扩展名为.dof(Delphi)或.kof(Kylix)

要改变程序的图标,可使用ProjectOptions对话框。

 在窗体设计器上右击弹出PopMenu有ViewasText项,可察看事件和过程的关联

事件句柄通过窗体文件(Windows下是.dfm,Linux下是.xfm)赋给指定的事件

空格(#32)和控制符(#0到#31,其中#13叫回车符或行的结束符)被称为空白符(blank)。

特殊符号是非文字和数字字符,或这类字符的组合,它们有固定的意义。

‘[’相当于‘(.’,‘]’相当于‘.)’;‘(*’和‘*)’分别相当于‘{’和‘}’(表示注释)。

,!

(惊叹号)、”(双引号)、%(百分号)、?

(问号)、\(反斜杠)、_(下划线)、|(通道)和~(破折

号)不是特殊符号

$前缀表示一个16进制数字,比如$8F

标签是一个不超过4位的阿拉伯数字序列,也就是从0到9999,打头的0没有意义

若单引号中没有内容(’’),它被称为空串(nullstring)。

在一个引用串中,两个连续的单引号(’’)表示一个字符,也就是单引号本身(’)控制串由一个或多个控制字符(控制符)所组成,每个控制符包含一个#,后跟一个无符号整数(10

进制或16进制),整数的范围从0到255,表示相应的ASCII字符。

下面的控制串

#89#111#117

就相当于引用串

’You’

运算符包括:

@not^*/divmodandshlshras+-orxor=><<><=>=in和is。

一些运算符的行为因为传给它们的数据类型不同而不同。

比如,not运算符用于整数时,是对它的

位进行求反运算,而对布尔类型进行逻辑非运算。

除了^,is和in,其它运算可应用在Variant类型上。

•不管x和y的类型是什么,x/y的结果总是扩展类型(extended);对其它运算符,只要有一个

运算数是实数类型,它的结果就是扩展类型;另外,只要有一个运算数是Int64类型,它的结果就是Int64类型;否则

,结果就是整数类型。

如果一个运算数是整数的子界类型,它就像整数类型一样被对待。

•xdivy的值取整数,也就是取得x/y的值,然后以0的方向取得最近的整数。

•mod运算返回对运算数进行整数除后得到的余数。

换句话说,就是xmody=x-(xdivy)*y。

布尔运算符not、and、or和xor作用于任何布尔类型的运算数,并返回一个布尔类型的值。

使用$B编译器指示字控制计算方式,默认状态是{$B-},它采用部分计算。

要在局部进行完全计

算,在代码中使用{$B+}指示字。

你也可以在CompilerOptions对话框中选择CompleteBoolean

Evaluation选项,此时在整个项目范围使用完全计算。

///部分计算equals短路计算inC++/C#

若任何一个运算数是variant类型,编译器总是进行完全计算(即使在{$B-}状态下)

Logical(bitwise)operators(位逻辑运算符):

notandorxorshlshr

•位反(not)运算的返回类型和运算数相同;

•若and、or或xor的运算数都是整数类型,则它的返回类型是包含运算数所有可能的值、且范围最小的预定义(内置)整数类型;•运算xshly和xshry把x的值向左或向右移y个位,也就等同于x乘或除以2^y(2的y次方),返回类型和x相同。

比如,若N存储的是01101(10进制的13),那么Nshl1返11010(10进制26)。

注意,y的值被解释为对x所属类型大小(位数)进行模运算,比如,若x是一个integer,xshl40被解释为xshl8,因为integer的大小是32位(4字节),40mod32等于8。

关系运算符=、<>、<、>、<=和>=都能对字符串进行操作 +运算符连接两个字符串

•+运算符的运算数可以是字符串、packedstring(packedarraysoftypeChar)或字符。

但是,若其中一个运算数

是宽字符(WideChar)类型,其它运算数必须是长字符串。

•+运算符的返回结果和任何字符串类型是兼容的。

但是,若运算数都是短字符串或字符,并且它们的组合长度大于255

,则返回结果取前面的255个字符。

关系运算符<、>、<=和>=能对PChar类型进行操作。

其它的指运算符:

+-指针加减^取得指针所指的内容 =<>

等于不等于

对于Pointer类型,在dereference之前必须进行类型转换。

•若I是一个整数,P是一个字符指针,那么P+I是把P的地址加上I,也就是一个指向P后面

 第I个字符处的指针(表达式I+P等同于P+I);P–I是把P的地址减去I,也就是一个指向P

 前面第I个字符处的指针。

•若P和Q都是字符指针,那么P–Q计算P的地址(高地址)和Q地址(低地址)之差,也就

 是返回一个表示P和Q之间字符数目的整数。

P+Q没有意义。

Setoperators(集合运算符):

  +并集-差集*交集<=小于等于(子集)>=大于等于(超集)=等于<>不等于in成员关系

以下规则适用于+、–和*运算符:

•当且仅当序数(集合基础类型中的一个值)O属于集合X或集合Y(或同时属于X和Y)时,

 O属于X+Y;当且仅当O属于X但不属于Y时,O属于X–Y;当且仅当O同时属于X和Y

 时,O属于X*Y。

•+、–和*的运算结果属于集合类型setofA..B,这里A是结果中的最小序数,B是结果中的

 最大序数。

 以下规则适用于<=、>=、=、<>和in运算符:

•只有当X(集合)中的每个成员也是Y(集合)中的成员时,X<=Y才为真;Z>=W等同于

 W<=Z;只有当U(集合)和V(集合)正好拥有相同的成员时,U=V才为真,否则U<>V

 为真;

•对于序数O和集合S,只有当O是S的一个成员时,OinS才为真。

•除了实数和整数能一起比较外,两个运算数必须是兼容的类型;

•对字符串进行比较,是依据它的每个字符在扩展ASCII字符集中的顺序,字符类型被当作长度

 为1的字符串;

•两个packedstring要进行比较,它们必须具有相同数目的元素;一个具有n个元素的packedstring

 与一个字符串比较时,它被看作长度为n的字符串;

•只有当两个PChar指针都指向同一个字符数组的范围内时,<、>、<=和>=运算符才能作用

 于它们;

•运算符=和<>能以类或类引用类型作为运算数。

当用于类类型时,=和<>的计算规则与

 指针一样,只有当C和D指向同一个实例对象时,C=D为真,否则C<>D为真;当用于类

 引用时,只有当C和D表示同一个类时,C=D为真,否则C<>D为真。

as和is运算符使用类和对象(实例)作为运算数,as也用于接口类型。

@运算符返回一个变量、函数、过程或方法的地址,也就是说,@运算符构建一个指向运算数的

指针。

•若X是一个变量,@X返回X的地址(当X是一个过程类型的变量时有特殊的规则,请参考语

 句和表达式中的过程类型)。

若默认的编译器指示字{$T–}在起作用,则@X的类型是

 Pointer(通用指针);在{$T+}状态下时,@X的类型是^T,这里T是X的类型;

•若F是一个例程(一个函数或过程),@F返回F的入口点,@F的类型总是Pointer;

•当@作用于类的方法时,必须使用类名来限定方法名。

比如

   @TMyClass.DoSomething

 它指向TMyClass的DoSomething方法。

Setconstructors(集合构造器)

 [5,6,7,8] 

 [5..8]

 [red,green,MyColor]

 [1,5,10..Kmod12,23]

 [’A’..’Z’,’a’..’z’,Chr(Digit+48)]

 集合构造器[]表示空集

字符串、数组、数组属性以及指向字符串或数组的指针能被索引。

比如:

FileName[21]

强制类型转换的语法是

typeIdentifier(expression)

若表达式是一个变量,结果被称为variabletypecast(变量转换);否则,结果是一个valuetypecast(值转换)。

然它们的语法相同,但它们有不同的转换规则。

在值转换中,类型标志符和转换的表达式必须都是有序类型或指针类型。

值转换的例子包括

Integer(’A’)

Char(48)

Boolean(0)

Color

(2)

Longint(@Buffer)

声明的语法以及声明的位置取决于要定义的标志符的种类。

通常,声明只能出现在块(block)的开始处,

以及单元的接口或实现部分的开始处(在uses子句之后)。

Hint指示字platform、deprecated和library能附加在任何声明之后。

在声明过程或函数的情况下,应

使用分号把hint指示字和声明的其它部分分开。

比如:

procedureSomeOldRoutine;stdcall;deprecated;

varVersionNumber:

Reallibrary;

typeAppError=class(Exception)

...

endplatform;

当源代码在{$HINTSON}{$WARNINGSON}状态下编译时,对使用上述指示字声明的标志符的每个引

用都将产生一个适当的提示或警告。

使用platform标记一个条目和特定的操作系统(比如Windows和

Linux)相关;使用deprecated表示条目已经废弃或支持它仅为了向后兼容性;使用library表示依赖于

特定的库或组件框架(比如VCL或CLX)。

赋值语句的格式如下

variable:

=expression

这里,variable是任何变量引用,包括变量、变量类型转换、解除引用的指针,或者一个结构变量的组

成部分;expression是任何一个赋值兼容的表达式。

(在函数块中,variable能被函数名取代,参考Procedures

andfunctions。

当启用扩展语法时({$X+}),调用函数也可以像调用过程那样 当这样调用函数时,它的返回值被忽略。

gotolabel

label:

statement

labellabel;

labellabel1,...,labeln;

•复合语句或with语句只是简单地执行一系列语句;

•条件语句,也就是if或case语句,根据指定的标准,最多执行一个分支;

•循环语句,包括repeat、while和for循环,重复执行一系列语句;

•一组特殊的语句,包括raise、try...except和try...finally结构,用来创建和处理异常。

with语句的语法是

 withobjdostatement

 withobj1,...,objndostatement

if语句有两种形式:

if...then和if...then...else

比如,

 ifJ=0then

 Exit

 else

 Result:

=I/J;

ifJ<>0then

 begin

 Result:

=I/J;

 Count:

=Count+1;

 end

elseifCount=Lastthen

 Done:

=True

else

 Exit;

CaseStatements(Case语句):

caseselectorExpressionof

 caseList1:

statement1;

 ...

 caseListn:

statementn;

 else

  statements;

end

caseIof

 1..5:

 Caption:

=’Low’;

 6..9:

 Caption:

=’High’;

 0,10..99:

 Caption:

=’Outofrange’;

 else

  Caption:

=’’;

end;

selectorExpression是任何一个有序类型的表达式(字符串无效),和C++一样的。

ObjectPascal有三种循环:

repeat语句、while语句和for语句。

使用Break和Continue过程来控制repeat、while或for语句的流程。

repeat语句的语法是

  repeatstatement1;...;statementn;untilexpression

比如:

repeat

 Write(’Enteravalue(0..9):

’);

 Readln(I);

until(I>=0)and(I<=9);

while语句的语法是

 whileexpressiondostatement

比如:

whileI>0do

begin

 ifOdd(I)thenZ:

=Z*X;

 I:

=Idiv2;

 X:

=Sqr(X);

end;

for语句的语法是

 forcounter:

=initialvaluetofinalvaluedostatement

 forcounter:

=initialvaluedowntofinalvaluedostatement

比如:

forC:

=RedtoBluedoCheck(C);

一个块包含一系列的声明,后面跟一个符合语句。

所有的声明必须一起出现在块的开始处,所以,块的

形式是

declarations;

begin

  statements;

end;

比如:

functionUpperCase(constS:

string):

string;

var

  Ch:

Char;

  L:

Integer;

  Source,Dest:

PChar;

begin

  ...

end;

类型可以分为基本(fundamental)和一般(generic)类型。

基本类型的范围和形式是相同的,不管是基于何种CPU和

操作系统;而一般类型的范围和形式是平台相关的

大多数内置类型属于基本类型,但少数整数、字符、字符串和指针类型属于一般类型。

在需要的时候使用一般数据类型是一个好注意,因为它们提供优化的性能和轻便性。

类型也可以分为简单类型、字符串类型、结构类型、指针类型、过程类型和变体类型。

下面的提纲显示了ObjectPascal数据类型的分类:

simple简单类型

 ordinal有序类型

 integer一般(generic)整数类型是Integer和Cardinal

  基本整数类型包括Shortint、Smallint、Longint、

  Int64、Byte、Word和Longword

 character基本字符类型是AnsiChar和WideChar。

   一般字符类型是Char,它相当于AnsiChar。

 Boolean布尔类型为Boolean、ByteBool、WordBool和LongBool,Boolean是首选的

 enumerated

 subrange

 real实数类型 Real48SingleDoubleExtendedCompCurrency

string 字符串类型ShortStringAnsiStringWideString

structured

 set

 array

 record

 file

 class

 classreference

 interface

pointer

procedural

Variant

(typeidentifier)

标准函数SizeOf作用于所有变量和类型标志符,它返回一个整数,表明存储指定类型的数据所需要的内存数(字节)。

有序类型包括整数、字符、布尔、枚举和子界类型。

有序类型定义一个有次序的数值集合,除了它的第一个值以外,其它每个值都有一个唯一的前驱值(predecessor);除了最后一个外,其它每个值都有一个唯一的后继值(successor)

Ord 有序类型表达式    序数值

Pred有序类型表达式    表达式的前驱值

Succ有序类型表达式    表达式的后继值

High有序类型的变量或标志符类型的最大值

Low 有序类型的变量或标志符类型的最小值

例程High、Low、Succ、Pred、Inc、Dec、IntToStr和IntToHex完全支持Int64参数。

而且,Round、Trunc、StrToInt64和StrToInt64Def返回Int64类型的值;

少数例程(包括Ord)根本不能对Int64数值进行操作。

当把整数类型的最后一个值增大或把第一个值减少时,结果将回到整数类型的开头或尾部

内置函数Chr,返回一个在AnsiChar或WideChar取值范围内任意一个整数的字符值。

比如,Chr(65)返回字母A。

Inc()是什么呢?

对ByteBool、WordBool和LongBool来说,若它的序数不为0,它就被认为是True。

在一个需要Boolean类型的环境种,

编译器自动把非0值转换为True。

在ObjectPascal中,布尔表达式不能和整数或实数进行换算。

所以,若X是一个整数变量,语句

ifXthen...;

会产生编译错误

定义一个枚举类型,使用下面的语法:

 typetypeName=(val1,...,valn)

 typeSize=(Small=5,Medium=10,Large=Small+Medium);

比如:

typeSuit=(Club,Diamond,Heart,Spade);

在声明变量时,可以直接使用(val1,…,valn)结构,它就像一个类型名称:

 varMyCard:

(Club,Diamond,Heart,Spade);

子界类型表示其它有序类型(称为基础类型)的一个子集:

它的形式为Low..High

•Extended类型比其它实数类型有更高的精度,但不够轻巧。

当使用Extended类型创建的文件要跨平

 台共享时,务必小心

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1