种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

delphi(应用程式开发工具)

(2019-05-03 02:11:48) 百科综合
delphi(应用程式开发工具)

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的每一个设计细节,都将带给您一份欣喜。

基本介绍

  • 外文名:Delphi
  • 发布单位:美国Borland(宝兰)公司
  • 发布时间:1995年
  • 类别:程式语言
  • 作者:安德斯·海尔斯伯格

简介

Delphi是美国Borland(宝兰)公司开发的工作在Windows平台下的开发工具,它的前身是在DOS下的产品Borland Turbo Pascal。从产品名称上就可以知道,Turbo Pascal使用的是Pascal语言。从Turbo Pascal 5.5版本开始,Borland公司在传统Pascal的基础上加入了面向对象的功能。
Delphi是一个集成开发环境(IDE),使用的是由传统Pascal语言发展而来的Object Pascal语言。它在本质上是一个代码编辑器而不是一种语言,但是由于Delphi是几乎是市场上唯一一个使用Pascal语言的产品,因此有的时候Delphi也成为了人们称呼Object Pascal的代名词。Borland公司已经把Object Pascal语言改称为Delphi语言。

功能特点

Delphi是Borland公司研发的可视化开发工具,可在Windows3.x、Windows95、WindowsNT、WindowsXP、WindowsVista、Windows7等环境下使用。当前,Delphi 也可以在LINUX平台上开发套用,其在LINUX上的对应产品Kylix。
Delphi 拥有一个可视化的集成开发环境(IDE),採用面向对象的程式语言ObjectPascal和基于部件的开发结构框架。Delphi它提供了500多个可供使用的构件,利用这些部件,开发人员可以快速地构造出套用系统。开发人员也可以根据自己的需要修改部件或用Delphi本身编写自己的部件。
“真正的程式设计师用C++,聪明的程式设计师用Delphi”,这句话是对Delphi最经典、最实在的描述。Delphi被称为第四代程式语言,它具有简单、高效、功能强大的特点。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用。可以说Delphi同时兼备了VC功能强大和VB简单易学的特点。它一直是程式设计师至爱的编程工具。Delphi具有以下的特性:基于窗体和面向对象的方法,高速的编译器,强大的资料库支持,与Windows编程紧密结合,强大而成熟的组件技术。但最重要的还是Object Pascal语言,它才是一切的根本。Object Pascal语言是在Pascal语言的基础上发展起来的,简单易学。
delphi
Delphi提供了各种开发工具,包括集成环境、图像编辑(Image Editor),以及各种开发资料库的应用程式,如DesktopDataBase Expert等。除此之外,还允许用户挂接其它的应用程式开发工具,如Borland公司的资源编辑器(Resource Workshop)。
在Delphi众多的优势当中,它在资料库方面的特长显得尤为突出:适应于多种资料库结构,从客户机/服务机模式到多层数据结构模式;高效率的资料库管理系统和新一代更先进的资料库引擎;最新的数据分析手段和提供大量的企业组件。

版本

1995 1.0 支持16位Windows开发。基于框架(VCL)的,可拖曳、可视化的开发环境
1996 2.0 以32位编译器为核心,支持C/S资料库开发
1997 3.0 语法:加入接口(Interface)的机制。IDE:首次提供了(Code Insight)
1998 4.0 语法:加入动态数组和方法覆盖等支持。IDE:增强调试能力,提供代码模板
delphi(应用程式开发工具)
1999 5.0 增强了IDE和调试器,提供了TeamSource。简化Internet的开发,增强资料库支持
2001 6.0 提供了Web Service。跨平台的Kylix 1.0和CLX
2002 7.0 提供了.NET的过渡,增强的Internet开发(IntraWeb),完善资料库支持,增加了Indy网路元件和Rave Report资料库报表,并且支援UML及XP的程式製作。
2003 8.0 单纯的for .NET版本,拥有C#的能力,保留了Delphi的易用性(业内视为一个过渡版本)
2004 9.0 正式名称:Delphi 2005。语法:加入了inline及for in loop等功能。IDE:把Borland Delphi. Net、Borland Delphi Win32、Borland C#、Enterprise Core Objects等环境和功能集成成一个开发工具,因此可以在Win32和.NET开发环境中切换或同时进行
2005 10.0 发布名称:Borland Developer Studio(BDS) 2006。集成C++ Builder; ECO(Enterprise Core Objects)升级到ECO III; 集成Together for Delphi,可以在同一个IDE中进行UML开发;QA Audits和QA Metrics可以快速的把握专案的设计和代码的质量。
2006 Turbo Borland将BDS 2006拆分成几个独立的版本(Delphi for win32、Delphi for .net、C#、C++ Builder),而且不能同时安装两个不同的版本。由于Borland的IDE生产部份独立成为一家名为codegear的公司,所以这个版本是以Borland名义推出的最后一个版本。
2007 11.0 正式名称:CodeGear RAD Studio - Delphi 2007。
2008 5.7 Borland正式宣布将CodeGear子公司出售给Embarcadero(易博龙)技术公司。
2008 8.25 Embarcadero发布CodeGear Delphi 2009 Pre-release版。
2009 8.25 Embarcadero发布CodeGear.RAD.Studio.2010版
2010.8.30 Embarcadero 发布 Delphi XE(又名Delphi 2011,代号为Fulcrum)
2011.1.27 Embarcadero公司宣布成立一个新的精简版Delphi Starter Edition,是在爱好者和谁得到一个稍微简化的功能集为一个小的创业公司的价格,旨在可用性。
2011 年 发布Embarcadero RAD Studio XE2,支持跨平台,这项技术被称为FireMonkey。
2012 年5月 英巴卡迪诺公司正式发布 Delphi XE3。
2013 年4月 发布Delphi XE4 ,ios编程得到完善。
2013 年9月 发布Delphi XE5 ,开始安卓开发。
2014 年3月 发布AppMethod 1.13,专注移动开发。

程式之父

Anders Hejlsberg,丹麦人,曾在丹麦科技大学学习工程学。Anders Hejlsberg第一次登上软体界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇蹟:Delphi语言

特性

Delphi发展至今,从Delphi1、Delphi2到Delphi XE3,不断添加和改进各种特性,功能越来越强大。Delphi5开始添加了对IDE(集成开发环境)的很多改进新特性,扩展了资料库支持(ADO和InterBase资料库),带有Internet支持的MIDAS改进版,TeamSouse版本控制工具,转换功能,框架概念以及很多的新组件与新特性。
Delphi 6.0是Borland公司推出的一套无论是界面还是功能都近乎完美的应用程式开发工具。与以前的Delphi版本相比,Delphi 6.0使用更简便,效率也更高。
Delphi 7.0使用更简便,效率更高,最稳定的一个版本,被称为开发人员的工具之最,也是Borland产品最顶峰时期,更是风靡全球。
Delphi2010内置的Direct 2D模组及开发库,其新加的功能:拥有一个能同时运作于x86和x64的IDE,在此IDE下将会有跨平台编译器,能够编译用于linux和MAC的应用程式;将会支持windows7下的触摸式编程;强化的DataSnap;将支持云计算;将支持函式式编程,这需要很多时间,据David估计是2011会实现。
Delphi XE2实现了跨平台通用开发,通过Delphi XE2所带的FireMonkey平台,Delphi可以开发跨平台应用程式,并原生编译到Windows和Mac OS X平台。FireMonkey还可以为iPhone、iPod Touch和iPad创建iOS套用,并分发到苹果公司的套用商店。Delphi的FireMonkey应用程式拥有完全的硬体加速。
Delphi XE3 可以发布不同平台的产品,包括Windows 7和Mac OS,未来还要支持手机版本的Android和IOS。
(1)直接编译生成可执行代码,编译速度快。由于Delphi编译器採用了条件编译和选择连结技术,使用它生成的执行档案更加精炼,运行速度更快。在处理速度和存取伺服器方面,Delphi的性能远远高于其他同类产品。
Delphi界面Delphi界面
(2)支持将存取规则分别交给客户机或伺服器处理的两种方案,而且允许开发人员建立一个简单的部件或部件集合,封装起所有的规则,并独立于伺服器和客户机,所有的数据转移通过这些部件来完成。这样,大大减少了对伺服器的请求和网路上的数据传输量,提高了套用处理的速度。
(3)提供了许多快速方便的开发方法,使开发人员能用儘可能少的重複性工作完成各种不同的套用。利用项目模板和专家生成器可以很快建立项目的构架,然后根据用户的实际需要逐步完善。
(4)具有可重用性和可扩展性。开发人员不必再对诸如标籤、按钮及对话框等Windows的常见部件进行编程。Delphi包含许多可以重複使用的部件,允许用户控制Windows的开发效果。
(5)具有强大的数据存取功能。它的数据处理工具BDE(BorlandDatabaseEngine)是一个标準的中介软体层,可以用来处理当前流行的数据格式,如xBase、Paradox等,也可以通过BDE的SQLLink直接与Sybase、SQLServer、Informix、Oracle等大型资料库连线。Delphi既可用于开发系统软体,也适合于套用软体的开发。
(6)拥有强大的网路开发能力,能够快速的开发B/S套用,它内置的IntraWeb和ExpressWeb使得对于网路的开发效率超过了其他任何的开发工具。
(7)Delphi使用独特的VCL类库,使得编写出的程式显得条理清晰,VCL是现在最优秀的类库,它使得Delphi在软体开发行业处于一个绝对领先的地位。用户可以按自己的需要,任意的构建、扩充、甚至是删减VCL,以满足不同的需要。
(8)从Delphi8开始Delphi也支持.Net框架下程式开发。
当前DELPHI 已经成为一个品牌,而不仅仅是一个开发平台或开发语言的名称。当前DELPHI产品已经由CodeGear公司继续发展,该公司是BORLAND公司的全资子公司。当前,CodeGear为广大开发者提供了DELPHI FOR PHP,以高度可视化的方式全面支持面向对象的PHP网站开发,大大提高了PHP开发网站的代码复用程度,成为WEB套用开发的新利器。

安装方法

Delphi的安装与其它套用软体并无不同。2.0版必须在Windows 95以上的作业系统中使用。启动Windows 95或Windows NT后,将Delphi的光碟放入光碟机(CD-ROM)中,运行光碟上的\INSTALL\SETUP.EXE档案,它的安装程式会提示您正确地装入Delphi。如果您是在微软中文Windows环境中安装Delphi,请参照附录A来设定您的BDE环境,以便于处理中文数据。
为避免隐藏在Delphi后的Program Manager和曾经运行过的其它程式扰乱版面,分散您的注意力,不妨在启动Delphi前关掉其它应用程式;启动Delphi后,再最小化隐藏在后面的Delphi 2.0程式组。这样萤幕上就只留下Delphi视窗可见了。
首次载入Delphi,萤幕上会出现四个视窗:
标题为“Delphi-Project1”的Delphi主视窗
Object Inspector视窗
标题为“Form1”的窗体(Form)视窗
标题为“Unit1.PAS”的代码编辑视窗。刚启动时这一视窗的大部分被“Form1”窗体所掩盖。将“Form1”窗体移开,或单击Form1窗体下方的状态行,可以使其全部可见。在“Form1”窗体的任意可见位置单击滑鼠,可以恢复主窗体可见。
Delphi的主视窗位于萤幕的上端,包括Menu(选单)、Speed Bar(加速条)和Component Panel(部件选项板)。Menu是下拉式主选单。Speed Bar位于主视窗的左下端,由两排共14个加速按钮组成。这些按钮是选单功能的捷径,各种图示直观地表示了它能执行的动作。Component Panel由一行、若干页对象按钮所组成,利用它来选择需要的部件并将它放到窗体中去。
Object Inspector视窗含有两页:Properties页显示窗体中当前被选择部件的属性信息,并允许改变对象的属性;Events页列出了当前部件可以回响的事件。按动Object Inspector下端的“Events”页标籤,使得Events页可见,这一定的事件后边的空白处,可以定义对象接受到相应事件时执行的动作。首次启动时,Object Inspector视窗显示的是当前窗体Form1的属性。Object Inspector根据对象属性的多少,决定是否有滚行显示。移动滚行条,可以查看当前对象的全部属性。
此外,Object Inspector上还有Object Selector(对象选择器),位于Object Inspector上方的下拉式选单中。它显示了窗体上所有部件的名称和类型,也包含窗体本身。您可以用Object Selector很容易地在窗体的各个部件之间切换,也可以快速地回到窗体本身。当窗体中含有较多的对象时,您会发现这是切换对象尤其是回到窗体的最快捷途径。
想使Object Inspector一直可见,可将滑鼠移到Object Inspector上,按动右键,以启动Object Inspector的弹出式选单,将其设定为Stay On Top。这对初学者常是一个很重要的设定方式。

窗体视窗

Forms视窗是开展大部分设计的工作区域。首次启动Delphi 2.0时显示的是窗体Form1。可以把部件放在窗体中,通过移动位置、改变尺寸等操作随心所欲地安排它们,以此来开发应用程式的用户界面。您可以把窗体想像成一个可以放置其它部件的容器。窗体上有栅格(Grids),供放置部件时对齐位置用,在程式运行时Grids是不可见的。一个真正的应用程式可能有不止一个视窗,您可以选用不同的窗体进行设计。其它窗体可以是对话框(Dialog Box)、数据录入框等。
Delphi界面Delphi界面
代码视窗一开始处于窗体视窗之下。因为在Delphi中,设计用户界面直接在窗体中进行,运行结果和设计样板完全一致。当部件被放到窗体上时,Delphi会自动生成大部分的用户界面代码。您所应做的只是在它为您生成的框架中加入完成所需功能的程式段而已。点动Form1的状态行使代码视窗可见。
这个视窗中是代码编辑器。可以在其中书写Delphi应用程式的原始码。当程式中含有不止一个视窗时,会有几个库单元的源程式出现在代码编辑器中。代码编辑器的标题条中显示了当前正在编辑的库单元档案名称。要查看某一特定程式的原始码,只需用滑鼠点动写有该库单元档案名称的页标籤,就可以对该库单元进行编辑了。

用户界面

从空白窗体开始工作。将设计一个简单的程式:在萤幕上开一个视窗,视窗中有一个图框,用三个按钮来改变图框的形状;再用一个图示按钮来进行图框的颜色设定,通过颜色编辑对话框来选择变成哪一种颜色。在选单上选用File|New Application选单项来生成新的工程档案。这时,萤幕上出现窗体。  部件(Component)是建立Delphi应用程式的要素。Delphi为用户提供了丰富的部件库,既有可视的部件(如编辑框、按钮)等,也有不可视的部件(如系统定时器、数据表等)。它们按照功能分别排列在Component Panel的各页上。
Delphi界面Delphi界面
移动滑鼠到Component Panel上,在部件按钮上“犹豫”一、两秒钟,一个黄色小提示框就会弹出,写有该部件的名称,称之为提示(Hint)。在要选择的部件上单击左键,则该部件按钮被按下,表示部件已被当前选择。然后,将滑鼠移动到窗体上,按下左键,该部件被放到窗体中。部件的轮廓线上会显现八个被称为尺寸调整器(Sizing Handles)的黑色小方块。它除了供用户调整尺寸使用之外,还可以表示该对象处于当前编辑状态。此时,按“Delete”键可以将该部件删除。
在Component Panel上,点动写有“Additional”的页标籤,切换到Additional页,再移动滑鼠,逐个用观看Hint的办法查看部件的名称,找到“Shape”部件(其图示为圆、方形、三角形三个几何体),将其放到窗体的左方。再按动“Standard”页标籤,找到“Button”部件(图示上画有OK按钮)。Delphi允许在添加多个同类型的部件时,不必每次到部件选项板上选取。按住“Shift”键,同时在“Button”部件上单击滑鼠左键,这时“Button”部件处于按下状态,并有蓝色框线,表示已经被选择固定。依次在窗体右方的三个位置单击左键,则会放置三个相同的Button部件。把滑鼠游标移到部件选项板左侧的箭头图示处,这是“取消选择”按钮,它没有提示。按动它,会发现“Button”部件按钮恢复弹起状态。否则,每次“Form1”上的滑鼠单击左键动作,都会导致增加一个按钮部件。
再次进入“Additional”部件页,选择一个“BitBtn”按钮(图示是有绿色对号的OK按钮),把它放到其它三个按钮部件的下面。
点动“Dialog”页标籤,选择以16色格线做图示的ColorDialog部件并把它放到窗体的任意位置。因为这一部件是不可视部件,所以它的位置并不影响大局。
Delphi XE3 开发集成环境Delphi XE3 开发集成环境
delphi(应用程式开发工具)

部件调整

一般来讲,此时放置到窗体的部件是分散排列的,而且其大小不是真正需要的尺寸。除了不可视的ColorDialog部件外,其它的部件都需要进行位置、大小和显示字样的调整。Delphi提供的对齐工具和视窗栅格为这些调整提供了方便。移动部件:只需把滑鼠落到想移动的部件上,按住左键并移动游标,到合适的位置再释放左键,整个部件即被移到新位置。
Delphi界面Delphi界面
调整尺寸:先把滑鼠游标移动到要改变尺寸的部件上,单击左键,选中该部件,尺寸调整器会出现,把滑鼠移动到其中的一个小黑色方块上,当滑鼠变成拖动方向指示时,按下并拖动滑鼠左键,可以放大或缩小部件。上下左右的小方块用来移动对应的各边,四个角的方块可以移动相连的两条边。如果要精确地表述部件的尺寸,可以在Object Inspector上,改变Left(表示部件左边缘到窗体左框线的象素点数)、Top(表示窗体上框线到部件上边缘的象素点数)、 Width(部件本身的宽度)、Height(部件本身的高度)等属性。关于改变部件的属性,下文还将仔细讲解。
使得一组部件对齐:用调整位置的方法可以对齐部件,但操作步骤複杂。Delphi提供的对齐工具可以使多个部件的对齐极为迅速方便。下面来使四个按钮对齐。先将四个按钮选为一组:按住并向右下方拖动滑鼠左键,在窗体上画出围绕四个按钮的矩形,释放左键后,被选中的按钮周边会出现暗灰色的框线。选用Edit|Align命令,或使用弹出式选单(在被固定的部件上单击滑鼠右键激活),可以显示图1.4所示的对话框。
要使按钮沿左边对齐并使它们在垂直方向上均匀分布,先在Alignment对话框的Horizontal栏内选择“Left sides”,在“Vertical”栏内选择“Space equally”,按动OK按钮,Delphi就会自动将它们对齐。然后,您可以将它们四个作为一组来移动。在四个按钮以外的窗体上按动滑鼠左键,就释放了组中的部件,使它们成为分立的部件。
利用对齐模板来对齐部件也是很方便的。首先要将要对齐的部件选成一组,选择View|Alignment Palette显示对齐模板。按照所示的方式选择即可达到对齐的目的。

锁定部件

如果部件已经对齐,为防止不小心移动部件,可以将部件位置锁定。选择主选单上的Edit|LockControls选项,使得部件不能进行移动操作。解锁只需再次选择此项即可。
Delphi界面Delphi界面
调整“Shape”部件的大小,使之与右边的按钮组相匹配。再改变窗体的大小,按住并拖动窗体右下方使之刚好包容窗体上的全部部件。这样,您的用户界面就会比较美观。及时地保存所做的工作至关重要。对设计者来讲,有两个档案需要保存:库单元档案(以.PAS为后缀)和工程档案(以.DPR为后缀)。从主选单上选择File|Save Project As...项,Delphi会显示标题为“Save Unit1 As”的档案保存对话框,Delphi 2.0 允许用户更改存储路径,您可以在下拉式列表框中选择。最好将您的档案保存在自己的目录中。在编辑框中键入demoform.pas以保存库单元档案;然后显示标题为“Save Project As”的另一个档案保存对话框,键入sample.dpr。Delphi保存这两个档案并返回窗体视窗。不要把库单元和工程存成一样的档案名称,Delphi要求两者不同。
第一次保存后,以后可以随时通过Speed Bar中的“Save All”和“Save file”来保存工程档案和库单元档案。一般来讲,当确认档案的改变后,要同时存储这两个档案。
运行工程:操作使您有了一个自己的应用程式界面。在速度条中按动“Run”按钮(绘有绿色三角图示),您可以看到,所生成的界面与您设计的界面是完全一致的。
改变对象的属性:上述的工程虽能够运行,但它对您的按动按钮操作是没有什幺反应的,而且,所有部件上还写着不需要的字样。双击视窗的关闭按钮结束运行,回到设计界面。下面,将仔细讲述如何在Object Inspector中改变部件的各种属性。
用Properties页改变部件的属性值:首先要改变各种部件的标题。先给视窗命名为“Demo”。按动Object Inspector上端的Object Selector的题条或者其右端的下拉标誌,找到Form1项,并点动左键,窗体被选中。在Object Inspector的Properties页中,找到Caption属性并用左键选中,将其右端的Form1改为Demo,同时,您会发现窗体的标题已经相应地做了改变。
用滑鼠点中窗体中的Shape部件,Object Inspector列出了它的属性。选中Shape属性,您会发现右端出现了下拉标誌。点动这一标誌,可以查看对象的Shape属性可选值。它的形状可以是矩形、圆形、圆角矩形、方形等几种。这是设计后续功能的基础。
选中Button1按钮,此时Object Inspector已经显示出此按钮的一应属性。将它的Caption属性改为“&Rectangle”,“&;”号使得Delphi特殊处理它后面的字元,在这里,按钮中的R字母被做了下划线处理,运行时,可以用“Alt-R”来按动这一按钮。同样,您可以将其它的两个按钮Button2和Button3的Caption属性改成需要的形状指示,譬如“&RoundRec”、“&Ellipse”。可以把某个按钮作为视窗上的预设按钮,Delphi会为按钮加上有黑色的边缘。运行时,回车即相当于被按下。只需将此按钮的Default属性从False改成True,即将它设为窗体的预设按钮。点动Default属性,在右端的值后面双击左键,或从下拉选单中选取True,即可改变这一属性。Delphi中有许多只有True、False两个属性的部件,双击左键可以在这两个值之间切换。
汉化界面及字型
如果您的Windows95系统中安装了中文系统,对界面做汉化是极其方便的。例如,您可以将Button1的Caption属性改成“&R矩形”,同样地可改变其它部件的属性,将窗体做成中文的操作界面。
若对中、西文字型不满意,则可以调整Font属性以满足您的要求。Font属性的前面,有一个小小的“+”号,这说明它表征的是集属性,也即属性不再是一个单值,而是一个属性的集合。双击Font,ObjectInspector将在下面扩充显示它的其它属性。Color用来表示文本的颜色,Name定义了字型名,如System,MsSerif,Arial,宋体,黑体等。Style下又拥有四个属性:fsBold,fsItalic,fsUnderline和fsTrikeOut。如果想让字型有其中的某种风格,可把相应的属性值设成True。
Font对话框可以更为直接地设定以上属性。Font属性右侧值段有带省略号的按钮,单击它可以激活Font对话框,如图1.7所示:
这一对话框中包含了上述的全部属性,使得调整字形更为直接方便。但要申明的是,对于窗体Form来讲,Font属性改变的是窗体中其它部件的显示字形,它本身的标题字型是预设的System字型,不能通过属性来改变。
图形编辑对话框
最后,用图示按钮BitBtn1来控制Shape部件的颜色。选中图示按钮,将它的Caption属性改为“&Color”(或“&C颜色”)。可以在按钮中加入一个图示来形象地表述它的功能。选用ObjectInspector中的Glyph属性,点动值段的三点按钮,弹出图形编辑对话框。
您可以通过图形编辑对话框装入图示,在本例程中,按动Load按钮,选择\Delphi2.0\Images\Buttons\Brush.bmp档案装入,Bitbtn1就成为一个图示按钮。另外,Delphi还为您提供了丰富的Windows标準图示按钮。想运用它们,改变BitBtn的Kind属性。用户不妨尝试一下,选择其它值可以生成漂亮的标準按钮,如OK,Cancel等等。这会使您在以后的程式开发中受益匪浅。
至此,界面的设计工作就已完成了。运行一下观察效果,别忘记保存您的库单元档案、工程档案。
事件处理过程
完成用户界面,只是建立了一个“骨架”,下面要做的便是给程式加入“灵魂”,也即,使它能够完成所要求的功能。
颜色编辑对话框
图示按钮“Color”要控制部件Shape1的颜色,可以调入颜色编辑对话框,用以选择要变成的颜色。这时就要用到运行时不可视的部件ColorDialog了。同样地使图示按钮BitBtn1回响OnClick事件,在它的过程中加入以下的语句:
ColorDialog1.Execute;
Shape1.Brush.Color:=ColorDialog1.Color;
这样,图示按钮的功能也就完成了。
初学者可能对这样的程式段不能理解。其实也是十分简单的。查看ColorDialog的Brush属性,就会发现它是个集属性,在其下还有一个Color选项,正是想改变的属性。既然想将图形的颜色变得更加丰富多彩,它本身提供的几种颜色就已不能满足要求了。用颜色编辑器可以得到更多的色彩。程式的第一句用Execute方法,使得ColorDialog运行它本身。当用户在对话框中进行操作,选定了一种颜色时,即使得TColorDialog对象的一个属性Color置为选定颜色的值。将此值赋给Shape1的Brush属性的子属性Color,就将选定的颜色加到了图形上。
读者的要求可能会是,怎样儘快的了解这些这些方法、属性和域呢?下文对使用在线上帮助的简单介绍可能会对您有所裨益。
使用在线上帮助
事实上,使用在线上帮助是您全面地了解可用的方法、对象的域、??的例程。较为简单有效的方法是使用Help中的搜寻功能。如果您对一个对象知之甚少,选用主选单中的Help|HelpTopics项,在弹出的帮助对话框,选用Indexes(“索引”)页,Delphi2.0会提示您输入要检索的主题。以您想用的部件的对象名作为检索主题词,可以参阅很多基本的信息。例如,上文的例程中,在编辑框中键入对象的名称TColorDialog,在词条中就会出现该主题,按动Display按钮显示出TColorDialog的帮助信息。查看method,可以找到能套用在CclorDialog1上的方法Execute;仔细阅读它的功能,上述的编程便不难理解了。Properties中提供了部件的所有属性,在关键属性KeyProperties前加上了“金钥匙”,提供了详尽的说明。在Task中您可以查阅该对象的其它相关主题,还可以参阅Example中的套用例程。

编程方法

Delphi的程式语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程式只生成单个执行档(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的程式语言。
Delphi界面Delphi界面
本章中,将讨论ObjectPascal的主要特点,并讲解如何在事件处理过程和其他应用程式中,使用它来编製程序代码。本章将讲解Delphi应用程式中最常用的ObjectPascal语法,而不是Pascal语言的一切细节。如果您完全不熟悉Pascal编程,请参阅一些基础的Pascal教程。如果您具有编程经验,并能熟练地使用其他流行程式语言,您将在本章的ObjectPascal中发现一些相同的概念。如果您已经熟悉了BorlandPascal,就可以快速浏览或跳过本章。
编写ObjectPascal程式代码
在前边的章节中,通过例程,已经编写了几行简单的代码。在本章中,将从熟悉Pascal编程的角度,配合实例,讲解ObjectPascal编程的基该方法。
在编写自己的ObjectPascal程式时,要注意程式的可读性。Pascal语言是英式结构语言,在程式中选择合适的缩排、大小写风格,并在需要时将程式代码分行,会使得程式代码能够很容易地被自己和他人读懂。一般的程式设计师都有这样的体验:如果不给程式加上适当的注解,一段时间后,自己也难以理清程式的流程。给程式及时地加上注释是良好的编程习惯。Delphi的注释需要加注在{}之间,编辑器会把它们处理成为空白。Delphi保留了BorlandPascal编辑器的风格,关键字採用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。

赋值

在事件处理过程中,最常用到的工作就是把一个新值赋给一个属性或变数。在设计用户界面时,可以使用ObjectInspector(ObjectInspector)来改变其属性;但有时需要在程式执行时改变属性的值,而且有些属性只能在执行时改变,这些属性在Delphi的线上帮助的“Proprety”主题中被标为执行期属性。进行这种改变,就必须使用赋值语句。
Delphi界面Delphi界面
下文的赋值语句表征一个OnClick事件。当按钮按动后,将编辑框部件Edit1的Color属性置为clRed:
procedureTForm1.Button1Click(Sender:TObject);
begin
Edit1.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。变数说明左边是变数的名称,右边则是该变数的类型,中间用(:)隔开。
var
Value,Sum:Integer;
Line:String;
在窗体中加入一个名称为Edit1的编辑框,再加入一个名称(属性Name)为Add的按钮部件,并建立如下的事件处理过程:
procedureTForm1.addClick(Sender:TObject);
var
X,Y:Integer;
begin
X:=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);
var
Number:Integer;
begin
Number:=StrToInt(Edit1.Text);
caseNumberof
1,3,5,7,9:Label2.Caption:='奇数';
0,2,4,6,8:Label2.Caption:='偶数';
10..100:
begin
Label2.Caption:='在10到100之间';
Form1.Color:=clBlue;
end;
else
Label2.Caption:='大于100或为负数';
end;
end;
执行程式,当Edit1部件接受到一个值,并按动“OK”按钮触发程式后,Number便被赋值为用户输入的数值。case语句根据Number的值判断该执行哪一条语句。象if语句一样。case语句也有可选择的else部分。case语句以end结尾。

循环

ObjectPascal的循环语句有三种:repeat、while和for语句。
repeat语句
repeat语句会重複执行一行或一段语句直到某一状态为真。语句以repeat开始,以until结束,其后跟随被判断的布尔表达式。参阅以下的例程:
i:=0;
repeat
i:=i+1;
Writeln(i);
until=10;
当此语句被执行时,窗体的下方会出现1到10的数字。布尔表达式i=10(注意,与其他语言不同的是,“=”是关係运算符,而不能进行赋值操作)直到repeat..until程式段的结尾才会被计算,这意味着repeat语句至少会被执行一次。

不同

while语句和repeat语句的不同之处是,它的布尔表达式在循环的开头进行判断。while保留字后面必须跟一个布尔表达式。如果该表达式的结果为真,循环被执行,否则会退出循环,执行while语句后面的程式。
下面的例程达到和上面的repeat例程达到同样的效果:
i:=0;
whilei0then
test2(A);{经前置说明,调用未执行的过程Test2}
writeln(A);
end;
procedureTest2(varA:Integer);{经前置说明的Test2的执行部分}
begin
A:=Adiv2;
ifA>0rhen
test1(A);{在Test2中调用已执行的过程Test1}
end;
procedureTForm1.Button1Click(Sender:TObject);
begin
Alpha:=15;{给Alpha赋初值}
Test1(Alpha);{第一次调用Test1,递归开始}
end;
按钮的OnClick事件处理过程给Alpha赋初值,并实现先减1再除2的循环递归调用,直到Alpha小于0为止。

函式

过程

过程与函式是程式中执行特定工作的模组化部分。Delphi的运行库包含许多过程与函式以供您的应用程式调用。您不必了解过程与函式的逻辑,但要知道过程与函式的用途。在对象中说明的过程和函式称为方法(Method)。所有的事件处理过程都是过程,以保留字procedure开头。每一个事件处理过程只包含了当这一事件发生时需要执行的程式代码。在事件处理过程中使用Delphi已经存在的过程与函式,只需在程式代码中调用它们即可。

使用

与过程一样,函式的程式代码也执行特定的工作。它和过程的差别为:函式执行时会返回一个值,而过程则没有返回值。函式可以用来赋给一个属性或变数;也可以使用返回值来决定程式的流程。前文中实际上已经接触过了函式。在讲述变数时,曾用到过下面的程式段:Edit1.Text:=IntToStr(X+Y);其中,IntToStr(Value)把一个LongInt类型的数值转化为字元串的值,Value是IntToStr唯一的参数,它可以是一个整形的值、变数、属性或产生整形值的表达式。调用函式,必须把返回值赋给和此返回值类型兼容的变数或属性。
有些函式返回一个True或False的布尔量,用户的程式可以根据返回值来决定跳转。下文的例程讲述了函式返回值为Boolean的判断用法:
在窗体中加入一个ColorDialog对象和一个Name属性为ChangeColor的按钮。为按钮的OnClick事件建立事件处理过程如下:
procedureTForm1.ChangeColorClick(Sender:TObject);
begin
if ColorDialog1.Execute then
Form1.Color:=ColorDialog1.Color
else
Form1.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);
begin
CalNo:=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可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护您的参数,使您在不想改变参数值时不会意外地将新的值赋给这个参数。

物件类型

枚举类型

一个枚举型的说明列出了所有这种类型可以包括的值: type
Tdays=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
可以定义上述枚举类型的变数:
var
DayOfWeek:TDays;
在枚举型中,括弧中的每一个值都有一个由说明它的位置决定的整形值。例如Sunday有整形值0,Monday有整形值1等。您可以把DayOfWeek说明为一个整形变数,并将一星期的每一天赋一个整形值以达到相同的效果,但用枚举型会使得程式可读性好,编写容易。当您在枚举型中列出值时,您同时说明了这个值是一个标识符。例如您的程式中如果已经含有TDays类型且说明了DayOfWeeks变数,则程式中便不能使用Monday变数,因为它已经被说明为标识符了。

子界类型

子界型是下列这些类型中某範围内的值:整形、布尔量、字元型或枚举型。在您想限制一个变数的取值範围时,子界型是非常有用的。
type
Thours=0..23;
TValidLetter='A'..'F';
TDays=(Sunday,Monday,Tuesday,Wednesday,Thursday,
Friday,Saturday);{枚举型}
TWorkDay=Monday..Friday;{一个TDays型的子界}
子界型限定了变数的可能取值範围。当範围检查打开时,(在库单元的Implementation后面有{$R*.DFM}字样表示範围检查打开,否则您可以在Options|Project|ComplierOptions中选择RangeCheking来打开範围检查),如果变数取到子界以外的值,会出现一个範围检查错误。

数组类型

数组是某种数据类型的有序组合,其中每一个元素的值由其相对位置来指定,您可以在数组的某个位置上放置数据,并在需要时使用这些数据。下面的类型说明了一个Double型的数组变数:
var
Check:array[1..10]ofDouble;
它表示Check指向一个含有10个Double型元素的数据串列,代表每一个元素的是1到10之间的数字,称为索引。数组的每一项由数组名称加上[]中的索引来表示。Check包含10个变数,Check[1]表示第一个变数。您也可以把数组定义成类型:
type
TCheck=array[1..10]ofDouble;
则变数说明改为:
var
Check:TCheck;
您可以通过给数组赋值等方法来使用数组。下面的语句将0.0赋给Check数组中的所有元素:
forJ:=1to10do
Check[J]:=0.0;,
数组也可以是多维的,下面的类型定义了一个20行、20列的数组。
type
Ttable=array[1..20,1..20]ofDouble;
var
table1:TTable;
,;,;想将这一表格的所有数据初始化为0.0,您可以使用for循环:
var
Col,Row:Integer;
forCol:=1to20do
forRow:=1to20do
Table1[Col,Row]:=0.0;

字元串类型

字元串类型事实上是一个一维的字元数组。当您说明一个字元串型的变数时,您应当指明这个字元串的大小,下面是说明字元串类型的例子:
type
MyString:string[15];
var
MyName:MyString;
则变数MyName被说明成为最多可以包含15个字元。如果您没有说明字元串的大小,Delphi会认为字元串包含最大值255个字元。给字元串赋值可以直接使用单引号括起的字串赋值:
MyName:='Frank.Smith';
或MyName:='张明';
因为MyName是一个可以包含15个字元的MyString型变数,上文的两个的变数都是有效的,一个汉字可以视作两个字元。当您给字元串型变数赋的值多于定义数值时,例如将MyName赋为‘FrankSmith.Franklin’,则Delphi只会接受前15个字元‘FrankSmith.Fran’。在记忆体中,字元串通常占用比所说明的大小多一个位元组的空间,因为第一个位置是一个包含这个数组大小的位元组。您可以使用索引值来访问字元串的字元,MyName[1]可以得到MyName的第一个字元'F'。
可以使用Delphi丰富的运算符、过程和函式来处理字元串型的变数和属性。下面介绍几个常用的运算符和Delphi过程或函式:
Concat和(+)功能相同,都可以将多个字元串组合在一起,建立一个较大的字元串;Copy会返回一个字元串中的子字元串;Delete在一个字元串中从一个指定位置起删除一定数目的字元;Insert在一个字元串中插入一个字元串;Length返回字元串的长度;Pos返回一个子字元串在一个字元串中的位置,即索引值。

集合类型

集合类型是一群相同类型元素的组合,这些类型必须是有限类型如整形、布尔型、字元型、枚举型和子界型。在检查一个值是否属于一个特定集合时,集合类型非常有用。下面的例程可以说明集合类型的用法:在窗体上加入一个编辑框和一个按钮,清除编辑框中的文字,在其上加上Caption为“输入元音”的标籤Label,并在编辑框的下方加入一个空的标籤,将按钮的Default属性改为True,建立按钮的事件处理过程如下:
procedureTForm1.Button1Click(Sender:TObject);
type
Tvowels=setofChar;
var
Vowels:TVowels;
begin
Vowels:=['a','e','i','o','u'];
ifEdit1.Text[1]inVowelsthen
Lable2.Caption:='是元音';
else
Lable2.Caption:='请再试';
end;
执行这个程式,在编辑框中输入字母,表达式Edit1.Text[1]inVowels的结果是布尔型的,in是运算符,用来判断字母是否存在于集合中。输入的判别结果会显示在编辑框的下方。以上就用到了集合类型TVowels。

记录类型

记录是您的程式可以成组访问的一群数据的集合。下面的例程说明了一个记录类型的用法:
type
TEmployee=record
Name:string[20];
YearHired:1990..2000;
Salsry:Double;
Position:string[20];
end;
记录包含可以保存数据的域,每一个域有一个数据类型。上文的记录TEmployee类型就含有四个域。您可以用以下的方式说明记录型的变数:
var
NewEmployee,PromotedEmployee:TEmployee;
用如下的方法可以访问记录的单域:
NewEmployee.Salary:=1000;
编写如下的语句可以给整个记录赋值:
withPromotedEmployeedo
beginsfu nb
Name:='';
YearHired:=1993;
Salary:=2000.00
Position:='editor';
end;
您的程式可以将记录当成单一实体来操作:
PromptEmployee:=NewEmployee;
以上介绍了用户常用的自定义类型。在Delphi的编程中,对象是非常重要的用户自定义数据类型。象记录一样,对象是结构化的数据类型,它包含数据的域(Field),也包含作为方法的过程和函式。在Delphi中,当您向窗体中加入一个部件,也就是向窗体对象中加入了一个域;每一个部件也是对象,每当您建立一个事件处理过程使得部件可以回响一个事件时,您即自动地在窗体中加入了一个方法。

档案操作

Delphi可对Windows作业系统的注册表、存储设备和档案系统进行方便的访问。
内置单元Registry.pas中提供了TRegistry、TRegIniFile、TRegistryIniFile三个封装类,提供了常用的注册表、配置档案操作功能。
Classes.pas单元中,由TStream派生的THandleStream、TFileStream、TMemoryStream、TStringStream、TResourceStream,提供了涵盖档案流、记忆体流、字元序列流和资源流的读写操作,可方便地对档案以及中间交换的序列化数据进行处理。而TStreamAdapter以接口形式提供了更为高级的流与流之间的相互操作。

对象编程

Delphi是基于面向对象编程的先进开发环境。面向对象的程式设计(OOP)是结构化语言的自然延伸。OOP的先进编程方法,会产生一个清晰而又容易扩展及维护的程式。一旦您为您的程式建立了一个对象,您和其他的程式设计师可以在其他的程式中使用这个对象,完全不必重新编制繁複的代码。对象的重複使用可以大大地节省开发时间,切实地提高您和其他人的工作效率。
什幺是对象
一个对象是一个数据类型。对象就象记录一样,是一种数据结构。按最简单的理解,可以将对象理解成一个记录。但实际上,对象是一种定义不确切的术语,它常用来定义抽象的事务,是构成应用程式的项目,其内涵远比记录要丰富。在本书中,对象可被理解为可视化部件如按钮、标籤、表等。了解对象,最关键的是掌握对象的特性。一个对象,其最突出的特徵有三个:封装性、继承性、多态性。
对象的封装性
对对象最基本的理解是把数据和代码组合在同一个结构中,这就是对象的封装特性。将对象的数据域封闭在对象的内部,使得外部程式必需而且只能使用正确的方法才能对要读写的数据域进行访问。封装性意味着数据和代码一起出现在同一结构中,如果需要的话,可以在数据周围砌上“围墙”,只有用对象类的方法才能在“围墙”上打开缺口。
对象的继承性
继承性的含义直接而且显然。它是指把一个新的对象定义成为已存在对象的后代;新对象继承了旧类的一切东西。在往新对象中添加任何新内容以前,父类的每一个栏位和方法都已存在于子类中,父类是创建子类的基石。
对象的多态性
多态性是在对象体系中把构想和实现分开的手段。如果说继承性是系统的布局手段,多态性就是其功能实现的方法。多态性意味着某种概括的动作可以由特定的方式来实现,这取决于执行该动作的对象。多态性允许以类似的方式处理类体系中类似的对象。根据特定的任务,一个应用程式被分解成许多对象,多态性把高级设计处理的构想如新对象的创建、对象在萤幕上的重显、程式运行的其它抽象描述等,留给知道该如何完美的处理它们的对象去实现。
对象範围
一个对象的範围决定了它的数据域、属性值、方法的活动範围和访问範围。在一个对象的说明部分说明的数据域、属性值、方法都只是在这个对象的範围中,而且只有这个对象和它的后代才能拥有它们。虽然这些方法的实际程式代码可能是在这个对象之外的程式库单元中,但这些方法仍然在这个对象的範围内,因为它们是在这个对象的说明部分中说明的。
当您在一个对象的事件处理过程中编写程式代码来访问这个对象的属性值、方法或域时,您不需要在这些标识符之前加上这个对象变数的名称。例如,如果您在一个新窗体上加入一个按钮和一个编辑框,并为这个按钮编写OnClick事件处理过程:
procedureTForm1.Button1Click(Sender:Tobject);
begin
Color:=clFuchsia;
Edit1.Color:=clLime;
end;
其中的第一行语句是为整个窗体Form1着色。可以编写如下:
Form1.Color:=clFuchsia;
如果Edit1是在其他窗体中,那幺您需要在编辑框之前加上这个窗体对象的名称了。例如,如果Edit1是在Form2之中,那它是Form2说明的一个数据域,并位于Form2的範围中,那幺您需要将第二句改为:
Form2.Edit1.Color:=clLime;
而且需要把Unit2加入Unit1的uses子句中。

数据继承

前面的TForm1类型是很简单的,因为它只含有域Button1和方法Button1Click。但是在这个窗体上,您可以改变窗体的大小、加入或删除窗体的最大最小化按钮,或设定这个窗体为MDI界面。对于一个只包含一个域和方法的对象来讲,您并没有看到显式的支持程式。在窗体上单击滑鼠或用ObjectInspector的上端的ObjectSelector选中Form1对象,按动F1查阅它的线上帮助,您会在Properties和Method中找到它的继承到的全部属性和方法。这些是在TForm类型中说明的,TForm1是TForm的子类,直接继承了它所有的域、方法、属性和事件。例如窗体的颜色属性Color就是在TForm中说明的。当您在工程中加入一个新窗体时,就等于加入了一个基本模型。通过不断地在窗体中加入部件,您就自行定义了一个新的窗体。要自定义任何对象,您都将从已经存在的对象中继承域和方法,建立一个该种对象的子类。例如对象TForm1就被说明为对象TForm的子类,拥有一个窗体部件的基本属性或方法。只有当您在窗体中加入了部件或编写了事件处理过程时,Form1才成为您自己的类型。
一个比较特殊的对象是从一个範围较广或较一般的对象中继承下来的,它是这个特别对象的祖先,这个对象则称为祖先的后代。一个对象只能有一个直接的祖先,但是它可以有许多后代。TForm是TForm1类型的祖先,所有的窗体对象都是TForm的后代。
用F1查阅窗体的线上帮助时,您会发现TForm被称为component(部件)。这是因为所有的部件都是对象。
在这个结构中所有的部件都是对象。部件类型TComponent从TObject类型中继承数据和程式代码,并具有额外的可以用作特殊用途的属性、方法、事件,所以部件可以直接和用户打交道,记录它的状态并存贮到档案中等等。控制类型TControl从TComponent中继承而来,又增加了新的功能,如它可以显示一个对象。在上图中,虽然TCheckBox不是直接由TObject继承来的,但是它仍然有任何对象所拥有的属性,因为在VCL结构中,TCheckBox终究还是从TObject中继承了所有功能的特殊对象,但它还有些自行定义的独到的功能,如可以选择记录状态等。

临时表

根据伺服器上的DB资料库,在本地创建一个临时的表,这样可以提高用户对数据的访问效率,同时也减轻了资料库的访问压力。
创建临时表*.DB
procedure TfUserInfo.createWork;
begin
with tblUserInfo do //页面上的Table控制项名字
begin
Active := False;
DatabaseName := 'Userwork';
TableName := 'W_USERINFO.DB'; //要创建的临时表的名字
TableType := ttParadox;
with FieldDefs do //遍历页面(数据为DB Table)中的列,作为临时表的列
begin
Clear;
Add('UserID' , ftString, 6, False); //设定临时表的列、类型、长度
Add('UserName' , ftString, 20, False);
end;
CreateTable; //创建临时表
end;
tblUserInfo.Close;
tblUserInfo.Open;
while not dbUserMSSQL.ADOQueryUser.Eof do //为临时表填充数据
begin
tblUserInfo.Append;
tblUserInfo.FieldByName('UserID').AsString :=
dbUserMSSQL.ADOQueryUser.FieldByName('UserID').AsString;
tblUserInfo.FieldByName('UserName').AsString :=
dbUserMSSQL.ADOQueryUser.FieldByName('UserName').AsString;
tblUserInfo.Post;
dbUserMSSQL.ADOQueryUser.Next;
end;
tblUserInfo.First;
end;

标 签

搜索
随机推荐

Powered By 种豆资源网||