delphi的简单代码

2024-05-09

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怎么使用

时,经常需要选中Form来改变Form的属性值或生成新的Form事件句柄。有些时候,选择页面只需简单在页面上单击。但更多的时候,页面总是完全被其上的组件所隐藏。
    
    
  通过对象观察器(Object Inspector)顶端的下拉组合框来选择是一种解决办法。但从下拉列表中找出form类并不容易,尤其在页面包含了大量的组件时。
  IDE提供了选择form的快捷键。如当一个Memo组件以client方式充满了整个form的客户区域时。要想选择form,只要在Memo上单击,然后按下Esc键,就会选中form。
  因为IDE将焦点转向了最初所选对象的父对象。如有多个组件重叠。多按几次Esc键后,就会选中form。
  2、复选container(容器)中的组件
  Panel面板经常被用作其他组件的容器。如要同时选中Panel面板上的几个组件来移动它们或是改变它们的共同属性。一般可以通过Shift+单击来选择这些组件。但如想通过拖动鼠标来选的话,只会将panel拖的到处乱跑。按下Ctrl键再拖的话,就能选中后进行拖动。这个办法适用于所有的容器类组件(GroupBox, ScrollBox, ControlBar,等等)。
  3、微调组件
  选中一个组件后,按住Ctrl键再按下方向键(四个箭头)可以将组件往相应的方向以像素点为单位移动。同时按住Shift 和 Ctrl键,再按一下方向键的话可以使组件移至下一个网格定位点。
  要想组件往相应的方伸长或缩短一个像素点的话,按住Shift键再按方向键。左右键调整组件宽度,上下键调整组件高度。
  4、同时改变数个组件的属性
  当选择了多个组件时,对象观察器(Object Inspector)将会显示这些组件的共同属性。如想让Form中的数个Edit组件都有同样的宽度的话,只需同时选中它们,然后在对象观察器中改变Width属性,所有您选中的组件宽度都会变成新的宽度值。
  5、使用Alignment(对齐)对话框
  使一组组件能够以某种方式对齐。如希望一个Edit组件和与其对应的Label组件中间对齐。先选中Edit组件,然后按住Shift键选择Label组件,再在其中一个组件上右击鼠标,选择弹出菜单上的Align(对齐)选项。这时会弹出一个Alignment(对齐)对话框,允许您按照某些顺序对齐组件(以第一个选定的为参照)。   6、有用的一组快捷键
  快捷键    功能
F1      Help帮助              
  F3      Find                 
  F4      Run To Cursor        
步跟踪 进入函数过程实现内部)
  F8      Step Over(单步跟踪)  
  F9      Run                   
  F10      显示工具栏    
  F11      切换Object Inspector / Form / Unit 
  F12      切换 Form/Unit        
  Ctrl + F2   Program Reset         
  Ctrl + F3   Call Stack窗口    
  Ctrl + F4   关闭当前单元            
  Ctrl + F5   Add Watch 把当前选中添加到Watch中    
  Ctrl + F7   显示Evaluate/Modify dialog box    
  Ctrl + F9   编译                   
  Ctrl + F11  Open Project    
  Alt  + F4   关闭所有单元,但不关闭项目
  Alt  + F6   同F12    
  Alt  + F10  相当于鼠标右键    
  Alt  + F11  Use Unit 引用同一工程内的其他单元     
  Shif t + F7  Trace To Next Source Line    
  Shift + F8  调试时弹出CPU窗口    
  Shift + F10  同Alt + F10    
  Shift + F11  Add to Project    
  Shift + F12  显示View Form                
  Ctrl  + Shift + F11  显示Project的Options   
  Ctrl  + Alt + F11   显示Project Manager    
  Shift + Alt + F11   切换Object TreeView/Form/Unit 
  Ctrl  + 鼠标左键   找到指向的变量名、单元名、类名等的相应的定义部分    
  Alt   + 鼠标左键   块选代码    
  Ctrl  + 鼠标转轮   加速滚屏    
  Ctrl  + Shift + 数字键(0..9) 加书签或取消相同编号的书签(NUM不能用小键盘)
  Ctrl  + 数字键(0..9)    跳转到相应的书签的位置(NUM不能用小键盘)
移到屏幕的第一行,屏幕不滚动    
  Ctrl  + Page Down 将光标移到屏幕的最后一行,屏幕不滚动    
  Ctrl  + Home    将光标移至文件头    
  Ctrl  + End    将光标移至文件尾    
  Ctrl  + (向上方向键)  向上滚动屏幕,光标跟随滚动不出屏幕    
  Ctrl  + (向下方向键)  向下滚动屏幕,光标跟随滚动不出屏幕    
  Ctrl  + (向左方向键)  光标向左跳Tab    
  Ctrl  + (向右方向键)  光标向右跳Tab    
  Shift + 方向键      选择代码    
  Ctrl  + A  全选    
  Ctrl  + B  显示Buffer List窗口    
  Ctrl  + C  复制          
  Ctrl  + F  显示Find窗口   
  Ctrl  + I  同Tab键    
  Ctrl  + J  显示代码模板列表    
  Ctrl  + M  同Enter键    
  Ctrl  + N  同Enter键    
  Ctrl  + R  显示Replace Text窗口    
  Ctrl  + S  保存当前单元    
  Ctrl  + T  删除光标右边的一个单词    
  Ctrl  + V  粘贴    
  Ctrl  + X  剪切    
  Ctrl  + Y  删除光标右边的一个单词    
  Ctrl  + Z  撤销    
  Ctrl  + Shift + B  显示Browser窗口    
  Ctrl  + Shift + E  显示Explorer窗口    
  Ctrl  + Shift + F  同Ctrl + F    
  Ctrl  + Shift + G  插入GUID    
  Ctrl  + Shift + I  选中的代码整体向右移块两格    
  Ctrl  + Shift + J  选中的代码整体向左移块两格    
  Ctrl  + Shift + M  同Ctrl + M    
  Ctrl  + Shift + N  同Ctrl + N    
  Ctrl  + Shift + T  显示Add To-Do List窗口    
  Ctrl  + Shift + Y  同Ctrl + Y    
  Ctrl  + Alt + B  显示Breakpoint List 窗口   
L  显示Local Variables窗口    
  Ctrl  + Alt + M  显示Modules窗口    
  Ctrl  + Alt + S  显示Call Stack窗口    
  Ctrl  + Alt + T  显示Threads窗口    
  Ctrl  + Alt + V  显示Event Log窗口    
  Ctrl  + Alt + W  显示Watches窗口    
  Ctrl  + Space      显示代码自动完成列表    
  (Ctrl + Space显示代码自动完成列表,与操作系统的输入法有冲突,简单解决方式更换操作系统的输入法中的相应的快捷键)  
  Ctrl  + K -> O  将选中转换为小写    
  Ctrl  + K -> N  将选中转换为大写

delphi怎么使用

4. delphi的介绍

Delphi,是Windows平台下著名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为Anders Hejlsberg。经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。由Borland公司推出的Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编译器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。

5. Delphi用的是什么编程语言

Pascal语言 & Delphi 优点 (1)Pascal语言结构严谨,可以很好地培养一个人的编程思想。 (2)Delphi是一门真正的面向对象的开发工具,并且是完全的可视化。 (3)Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。 (4)Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。 缺点 Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。 Pascal语言简介 Delphi这个名字源于古希腊的城市名。它集中了第三代语言的优点。以Object Pascal为基础,扩充了面向对象的能力,并且完美地结合了可视化的开发手段。Delphi自1995年3 月一推出就受到了人们的关注,并在当年一举夺得了多项大奖。 Delphi的出现打破了V承可视化编程领域一统天下的局面。并且Delphi使用了本地编译器直接生成技术,使程序的执行性能远远高于其它产品生成的程序。它还是真正的面向对象的编程语言。PASCAL语言的严谨加上可视化的优势和强大的数据库功能使得它有充分的资本和微软的VB叫板。许多人当时都认为Pascal 是最有前途的程序设计语言,并预测Delphi将会成为可视化编程的主流环境。 Delphi在你编好程序后自动转换成.EXE文件它运行时速度比VB快,而且编译后不需要其他的支持库就能运行。它的数据库功能也挺强的,是开发中型数据库软件理想的编程工具。 Delphi适用于应用软件、数据库系统、系统软件等类型的开发。而且它拥有和VB差不多一样的功能,而且一样能应用API函数,这在控制Windows很有用。 Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。 Delphi的基本形式 Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序。缺省的应用程序是一个空白的窗体(form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。 Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代码而已。 在空白窗口的背后,应用程序的框架正在等待用户的输入。由于您并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可?/td>]

Delphi用的是什么编程语言

6. delphi 语言

(1)Pascal语言结构严谨,可以很好地培养一个人的编程思想。 
(2)Delphi是一门真正的面向对象的开发工具,并且是完全的可视化。 
(3)Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。 
(4)Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。 

缺点 
Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。 

Pascal语言简介 

Delphi这个名字源于古希腊的城市名。它集中了第三代语言的优点。以Object Pascal为基础,扩充了面向对象的能力,并且完美地结合了可视化的开发手段。Delphi自1995年3 月一推出就受到了人们的关注,并在当年一举夺得了多项大奖。 

Delphi的出现打破了V承可视化编程领域一统天下的局面。并且Delphi使用了本地编译器直接生成技术,使程序的执行性能远远高于其它产品生成的程序。它还是真正的面向对象的编程语言。PASCAL语言的严谨加上可视化的优势和强大的数据库功能使得它有充分的资本和微软的VB叫板。许多人当时都认为Pascal 是最有前途的程序设计语言,并预测Delphi将会成为可视化编程的主流环境。 

Delphi在你编好程序后自动转换成.EXE文件它运行时速度比VB快,而且编译后不需要其他的支持库就能运行。它的数据库功能也挺强的,是开发中型数据库软件理想的编程工具。 Delphi适用于应用软件、数据库系统、系统软件等类型的开发。而且它拥有和VB差不多一样的功能,而且一样能应用API函数,这在控制Windows很有用。 

Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。 

Delphi的基本形式 

Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序。缺省的应用程序是一个空白的窗体(form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。 

Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代码而已。 在空白窗口的背后,应用程序的框架正在等待用户的输入。由于您并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可?/td>

7. delphi怎么入门啊

delphi在我的学习经验
1、delphi使用的是pascal语言类型(不需要去找pascal的书来看),去买或找本delphi的书(我是从delphi7开始的)先看看基本语法、数据类型、常用函数;
2、先尝试这安装delphi7,在网上下一个,安装中的注意事项在网上可以找到;
3、先从简单的程序联系,比如控制窗体、按钮事件、Time控件的使用等,有些书上会介绍如何启动delphi并在其中编写代码,有些是直接介绍代码的,建议找比较基础的;
4、如果能够比较熟练的使用delphi中的控件并能理解使用一些常用函数,再找一些有深度的书去学习delphi的编程思想;
5、主要是要动手去写,不要怕出现错误,能将基础的学习好,数据库、网络、组件的开发都能比较快的上手,在需要新的组件或实现新的功能多在网上找找,看看别人的思路。

delphi怎么入门啊

8. 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)的成员区域声明或定义。对于局部变量我们则应多加小心,尤其是它在定义时不像全局变量一样被初始化,在程序中不注意则会隐藏巨大的风险,因此在使用局部变量时,一定要先初始化后再使用!

最新文章
热门文章
推荐阅读