delphi的简单代码

2024-05-10

1. delphi的简单代码

以下提示供参考:
1、在 delphi 语法中,参数的定义格式如: 变量名:变量类型;可以添加 const 或是 var 指示。
因此,上面的代码中,函数的定义修改示例如:
  function Test(const cPData: PChar; const cSize: DWORD): PChar;2、在 Test 函数中,主要是调用 MoveMemory 函数,该函数定义于  Winapi.Windows 单元文件,其函数原型定义如下:
procedure MoveMemory(Destination: Pointer; Source: Pointer; Length: NativeUInt);begin  Move(Source^, Destination^, Length);end;此函数与 CopyMemory 函数完全一致:
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: NativeUInt);begin  Move(Source^, Destination^, Length);end;

delphi的简单代码

2. delphi的编程方法

Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。本章中,将讨论ObjectPascal的主要特点,并讲解如何在事件处理过程和其他应用程序中,使用它来编制程序代码。本章将讲解Delphi应用程序中最常用的ObjectPascal语法,而不是Pascal语言的一切细节。如果您完全不熟悉Pascal编程,请参阅一些基础的Pascal教程。如果您具有编程经验,并能熟练地使用其他流行程序语言,您将在本章的ObjectPascal中发现一些相同的概念。如果您已经熟悉了BorlandPascal,就可以快速浏览或跳过本章。编写ObjectPascal程序代码在前边的章节中,通过例程,已经编写了几行简单的代码。在本章中,将从熟悉Pascal编程的角度,配合实例,讲解ObjectPascal编程的基该方法。在编写自己的ObjectPascal程序时,要注意程序的可读性。Pascal语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。一般的程序员都有这样的体验:如果不给程序加上适当的注解,一段时间后,自己也难以理清程序的流程。给程序及时地加上注释是良好的编程习惯。Delphi的注释需要加注在{}之间,编辑器会把它们处理成为空白。Delphi保留了BorlandPascal编辑器的风格,关键字采用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。 在事件处理过程中,最常用到的工作就是把一个新值赋给一个属性或变量。在设计用户界面时,可以使用ObjectInspector(ObjectInspector)来改变其属性;但有时需要在程序执行时改变属性的值,而且有些属性只能在执行时改变,这些属性在Delphi的在线帮助的“Proprety”主题中被标为执行期属性。进行这种改变,就必须使用赋值语句。下文的赋值语句表征一个OnClick事件。当按钮按动后,将编辑框部件Edit1的Color属性置为clRed:procedureTForm1.Button1Click(Sender:TObject);beginEdit1.Color:=clRed;end;当按动按钮后赋值语句被执行,编辑框变成红色。在语句中,部件的名称在属性前,中间用“.”表示属性的所属关系。这样就准确地指定了要将clRed值赋给哪一部件的哪一属性。赋值号为“:=”,不论给属性还是给变量赋值,都是将右边的值赋给左边的属性或变量。当将一个属性值、变量、常量或文本数据赋给属性或变量时,所赋值的类型和接受此值的属性或变量的类型应相同或兼容。一个属性或变量的类型定义了此属性或变量的可能值集合,也定义了程序代码可以执行的运算。在前边的例程中,编辑框部件的Color属性和clRed的类型都是TColor。可以在在线帮助中找到一个属性的类型;另外一种方法是在ObjectInspector中选定该属性值段,并按下F1键,则类型将在属性说明的结尾处列出,例如Color属性列出下边的语句:PropertyColor:TColor;有些属性是只读(ReadOnly)的,它们只能被读取,不能被改变。请查阅在线帮助,在Delphi中这些只读属性都有注解。标识符的说明与使用标识符是Delphi应用程序中一些量的名称,这些量包括变量(var)、常量(const)、类型(type)、过程(procedure)、方法(Method)及其他,ObjectPascal在应用标识符时,必须首先说明它们。ObjectPascal是强类型语言,它的编译器可以检查确保赋给变量或属性的值是正确的类型,以便于您改正错误。因为ObjectPascal是编译语言,所以Delphi的执行速度要比使用解释语言快得多。在使用标识符前说明它们,可以减少程序错误并增加代码的效率。变量变量是程序代码中代表一个内存地址的标识符,而此地址的内存内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,即对它进行命名,并说明它的类型。在所有变量说明以前加上保留字var。变量说明左边是变量的名称,右边则是该变量的类型,中间用(:)隔开。varValue,Sum:Integer;Line:String;在窗体中加入一个名称为Edit1的编辑框,再加入一个名称(属性Name)为Add的按钮部件,并建立如下的事件处理过程:procedureTForm1.addClick(Sender:TObject);varX,Y:Integer;beginX:=100;Y:=20;Edit1.Text:=IntToStr(X+Y);end;在本例中,当按动ADD按钮时,编辑框中显示值120。在ObjectPascal中,必须确保变量或属性被赋予类型相同或兼容的值。您可以尝试将赋给X的值改为100.0,或去掉IntToStr函数,在编译时会出现类型不匹配的错误,这也说明了ObjectPascal强类型语言的特点。 case语句适用于被判断的变量或属性是整形、字符型、枚举型或子界型时(LongInt除外)。用case语句进行逻辑跳转比编写复杂的if语句容易阅读,而且程序代码整形较快。下面的例程显示一个使用case语句的窗体:建立如下的事件处理过程:procedureTForm1.Button1Click(Sender:TObject);varNumber:Integer;beginNumber:=StrToInt(Edit1.Text);caseNumberof1,3,5,7,9:Label2.Caption:='奇数';0,2,4,6,8:Label2.Caption:='偶数';10..100:beginLabel2.Caption:='在10到100之间';Form1.Color:=clBlue;end;elseLabel2.Caption:='大于100或为负数';end;end;执行程序,当Edit1部件接受到一个值,并按动“OK”按钮触发程序后,Number便被赋值为用户输入的数值。case语句根据Number的值判断该执行哪一条语句。象if语句一样。case语句也有可选择的else部分。case语句以end结尾。 ObjectPascal的循环语句有三种:repeat、while和for语句。repeat语句repeat语句会重复执行一行或一段语句直到某一状态为真。语句以repeat开始,以until结束,其后跟随被判断的布尔表达式。参阅以下的例程:i:=0;repeati:=i+1;Writeln(i);until=10;当此语句被执行时,窗体的下方会出现1到10的数字。布尔表达式i=10(注意,与其他语言不同的是,“=”是关系运算符,而不能进行赋值操作)直到repeat..until程序段的结尾才会被计算,这意味着repeat语句至少会被执行一次。 while语句和repeat语句的不同之处是,它的布尔表达式在循环的开头进行判断。while保留字后面必须跟一个布尔表达式。如果该表达式的结果为真,循环被执行,否则会退出循环,执行while语句后面的程序。下面的例程达到和上面的repeat例程达到同样的效果:i:=0;whilei0thentest2(A);{经前置说明,调用未执行的过程Test2}writeln(A);end;procedureTest2(varA:Integer);{经前置说明的Test2的执行部分}beginA:=Adiv2;ifA>0rhentest1(A);{在Test2中调用已执行的过程Test1}end;procedureTForm1.Button1Click(Sender:TObject);beginAlpha:=15;{给Alpha赋初值}Test1(Alpha);{第一次调用Test1,递归开始}end;按钮的OnClick事件处理过程给Alpha赋初值,并实现先减1再除2的循环递归调用,直到Alpha小于0为止。

3. delphi的函数

 与过程一样,函数的程序代码也执行特定的工作。它和过程的差别为:函数执行时会返回一个值,而过程则没有返回值。函数可以用来赋给一个属性或变量;也可以使用返回值来决定程序的流程。前文中实际上已经接触过了函数。在讲述变量时,曾用到过下面的程序段:Edit1.Text:=IntToStr(X+Y);其中,IntToStr(Value)把一个LongInt类型的数值转化为字符串的值,Value是IntToStr唯一的参数,它可以是一个整形的值、变量、属性或产生整形值的表达式。调用函数,必须把返回值赋给和此返回值类型兼容的变量或属性。有些函数返回一个True或False的布尔量,用户的程序可以根据返回值来决定跳转。下文的例程讲述了函数返回值为Boolean的判断用法:在窗体中加入一个ColorDialog对象和一个Name属性为ChangeColor的按钮。为按钮的OnClick事件建立事件处理过程如下:procedureTForm1.ChangeColorClick(Sender:TObject);beginif ColorDialog1.Execute thenForm1.Color:=ColorDialog1.ColorelseForm1.Color:=clRed;end;此事件处理过程使用一个返回Boolean值的Execute方法。按动按钮,并在颜色对话框中选择一个颜色。如果按动OK按钮,ColorDialog.Execute方法将返回True,则Form1.Color将被赋值为ColorDialog1.Color,窗体显现您选用的颜色;如果按动颜色对话框的Cancel按钮,方法将返回False值,窗体将变为红色。跳转语句ObjectPascal的跳转语句有if和case两个。if语句if语句会计算一个表达式,并根据计算结果决定程序流程。在上文的例程中,根据ColorDialog.Execute的返回值,决定窗体的背景颜色。if保留字后跟随一个生成Boolean值True或False的表达式。一般用“=”作为关系运算符,比较产生一个布尔型值。当表达式为True时,执行then后的语句。否则执行else后的代码,if语句也可以不含else部分,表达式为False时自动跳到下一行程序。if语句可以嵌套,当使用复合语句表达时,复合语句前后需加上begin…end。else保留字前不能加“;”,而且,编译器会将else语句视为属于最靠近的if语句。必要时,须使用begin…end保留字来强迫else部分属于某一级的if语句。 程序代码在调用一个过程或函数时,通常用参数传递数据到被调用的过程或函数中。最常用的参数有数值参数、变量参数和常量参数三种。由被调用过程或函数定义的参数为形参,而由调用过程或函数指明的参数叫实参。在NoValue函数中,说明函数体中的AnEditBox是形参,而调用时在ifNoValue(Edit1)…中,Edit1是实参。数值参数在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到过程的外面。试看下面的例程:procedureCalculate(CalNo:Integer);beginCalNo:=CalNo*10;end;用以下例程调用Calculate函数:Number:=StrToInt(Edit1.Text);Calculate(Number);Edit2.Text:=IntToStr(Number);Number接受由编辑框1输入的数值,经Calculate过程运算。它是一个数值型实参。在进入Calculate函数后,会把Number实参拷贝给形参CalNo,在过程中CalNo增大十倍,但并未传递出来,因此Number值并未改变,在编辑框2中显示仍然是编辑框1中的输入值。形参和实参占用不同的内存地址,在过程或函数被调用时,将实参的值复制到形参占用的内存中。因此出了过程或函数后,形参和实参的数值是不同的,但实参的值并不发生变化。如果您想改变传入的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字var。例如:procedureCalculate(varCalNo:Integer);则CalNo并不在内存中占据一个位置,而是指向实参Number。当一个变参被传递时,任何对形参所作的改变会反映到实参中。这是因为两个参数指向同一个地址。将上一个例程中过程头的形参CalNo前面加上var,再以同样的程序调用它,则在第二个编辑框中会显示计算的结果,把第一个编辑框中的数值放大十倍。这时形参CalNo和实参Number的值都是Nnmber初始值的10倍。如果当过程或函数执行是要求不改变形参的值,最保险的办法是使用常量参数。在参数表的参数名称前加上保留字const可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护您的参数,使您在不想改变参数值时不会意外地将新的值赋给这个参数。

delphi的函数

4. Delphi函数参考大全的介绍

《Delphi函数参考大全》详细地介绍了Delphi函数及其应用,是一本全面系统的Delphi函数参考大全。全书共分28章,包括字符串处理函数、数学计算函数、序数函数、三角函数、统计函数、金融函数、随机数函数、单位换算函数、日期函数、类型转换函数、异常处理函数、文件处理函数、图形计算与处理函数、格式转换函数、对话框函数、打印机函数、Com实用函数、窗口控制实用程序函数、菜单函数、向后兼容例程、行为支持函数与过程、Windows剪切板函数、流程控制、指针相关函数、线程管理函数、包支持函数、组件注册函数、内存管理函数等。

5. Delphi语法支持这样写么

Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言。Object Pascal语言是Pascal之父在1985年于Apple Macintosh机器上实现的。后来Borland公司也在它的Pascal产品Turbol Pascal/Delphi中实现了Object Pascal。

注:该系列内容整理自以下链接。
http://chanlei001.blog.163.com/blog/static/3403066420117261154351
http://www.cnblogs.com/del/archive/2007/12/04/982167.html
http://blog.csdn.net/hudie1234567/article/details/6403419
http://www.cnblogs.com/del/archive/2007/12/10/989467.html
http://www.cnblogs.com/del/archive/2007/12/04/982851.html 
http://gehy1.blog.163.com/blog/static/3447887820091194619693/


语言基础
Object Pascal 是一种高级编译语言,建立于free pascal 和turbo pascal 之上,具有强类型(对数据类型的检查非常严格)特性,支持结构化和面向对象编程。它的优点包括代码的易读性、快速编译,以及支持多个单元文件从而实现模块化编程。Object Pascal 语言是在Pascal 语言的基础上发展起来的,它继承了Pascal 语言语法严谨、数据结构丰富等优点,同时融入了面向对象编程的语法要素,使之成为一个完善的面向对象的编程语言。Pascal编译器,包括那些Object Pascal的编译器,在生成高优化代码同时,一般运行非常快。

1 Object Pascal 语言编写环境
随着Windows 操作系统的普及,很少有人在DOS 环境下编写程序了,下面将为读者介绍如何使用Delphi 编写Object Pascal 程序。
一般来说,使用Delphi 开发出来的程序有以下3 种。
1.图形界面程序
图形界面程序是目前Windows 平台最常见的应用程序,这些程序通过窗体和对话框与用户进行信息交互,实现一定的功能。例如Microsoft 公司的Office 系列软件和正在使用的Delphi 等,它们都是图形界面程序。
2.控制台程序
控制台程序是指一些没有图形用户界面的32 位Windows 应用程序,类似在DOS 环境下运行的程序。这些程序很少要求用户输入大量的信息,一般只实现特定的功能。控制台程序的代码较小,占用的系统资源少,因此编译、链接的速度比较快。
3.服务器程序
服务器程序可以接受和处理客户应用程序的请求,并将结果信息返回给客户应用程序。服务器应用程序一般在后台运行,不需要大量的人机交互信息。
下面以开发一个简单的控制台程序为例,向读者介绍Delphi 中生成Object Pascal 程序的基本方法,并对Object Pascal 程序的一般结构进行简单说明。
在Delphi 集成开发环境中,依次选择"File/New/Other"菜单项打开"New Items"对话框。选中"New"标签页中的"Console Application"选项,单击"OK"按钮,代码编辑器中将自动打开一个初始名为Project1.dpr 的控制台程序。请将Project1.dpr 文件修改为如下内容:

program Project1;{$APPTYPE CONSOLE}//uses SysUtils;var    str:string;begin    // Insert user code here    writeln(’您好,这是一个示范程序,请输入一行文字:’);    readln(str);    writeln(’您输入的是:’,str);    readln;end.

依次选择“File”/“Save All”菜单项可以将更改后的工程文件保存到指定的文件夹中。按 F9 键进入编译、链接、运行程序。待程序提示“您好,这是一个示范程序,请输入一行文字:”文字后,用户可以输入一些内容,例如输入“早上好!”,程序将输出结果:“您输入的是:早上好!”。
以下是对该程序的几点说明:
程序第2 行中{$APPTYPE CONSOLE}是一个编译器指令,它告诉编译器这个程序是一个控制台程序。
uses SysUtils 语句前加了两个斜线,将这条语句以注释语句的形式屏蔽掉了,因为在这个例子中是不需要SysUtils 单元的。
writeln 和readln 两个函数分别表示输出和输入一行字符。程序最后的readln 语句是为了锁定窗口,否则输出结果将很快消失。

2 注释语句
作为起点,首先介绍如何在Object Pascal 代码中添加注释。如果不给程序加上适当的注释,一段时间后就很难理清程序的流程。同时编译器会将注解忽略,不会影响程序的编译与运行。
Object Pascal 中有3 种类型的注释。
花括号注释:组合符号“{”和“}”的成对使用,表示它们之间的内容是注释部分。
圆括号/星号注释:组合符号“(*”和“*)”的成对使用,表示它们之间的内容是注释部分。
Visual C++风格的双斜杠注释:符号“//”的单独使用,表示后面的内容是注释部分。
看下面的例子:
{花括号注释} (*圆括号/星号注释*) //C++风格的注释
前两种注释在本质上是相同的,编译器把处于限定符头和限定符尾中间的内容当作注释。花括号和圆括号/星号比较适合在大段注释时使用。如果在“{”或“(*”后面是一个“$”符号时,表示该句为一个编译器指令,与普通的注释不同,通常用来对编译过程进行设置,例如1.1 节中示例的第2行代码:
{$APPTYPE CONSOLE}
对于Visual C++风格的注释来说,双斜杠后面到行尾的内容被认为注释。此形式比较适用于单行和少量几行注释的情况。
注意,相同类型的注释不要嵌套使用。虽然不同类型的注释进行嵌套在语法上是合法的,但不建议这样做。例如:
{(*这是合法的*)}(*{这是合法的}*)(*(*这是非法的*)*){{这是非法的}}

3 标识符
Object Pascal 语言使用的标识符包括字母A-Z、a-z、数字0-9 及其他一些标准字符。
表1-1 所示的单个字符是Object Pascal 语言的特殊符号。
表1-1 Object Pascal 语言的特殊符号的单个字符

特殊符号
   

$ & * # * (  )  [  ] {  }  ^  ;  :  @    ,  .  * +  / 
   

表1-2 所示的字符组合是Object Pascal 语言的单个的特殊符号。
表1-2  Object Pascal 语言的特殊符号的字符组合 

特殊符号
   

(*  *)  (.  .)  ..  //  :=    >=  <=    
   
注意:[ ]与(. .)对应,{ }与(* *)对应。含义完全相同,可以相互替代。
在Object Pascal 语言中,标识符用来标识变量、常量、属性、类、对象、过程、函数、程序、组件库等。标识符可以由任意长度不带空格的字符串组成,但对于编译器来讲只有前面255个字符有效。其中,标识符的第1个字符必须是字母或下划线,其余字符可以是字母、数字或下划线。通常,标识符由一个或多个具有适当意义的英文单词组成。Object Pascal 语言对区分字母的大小写是不敏感的。在编程过程中,最好每个单词的首字母大写,其他字母小写,以便于区分。

4 保留字和指令字
Object Pascal 语言定义了65 个保留字,它们不能被定义为标识符,如表1-3 所示。
表1-3  Object Pascal 语言的保留字 

保留字
   

and
   array
   as
   asm
   begin
   case
   

class
   Const
   constructor
   destructor
   dispinterface
   div
   

do
   downto
   else
   end
   except
   exports
   

file
   finalization
   finally
   for
   function
   goto
   

if
   implementation
   in
   inherite
   initialization
   inline
   

is
   interface
   label
   library
   mod
   Nil
   

not
   object
   of
   or
   out
   packed
   

procedure
   program
   property
   raise
   record
   repeat
   

resourcestring
   set
   shl
   shr
   string
   then
   

threadvar
   to
   try
   type
   until
   unit
   

uses
   var
   while
   with
   xor
   

Object Pascal 还定义了39 个指令字,它们具有特殊含义。但是,在用户重新定义了指令字后,在作用域内它们就失去了原来的意义,如表1-4 所示。
表1-4  Object Pascal 语言的指令字 

指令字
   

absolute
   abstract
   assembler
   automated
   cdecl
   contains
   

default
   dispid
   dynamic
   export
   external
   far
   

forward
   implements
   index
   message
   name
   near
   

nodefault
   overload
   override
   package
   pascal
   private
   

protected
   public
   published
   read
   readonly
   register
   

reintroduce
   requires
   resident
   safecall
   stdcall
   stored
   

virtual
   write
   writeonly
   

不要定义和它们同名的标识符。在Delphi 集成开发环境的代码编辑器中,保留字和指令字以黑体显示,这样就大大方便了用户的使用,不必担心因为不小心而错误地将保留字或指令字定义为标识符。

published 和 public
公布成员(published)和公共成员(public)具有相同的可见度,但published中声明的会显示在属性栏,public 则不会。
主要区别如下:
(1)   published 可见度与public一样。
(2)   published与public的区别是本区域的成员可以在delphi对象检查器中出现,而此差别来自RTTI机制。RTTI(Run time type Information)是为Published制作,它允许应用程序动态查询该类的published的字段、属性(包括属性和事件),并且加载类的方法。RTTI启动条件是有条件的——使“{$M+}”编译指令的状态下才能启动RTTI或它的祖先类以上述状态编译,也可以启动RTTI,然后该类检查器才能显示在检查器中。
(3)   除了RTTI条件限制后,published的属性也有类型限制。
A.序数、字符串(string)、class、interface以及mothod—pointer类,都可以做published的属性
B.范围在0-31之间的集合,该集合值必须满足byte、word或double word类才能做published属性
C.除了Real类外的所有实数类,都可以做为published属性
D.数组类不可以做published属性
E.所有的成员函数都可以作为published的事件,然而重载override的函数不可以作为published事件
F.字段Fieled不能作为Published的属性,除非它属于class或interface类

property
property是 Delphi 的特性,它使得方法具有了字段的调用特征,并赋予字段执行动作的能力。比如:
edt.Text = "test";
这个时候edt文本框的内容会随之改变,但是“理论”上Text应该只是改变了Text所在的内存数据而已,为什么会导致窗口更新界面这一些列动作?这就是因为property 这一特性。property 是 Borland 为 C++ 扩展的语法特性,目的在于使 C++ Builder 能够方便的使用 VCL 库,毕竟 VCL 是使用 Object Pascal 写的。如果学习过C#的朋友应该会很容易理解,因为C#的属性就是学习自 Delphi,毕竟 C# 和 Delphi 是同一个设计者。
定义一个属性Property的基本格式如下:
property 属性名 : 属性值类型 read 属性读函数/属性值变量 write 属性写函数/属性值变量
property 是属性定义关键字。属性的特征类似于字段,所以属性名就像字段名,属性值类型就像字段的值类型。属性读函数,是属性被“读取”时所执行的操作,这样在执行“取值”操作时,具备了执行其他动作的可能。另外,属性值变量,可以是 property 所在类能够访问的任何变量,如果使用了属性值变量,则相当于属性值直接从值变量中获取,这和直接赋值是没有什么差别的。属性写函数,是属性被“写入”时所执行的操作,这样在执行属性“赋值”操作时,具备了执行其他动作的可能。比如:写入edt的Text属性时,窗口会同时执行界面更新操作。另外,属性值变量和上面所述类似,如果使用了,就相当于将传来的属性值直接赋值到对应的属性值变量。这里的函数是真正的函数,不像C#中那样的getter和setter,所以会有些难以理解。

属性读函数声明:
function 读函数名: 属性值类型;
其中读函数名可以自定义,只要和属性声明中一样即可,该函数的返回值就是读属性操作时实际获取的值。

属性写函数声明(其实是一个子函数):
procedure 写函数名(value : 属性值类型);
其中写函数名可以自定义,只要和属性声明中一样即可,该函数参数value,就是对属性赋值时传递过来的实际值。

读函数和写函数必须设置一个,如果只设置读函数,而没有设置写函数(同时去掉write关键字),这样的属性就是只读属性,同理也可以设置只写属性。为了保证属性公开性的同时掩盖读写函数的可见性,可以将读写函数设置为私有,而将属性设置为共有,这样可以避免将读写函数本身暴露给调用者。
举例:

TxKernelSearchThread = class(TThread)   private     keyword_list: TStringList;     procedure SetKeyword(value: UnicodeString);   public     property Kerword:UnicodeString write SetKeyword;     ...end;procedure TxKernelSearchThread.SetKeyword(value: UnicodeString);begin if value = '' then
Exit; ExtractStrings([' '],[' '],PWideChar(value),Self.keyword_list);end;

上面是一个只写属性的例子。属性的一个很重要的应用就是VCL中的控件属性,以及事件属性等,这也就解释了为什么向文本框的Text属性赋值,会更新界面操作,这正是因为属性将字段和函数的特征结合了起来。 

Record 和Packed Record
Record 结构体表明编译器编译时要求进行字对齐,packed Record 的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对结构体中的字段访问会比第一种方式慢,但是更节约空间。有Packed 的占用内存小,但是速度慢一点。没Packed 的占用内存大,但是速度快一点。 
在windows中,内存的分配一次是4个字节的,而 Packed 按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样浪费了一些空间,但提高了效率。

inherited
inherited就是调用祖先类的函数,如果不带参数就是默认调用同名函数;如果带参数则表明子类中的函数个数可能比祖先类要多取其中的几个参数传过去。

Override 和 overload
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

Delphi 是用override 关键字来说明函数覆盖的。被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的,也就是说该函数在声明时应该包含这两个指示字中的一个,比如:
procedure Draw; virtual;
在需要覆盖的时候,只需要在子类中用override 指示字重新声明一下就可以了。
procedure Draw; override;
其中,virtual 虚类型;dynamic 动态;overload 重载;override 重写
关于方法定义关键字的说明
在过程定义声明时包括了的关键字的含义:
static 表示是静态方法;静态方法是方法的缺省类型,不能被覆盖;
virtual 表示是虚拟方法;
dynamic 表示是动态方法;
这两类方法的共同点是都可以被覆盖(override),区别仅在于运行时调用方法时的派发机制,virtual方法为执行速度做了优化,而dynamic方法则为代码大小做了优化;经常被覆盖的方法应该定义为virtual方法;
message 表示是消息处理方法;在关键字message后面的值指明了这个方法要响应的消息;用消息处理方法来响应Windows的消息,这样就不用直接来调用它;
override 表示是覆盖方法;要求祖先类中必须有该方法的定义,并且参数的顺序和类型及返值的类型必须匹配;用于扩展祖先类中的该方法而不是取代它(如不调用祖先类中的该方法则等同于取代);
overload 表示是重载方法;用于一个类中有许多同名的方法带着不同的参数表的情形;(属性的读写方法不能被重载);
abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中;如

procedure DoSomething; virtual; abstract;
reintroduce表示是重新声明的方法;用于方法的名称与祖先类中的某个方法名称相同的情形;
virtual 和 dynamic定义的虚函数,都是为了子类override用的,只不过它们的实现不一样vitrual 占用的空间大点,但速度快些。dynamci正好相反.
stdcall是一种调用方式,标明了参数入stack的顺序和清除的方式,具体可看Delphi的帮助.

class function 与 function
class function 类似于 c++中的静态方法,不需要建立类的实例就可以调用,如TYourClass.YourMethod.
function就是类成员方法,必须建立该类的实例才可以调用。

5 变量
通常按照变量声明的范围,可以分为:全局变量,类变量,局部变量。
全局变量:是指在类外声明的变量,通常这种变量是在整个工程内有效的,也就是说在整个工程中的类都可以使用。该变量的生存周期是在工程创建时有效,工程销毁时销毁。
类变量:是指在类中声明的变量,这种变量在类中的方法都可以使用。其生命周期是在类创建时有效,类销毁时销毁。
局部变量:是指在方法内部声明的变量,这种变量只能在方法内部使用。其生命周期也是在方法内部有效,当方法调用结束后,其内部所声明的变量也随之销毁。

全局变量
如果我们在应用程序一个单元中的interface关键字和implementation关键字之间的区域,定义一个全局变量,假如这个单元在别的地方被引用,那么这个单元的全局变量能够在别的地方被访问到,当然我们也可以在应用程序一个单元中的implementation关键字的后面定义全局变量,不过此时在这里定义的全局变量只能在本单元中被访问到,也就是说它是这个单元私有的,在别的单元中将不能被访问到。全局变量在应用程序的数据区分配内存,它存在于可执行模块(EXE或DLL等)的文件影像内部,在程序编译期就被决定,直到应用程序结束,全局变量所占用的内存地址是固定不变的。
全局的非指针类型,声明后自动分配内存,并初始化值。全局的指针类型,声明后不自动分配内存,值为nil。
局部变量
我们可以在函数或方法(包含过程)中定义局部变量,局部变量在应用程序的栈上进行分配,并且总是在栈上分配!局部变量的内存是在函数或方法(包含过程)被调用时分配,在函数或方法(包含过程)调用结束时其内存被释放。由于函数或方法(包含过程)在每次被调用时,栈顶可能发生变化,因此局部变量的内存地址是变化的,局部的非指针类型,声明后自动分配内存,不初始化值,值不确定(取决与别的程序对这块内存的操作)。局部的指针类型,声明后不自动分配内存,但会随机指向一个地址,所以地址不为nil

注:这里我们不提倡用全局变量,而尽可能的用局部变量,假如必须用到全局变量,我们可以将这个全局变量在类(比如TForm)的成员区域声明或定义。对于局部变量我们则应多加小心,尤其是它在定义时不像全局变量一样被初始化,在程序中不注意则会隐藏巨大的风险,因此在使用局部变量时,一定要先初始化后再使用!

Delphi语法支持这样写么

6. Delphi函数参考大全的内容简介

本书通过大量的示例、典型应用帮助读者透彻理解Delphi函数及其应用。本书配套光盘中提供了书中所有实例的源代码,所有源代码都经过精心调试,在Windows XP下测试通过,能够正常运行。本书内容精练、实例丰富,是各级程序开发人员必备的参考书,同时也非常适合大中专院校师生阅读。