Delphi开发基础知识讲解_第1页
Delphi开发基础知识讲解_第2页
Delphi开发基础知识讲解_第3页
Delphi开发基础知识讲解_第4页
Delphi开发基础知识讲解_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TOT培训课程2014年3月7

日Delphi编程(IDE)与工具Delphi开发工具介绍Delphi简介

1、Delphi:特尔斐--古希腊城市,是世界闻名的著名古迹,

古希腊人认为:特尔斐是地球的中心,是“地球的肚脐”。2、Delphi,是Windows平台下著名的快速应用程序开发工具 (RapidApplicationDevelopment,简称RAD)。Delphi发展史

1、Hejlsberg丹麦为MS-DOS和CP/M设计了一个Pascal编译器。

2、美国Borland(宝兰)公司于1995年开发TurboPascal。3、20049.0正式名称:Delphi2005。

4、20088.25Embarcadero发布CodeGearDelphi2009Pre-release。

5、2010.8.30Embarcadero发布DelphiXE。课程模块目标经过本课程模块的培训,学员能够熟悉Delphi集成开发环境掌握IDE相关设置使用Delphi编写和调试应用程序不可能一下完全掌握所有内容,需要在以后工作中提高自己的应用能力单元1:DELPHIIDE环境单元目标本单元结束后,你将能够熟悉Delphi各界面功能掌握IDE界面的相关设置结合实际应用的需要对IDE进行个性化定制1.1什么是IDE(Integrated

Development

Environment)

IDE就是“集成开发环境”IDE的历史Borland的Turbo系列开先河集成开发环境高效代码编写支撑环境对RAD的支撑集成软件工程思想,开发平台sun、microsoft、ibm、borland等等的ide都有…1.2DELPHIIDE界面的熟悉使用新软的路子(认识人的过程)望:遍历所有的菜单、界面闻:具体功能在IDE上的体现、挂接问:实在不知到的,看帮助切:自己动手,捣鼓捣鼓动手(编码)实践很重要…1.3IDE常用快捷键IDE常用快捷键代码浏览:ctrl+mouse、ctrl+enter定义、实现切换:ctrl+shift+上下键视图切换:F12运行、调试的快捷键:F9、F8(单步)、F7(跟踪)…据说大虾们都是只用键盘…1.3IDE常用快捷键IDE常用快捷键类自动生成:ctrl+shift+c单元引用快捷键:alt+shift+u代码即时提示(输入法冲突问题):ctrl+space快速移动光标,删除行,注释行其他:如TodoList、自动生成GUID、项目管理器等等

TodoList:任务列表GUID:

一种由算法生成的二进制长度为128位的数字标识符。

1.4

IDE编辑器设置一些常用的编辑器设置使用DeskTop:存储用户对IDE的个性设置;支持后悔:Undoaftersave个性化的:ColorKeyMapping:热键1.5

IDE环境设置需要重点关注LibraryBPL(BorlandPackageLibraries)(dll)DCP(DelphiCompiledPackage)1.6项目的属性设置每个项目有自己的相关配置生成文件的输出路径(dcu/bpl/dcp/exe/…)项目的条件编译带包编译编译器优化、调试(如输出调试信息,供AQTime等使用)版本信息(特别是build号),发版的识别注意:这些属性保存在当前工程项目文件中相关文件中(配置文件)1.7小结个性化自己的IDE界面软件是用出来的!Gogogo…提示:想快速启动Delphi?使用/ns、/np等…1.8亲自动手初步搞定自己的IDE设置进入delphi

IDE的主界面:(望)1.8亲自动手点击“NewProject”界面:(闻)1.8亲自动手点击“Help”界面:(问)1.8亲自动手点击“OpenProject”界面:(切)单元2:DELPHI开发环境单元目标本单元结束后,你将能够掌握IDE控件的安装了解IDE常用插件/专家的使用根据个人需要配置IDE的控件、插件/专家2.1控件安装IDE内在的机制,支持更加丰富的RAD开发第三方控件toolbar2000+tbx/…Toolbar2000是一套给BorlandDelphi及C++Builder专用的编程组件,可以用来仿制Office2000的菜单及工具条,支持Delphi4.0-7.0版及C++Builder4.0-6.0版。

TBX

基于

ISO

术语数据表示的

XML

标准,采用

TBX

,用户可以很方便的在不同格式的术语库之间交换术语库数据。公司相关控件GrandResource/GSP/GRP/…2.1控件安装DELPHI通过注册表保存相关的设置(regedit)第一次安装并成功运行后,备份:HKEY_LOCAL_MACHINE\SOFTWARE\BorlandHKEY_CURRENT_USER\Software\Borland注册表几个关键键控件包、专家包老生常谈:注册表操作要非常小心2.2按需加载控件为什么要按需加载控件八辈子用不着的控件降低IDE内存的占用提高IDE的稳定性如何要按需加载控件了解你的需求Component->InstallPackages直接注册表2.2按需加载控件小提示:不常用的控件ActionBar:动作条ControlPanel:控制面板BDE、InterBase、DBX、SQLExplorerUIDataSnap、WebSnapTeeChart等等如何保存我们个性化的设置?快速设置?2.3IDE的插件/专家插件/专家:IDE的扩展(eclipse、vs等)快速查找/编写/理解代码功能性支撑(如重构:项目重构&代码重构)其他功能的扩展2.3IDE的插件/专家Gexpert(DelphiIDE辅助免费工具)开源、OTA范例(OpenToolsAPI)ModelMakerCodeExplorer吐血推荐的refactor工具重构:Delphi程序员的日常工作,MMX可以大大提高效率/code-explorer/download.html公欲善其事,必先利其器2.3IDE的插件/专家GExpertsModelMakerCodeExplorer(MMX)2.3.1GExpertsGExpertsisafreesetoftoolsbuilttoincreasetheproductivityofDelphiandC++BuilderprogrammersbyaddingseveralfeaturestotheIDE.2.3.1GExperts查找类搜索、替换编辑菜单添加注释空间批量替换文本排序清除目录查看PE结构……2.3.2MMX取代IDE原有的CodeExplorer代码浏览器类、方法、属性编辑器代码重构实时的文档提示……2.3.3其他CnWizards开源,功能齐全Castalia调试利器(只要是通过发消息,记录状态等)2.5亲自动手安装OutLook控件单元3:DELPHI应用程序框架单元目标理解DELPHI应用程序框架掌握DELPHI开发的一般步骤使用DELPHI进行应用程序的编写学会简单的调试新建一个单文档应用程序3.1第一个应用程序运行如下3.1第一个应用程序3.1第一个应用程序文件类型dpr:项目文件dfm:窗体文件dps:单元文件dcu:中间文件res:资源文件cfg:配置文件……这么多的项目文件,都需要么?drc、dsk、map不需要掌握3.1第一个应用程序IDE多项目管理功能项目添加设置启动项目3.1第一个应用程序IDE多项目管理功能依赖关系管理3.1第一个应用程序建议:良好的文件结构独立一个目录:Bin、Source……3.2单元内容单元结构unitinterfaceusestypeimplementationinitialization(不一定有)finalization(不一定有)3.2单元内容引用规则uses和dpr、searchpath解决单元循环引用定义全局变量3.3应用程序框架初步Application全局变量应用程序的骨架(VCL)通过VCL框架封装传统的Win32消息派发机制Application的秘密(不可见窗体)3.3应用程序框架初步Application的一些重要属性/方法CreateFormExeName获取当前执行程序的名字ProcessMessagesVCL偷偷摸摸的在后台都干了什么?源码的幸福:ctrl+mouse通过debug追踪3.4应用程序调试方法断点增加删除断点条件断点运行到光标位置跟踪:F7单步:F8、shift+F8WatchListCallStack谢谢前言大而全会用,知道,不深究基础语法----注释花括号注解圆括号/星号注解C++风格的双斜杠注解{Copyright(c)1994-2004GrandSoftCorporation

}(*Privatedeclarations*)//Admin帐号

基础语法----变量先声明,后使用大小写不敏感可以对全局变量赋初值例如:varValue:Integer=10;Correct:Boolean=True;这种初始化方法只能用于全程变量,不能用于过程或方法的变量。

基础语法----常量定义常量不用指定类型,但也允许指定

声明常量不必特定数据类型,但需要赋一个初值。编译器会根据所赋初值自动选用合适的数据类型。不指定类型constThousand=1000;Pi=3.14;指定类型constThousand:Integer=1000;基础语法----运算符

赋值运算符比较运算符逻辑表达式算术运算符按位运算符加减运算过程:==><<>>=<=andornot+-*/divmodandornotxorshlshrInc()dec()加减运算过程inc自增函数1.inc(i,n);//i,n:integer;n为自增量相当于i:=i+n;2.inc(i);//i:integer;相当于i:=i+1;-----------------------------------------------dec自减函数1.dec(i,n);//i,n:integer;n为自减量相当于i:=i-n;2.dec(i);//i:integer;相当于i:=i-1;

基础语法----数据类型Delphi中的基本数据类型包括整型、实型、字符型、布尔型、枚举型和子界型字符基础语法----数据类型整型类型

基础语法----数据类型实型基础语法----数据类型布尔型枚举类型枚举类型1.枚举类型是一种自定义有序类型,在枚举类型中,列出所有该类型可能取的值,而不是指定现有类型的范围。例如:TypeColors=(Red,Yellow,Green,Blue);序列中的每个值都对应一个序号,序号从0开始计数子界类型子界类型1.子界类型定义了某种类型的取值范围;2.必须是一种有序类型;例子:typeNum=1..10;Varn:Num;如果定义一个子界变量,那么赋给该变量的值必须是子界范围内的值例如:n:=11;//error基础语法----RecordrecordTPoint=recordX:integer;Y:integer;end通过.来访问他的域我在C/C++中叫Struct基础语法----数据类型变体类型(Variant类型)基础语法----数组

静态数组A:array[2..10]ofinteger数组下标不一定从0或1开始,遍历数组元素时请使用Low()和High()定义多维数组,使用逗号隔开编译期已确定其元素个数如下例:TypeMonthTemps=array[1..24]ofInteger //一维数组TypeMonthTemps=array[1..24,1..31]ofInteger //二维数组强烈建议使用Low和High操作数组,特别是在循环中,因为这样能使代码与数组范围无关,如果你改变数组下标的范围声明,Low和High代码不会受影响;a:Array[1..24]ofInteger;

Low(a)//返回数组a的第一个元素的下标High(a)//返回数组a的最后一个元素的下标基础语法----数组动态数组运行时动态分配元素个数A:arrayofintegerA2:arrayofarrayofInteger下标一般从0开始使用SetLength分配内存.只有使用SetLength为动态数组分配内存空间后才能使用动态数组生存期自管理,置为nil即回收使用Copy函数进行复制例如:

StrArr:arrayofString;SetLength(StrArr,6);基础语法开放数组面向对象Pascal有一个开放数组的概念允许向一个方法传递未指定大小的数组。function

Mean(Data:

array

of

Double):

Extended;

//Pascal调用

Result

:=

Mean([3.1,

4.4,

5.6]);

基础语法----语句if语句格式:If…thenElse…End例子:Ifa=1thenShowMessage(‘1’)//注意没有分号ElseShowMessage(‘2’);caseCase基本格式:基础语法----语句举例:Functionfun(i:Integer):Integer;BeginCaseIof1:ShowMessage(‘1’);2:ShowMessage(‘2’);ElseShowMessage(‘3’);endEnd;基础语法----语句for循环while循环repeat循环基础语法----语句for循环For<循环变量>:=<初值>{To|DownTo}<终值>Do循环体举例:求1..100的和VarI,sum:Integer;Beginsum:=0;Fori:=1to100dosum:=sum+i;End;基础语法----语句while循环While<条件>Do循环体基础语法----语句repeat循环(相当与C++中的do…while语句)Repeat循环体Until<条件>基础语法----语句Break()过程Continue()过程forin循环For变量in值stringExpr='HuangJacky';forcinstringExprdo

ShowMessage(C);With当代码很复杂时,with语句很有用,可以省去一些临时变量,但是这样做会使代码的可读性比较差。基础语法----过程与函数过程和函数每一个Objectpascal函数都有一个隐含的本地变量Result,它包含了函数的返回值给Result赋值后函数并不会结束

值参数引用参数常量参数传值与传址的区别const保护不希望被修改的参数不会被意外修改,而且对于字符串、记录参数能产生更优化的代码声明函数欲声明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward关键字:procedureHello;forward;基础语法缺省值参数缺省参数的使用规则包括:1.带缺省值的参数必须放在参数表的最后面;2.缺省值必须是常量;functionMyFun(a:Integer;b:Integer=1; c:Integer=2):Integer;

begin

Result:=a+b+c;

end;基础语法----作用域

全局—所有单元均可以访问单元内全局—在单元内的所有函数、过程均可以访问局部—函数内部可以访问老大,贡献一些美女图片吧?不给,气死你!基础语法----单元unit—单元名称与文件名称必须匹配interface—在interface与Implementation语句之间是能被其他单元所共享的信息。包括类型、常量、变量、过程、函数等implementation—包括过程、函数的实现代码,同时也可以声明不被其他单元共享的类型,常量,变量initialization—单元初始化代码,在主程序之前运行,且只运行一次finalization—单元被释放时执行循环引用了!基础语法方法的覆盖通过覆盖方法可以在不同的实现类中有不同的行为,即多态。Type

T1=class

procedureAB;Virtual;end;T2=class(T1)

procedureAB;end;基础语法方法的重载概念:重载函数就是指函数名相同,参数的个数或参数的数据类型不同的函数functionsum(n1,n2:Integer):Integer;overload;

functionsum(n1,n2,n3:Integer):Integer;overload;

基础语法重新引入方法名称有时候,需要在派生类中增加一个方法,而这个方法的名称与祖先类中的某个方法名称相同。编译时会发出警告,告诉你派生类的方法将隐藏父类的同名方法.要解决这个问题,可以在派生类中使用reintroduce指示符type

TSomeBase

=

class

procedure

Cooper;

end;

TSomeClass

=

class(TSomeBase)

procedure

Cooper;

reintroduce;

end;

基础语法----RTTI运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息as和isObjectisclass如果Object是类class的一个实例,则返回true;否则返回false;Objectisclass返回值为Object的引用,类型为class类型.基础语法----接口背景:为什么要有接口COM接口面向对象的设计(解决多继承问题)基础语法----接口Delphi接口机制介绍通用接口IUnknown有三个函数FunctionQueryInterface,_AddRef,_ReleaseQueryInterface函数返回控件是否支持接口_AddRef函数给接口指针加1_Release函数给接口指针减一,为0释放IUnknownAddRef_ReleaseQueryInterface基础语法----接口(1)接口中只有方法、属性,没有字段。所以接口中的属性存取都必须通过方法。

(2)接口中的方法只有声明,没有实现。实现在类中完。

(3)接口中的方法没有作用域。都是公开的,但是在类中则放到不同作用域。

(4)接口中的方法没有修饰字。可以认为它们都是抽象。

(5)不能创建接口实例,要使用接口,必须在类中实现,通过类调用接口的方法。

(6)在类中必须声明和实现接口的所有方法。不像类继承中可以选择。

(7)接口中的方法在类中实现时,可以加virtual/dynamic、abstract修饰,从而在子类中可以实现覆盖。基础语法----接口GUID:GUID是全局唯一标识符,是一个128位的整数!

一般用来在COM中唯一的标识一个接口.

同时由于GUID无法被任何语言支持表达,因为没有一种语言能够表达128位的数据,所以OP中使用一个叫TGUID的记录来代表GUID。TGUID格式:

{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

面向对象基础类(Class):面向对象语言的基础就是类,ObjectPascal的基础也是类。从类和对象入手介绍ObjectPascal的面向对象特性。类的定义:类是用户创建的数据类型,包括状态、表达式和一些操作。有3个组成部分,即字段、方法和属性。字段是类的内部数据变量,方法就是类中定义的函数和过程,属性是类提供给外部使用的数据变量。面向对象基础对象的定义:对象就是类的实例。对象是实体,在程序运行时将为其内部表达式开辟内存。对象的创建对象的撤销面向对象基础类的特征:封装性。类把数据和方法封装在一起,同时隐藏了实现的细节,这样有利于程序的模块化,减少被其他代码干扰的机会。继承性。一个对象能够从它的祖先那里获取已有的成员和行为。被继承的类称为基类,继承下来的类称为派生类,基类的成员自动成为派生类的成员。类的继承具有传递性。注意:ObjectPascal不支持多继承。多态性。多态性意味着某种动作可以由特定的方式来表现,具体方式取决于执行该对象的动作。面向对象基础----类的特征封装性:在ObjectPascal中,通过保留字Private、Protected、Public、Published、Automated来实现类的封装,通常称为存取控制符。Private

:私有成员不能被类以外的程序访问。Protected:Protected与Private相似,所不同的是保护成员可以被该类的所有派生类访问,并且成为派生类的私有成员。Public:字段和方法公有,外部程序可以访问。Published:公共成员可以被外部程序访问,与Public区别在于Published成员可以在设计期间和运行期间可以访问,而Public成员只能在运行期间访问。Automated:Automated声明的方法和属性将生成OLE(对象链接与嵌入)自动化操作的类型信息。面向对象基础----类的特征继承性:typeTHuman=ClassprivateID:Interger;end;typeTStudent=Class(THuman);privateStudentID:Interger;end;Tstudent类继承了Thuman类,包含了字段ID,StudentID面向对象基础函数构造和析构函数类函数虚函数抽象函数动态函数覆盖和重载消息函数面向对象基础----函数typePersonal=ClassName:String;Age:Interger;functionGetName:String;endfunctionPersonal.GetName:String;beginGetName:=Name;end;面向对象基础----函数构造函数:构造函数是用来创建和初始化新对象的,通常使用构造函数的参数进行初始化。构造函数使用保留字Constructor来定义。TypeTClass=ClassName:String;ConstructorCreate(s:String);end;ConstructorTClass.Create(s:String);beginName:=s;end;面向对象基础----函数析构函数:当不需要一个对象时,在类的实例中调用类的析构函数来删除它。析构函数的关键字destructor。destructordestroy;destructordelete;面向对象基础----函数静态函数:编译器可以确定函数的确切地址。在函数前添加class关键字。TMy=Class

ClassfunctionName(s:String):String;

end;静态函数不能在private和protected区;

静态函数不能是虚方法;

静态函数只能使用类中的、在对象实例化以前的数据;静态函数可以直接使用;静态函数不能覆盖。

面向对象基础----函数虚拟函数:使用保留字virtual将函数定义为虚拟的。编译器通过建立虚拟方法表(VMT)来查找在运行时的函数地址。TypeCMyClass=ClassfunctionMethod:String;virtual;end虚函数牺牲空间,提高效率。面向对象基础----函数动态函数:使用保留字dynamic,与虚拟函数语法相同,使用结果相同,但编译器实现的机制不同。编译器通过建立动态方法表(DMT)来查找在运行时的函数地址。TypeCMyClass=ClassfunctionMethod:String;dynamic;end动态函数牺牲效率节省空间。面向对象基础----函数抽象函数:用保留字abstract说明。类中有抽象函数时该类成为抽象类。抽象类不能创建对象。当继承抽象类时,在派生类中必须重新声明和实现抽象函数。TypeCMyClass=ClassfunctionMethod:String;virtual;abstract;endvirtual或dynamic必须在abstract之前。面向对象基础----函数覆盖:如果子类重新定义父类的函数即为覆盖,用override关键字。被覆盖的函数必须是虚拟函数或者是动态函数。TypeCMyClass=ClassprocedureMethod;virtual;end;CMySubClass=Class(CMyClass)procedureMethod;override;end面向对象基础----函数重载:在同一个类中,出现多个同名的方法的现象就是重载。有相同的方法名,不同的参数。用保留字overload关键字。Type

Ta=class

procedureMethod(a,b:Integer);overload;

procedureMethod(a,b:String);overload;

end

面向对象基础----函数Inherited关键字:在子类中可以执行父类中同名的方法。TypeThuman=Class

procedure

showinfo;virtual;

end;

TStudent=Class(Thuman)

procedure

showinfo;override;

end;endprocedure

TStudent.showinfo

;

begin

inherited;

//调用父类中的同名函数

end;

面向对象基础----属性

属性(Property):用Property

关键字被用来定义一个类的属性。Read是限定“只读”Write是限定“只写”Stored是限定布尔表达式propertyField:StringreadGetFieldwriteSetField;其中定义了一个Field属性,此属性读值是通过调用GetField来获取并返回的,此属性设置值是通过SetField来进行的。此外,Read和Write关键字可以不必同时出现。常用类,常用函数字符处理数值与字符串转换数值处理文件管理常用类,常用函数----字符串(Ansi)CompareStr、(Ansi)CompareText(Ansi)SameStr、(Ansi)SameText(Ansi)LowerCase/(Ansi)UpperCaseLength、SetLengthCopy、Delete、Insert、ConcatTrim、TrimLeft、TrimRightStringOfCharStringReplaceFormat常用类,常用函数----字符串(Ansi)SameStr、(Ansi)SameTextfunction(Ansi)SameStr(constS1,S2:string):Boolean;功能返回两个字符串是否相等说明区分大小写CheckBox1.Checked:=SameStr(Edit1.Text,Edit2.Text);(Ansi)SameText不区分大小写。

常用类,常用函数----字符串常用类,常用函数----字符串常用类,常用函数----字符串常用类,常用函数----字符串Trim(s:String):String;

功能说明:删除字符串空格

S:=Trim('Delphi');TrimLeft(s:String):String;

功能说明:删除字符串左边空格

S:=TrimLeft('Delphi');TrimRight(s:String):String;

功能说明:删除字符串右边空格

S:=TrimRight('Delphi');

常用类,常用函数----字符串StringOfChar函数:反复字符函数function

StringOfChar(c:Char;Length:Integer):

string例子:vars:string;s:=StringOfChar('G',5);//s='GGGGG';StringReplace函数:替换字符函数functionStringReplace(constS,OldPattern,NewPattern:string;Flags:TReplaceFlags):string;VaraStr:String;

begin

aStr:='Thisisabook,notapen!';

ShowMessage(StringReplace(aStr,'a','two',[]));//Thisistwobook,notapen!只替换了第一个符合的字

常用类,常用函数----数值处理常用类,常用函数----数值处理常用类数据结构支持TListTStrings/TStringListTObjectListTInterfaceList数据结构类TList指针列表,可以存储任意类的对象Capacityvs.CountAdd/Insert/Delete/Remove/ClearSort TInterfaceList接口列表,用于存储接口TInterfaceList=class(TInterfacedObject,IInterfaceList)数据结构类TStrings/TStringList字符串列表TStrings是抽象类Text/CommaText(自动分割逗号)/DelimitedText(Delimited,QuoteChar属性)Strings/ObjectsLoadFromFile/SaveToFileNames/Values(Names只读,Valus可写)数据结构类TObjectList对象列表,可以存储任意类的对象OwnsObjects(销毁删除的类,Delete,Remove无需再添加销毁)TQueue/TStackPop/Push第三章VCL和常用控件3.1可视化组件库VCL3.2窗体设计3.3常用组件3.4其他组件3.5输入与输出

3.1VCL基础

Delphi提供了丰富的组件(component,也称为构件)。这些组件都是由TComponent类派生而来,封装在可视化组件库(VCL)中。这里所说的可视化是指在窗体设计时所有组件的可视性。组件依据程序运行时是否可见而分为可视组件和非可视组件,可视组件如标签(Label)、编辑框(Edit)、按钮(Button)等;非可视组件,如计时器(Timer)、图像列表(ImageList)等。通常,使用可视组件来设计用户界面,用非可视组件来实现特殊的功能。

一、VCL的层次结构TObject(所有Delphi类的祖先)│TPersistent(持久性对象)│TComponent(组件对象)┌─────┴─────────┐非可视组件TControl(所有可视组件的祖先)┌───────┴─────┐TGraphicControl(图形类对象)TWinControl等(窗口控件)

二、VCL组件的属性、方法和事件

VCL组件的属性

VCL组件的方法

VCL组件的事件

3.2窗体设计

窗体是程序界面的框架,菜单和组件置于其上。窗体是一种对象,类名是TForm。窗体对象有属性、方法和事件。可以只设计一个窗体的界面,也可以设计多个窗体的界面,甚至可以是多文档窗体。

窗体常见事件

窗体事件是窗体可以识别的外部动作,事件可以由用户操作触发,也可以由操作系统、其他应用程序、应用程序本身触发,例如程序运行时用户单击一下窗体将触发窗体的OnClick事件。在程序源代码中添加窗体的事件,可以打开对象监视器窗口的Events选项页。从对象列表中选择窗体对象,然后双击事件名右边的空白区域,添加窗口事件程序代码。

窗体常见事件(1)OnCreate:窗体创建时触发。该事件中通常可实现程序的初始化工作。(2)OnDestroy:窗体从内存中删除时触发。该事件通常可以加入资源释放的程序代码。(3)OnShow:窗体显示时触发。当窗体的Visible属性为True时窗体被显示。(4)OnHide:窗体隐藏时触发。当窗体的Visible属性为False时,窗体被隐藏。(5)OnClose和OnCloseQuery:当关闭窗体时,先触发OnCloseQuery事件,处理程序当前的状态,然后触发OnClose事件,关闭窗口。(6)OnClick:单击一下窗体将触发该事件。(7)OnDblClick:单击窗体将触发该事件。(8)OnPaint:窗体重画时将触发该事件。三、多窗体设计1.静态创建静态创建窗体是在界面设计阶段完成的。具体方法如下:执行【File】→【New】→【Form】菜单项,添加一个新的窗体,默认名称是Form2。然后在主窗体Form1的Uses单元中加入新窗体的单元名,这样在主窗体的事件中可以调用Form2。

2.动态创建

动态创建窗体是在程序运行阶段完成的。在程序代码中调用窗体的Create方法。静态创建的子窗体在程序刚运行时就全部装人内存当中,如果一个应用程序的子窗体数目很多,将占用过多的内存资源。动态创建的子窗体,在程序刚运行时并没有装入内存中,当使用到该子窗体时才装入内存,使用完后立即将其从内存中释放,以节省内存资源。

(1)执行【File】→【New】→【Form】菜单项命令一次,添加一个新的窗体,默认名称是Form3[在已有的窗体对象名FormN(N=1,2,...)中把N值加1]。然后在主窗体Form1的uses单元中加入新窗体的单元名,这样在主窗体的事件中可以调用Form3。(2)执行【Project】→【Options】菜单项,打开“ProjectOptions”(工程选项)对话框。对话框的“Auto-createforms(自动创建窗体)”框中列出了在程序运行时加载到内存中的窗体。选择Form3,单击中间向右的箭头按钮,将其移动到“Availableforms(可用窗体)”框中。这样程序运行时,Form3窗体不会自动加载到内存。

(3)程序代码中,要使用Form3窗体时,添加如下代码:Form3:=Tform3.Create(self);//创建子窗体Form3,将Form3加载入内存Form3.Show;//显示窗体Form3(4)要从内存中释放Form3窗体时,添加如下代码:Form3.Free;//将Form3从内存中释放掉四、MDI多文档窗体

一个单文档应用程序只能打开一个文档,而一个多文档(MDI)应用程序可以同时打开不同类型的多个文档。MDI应用程序提供了一种方便的方式,使得用户在同一工作区域内可以对多个文档进行观察和交换数据。MDI窗口部分由一个主窗口(也称为父窗口)和多个子窗口组成,每个文档对应一个子窗口。子窗口位于主窗口的工作区内,激活子窗口后主窗口的菜单自动被当前子窗口的菜单所代替。在主窗口的工作区内可以对子窗口进行层叠、平铺、定位、最大化和最小化、改变大小等各种操作,若最大化子窗口,将占满MDI主窗口的全部工作区。

执行【File】→【New】→【Other】菜单项,打开NewItems(新建项目)对话框。这个对话框提供了多个向导和模板,可以生成多种不同用途的应用程序。选择“Projects”选项页,单击“MDIApplication”,然后单击“OK”按钮,生成一个多文档应用程序。系统自动为应用程序生成了三个窗体:主窗体(MainForm)、子窗体(MDIChild)、对话框(AboutBox)。

五、窗体中组件的操作

1.组件的添加2.选定组件3.改变组件的大小

4.对齐组件5.移动和删除组件6.组件的复制与粘贴

7.组件的Tab键次序设定

3.3常用组件一、Standard页上的常用组件

1.Label标签组件标签组件用于在窗体上显示文字,通常用它为其他组件加上一些标注和说明文字,以便让使用者了解那些组件的用途。特别是有些组件本身没有Caption属性,添加一个标签组件作为提示文字就很有必要。可将标签组件的焦点转移给Form上的另一个对象,方法是设置标签组件的FocusControl属性。在值段中,选用与它关联对象的对象名。然后在标签中设置热键,即在Caption属性值段中输入含有“&”的字串,紧接“&”之后的字母称为热键字母,当用户使用“Alt+热键字母”时,将焦点选中它所指向的对象。

2.Edit编辑框组件

编辑框组件常用于文本输入输出,不仅可以显示用户的字符串文本,还允许用户输入和编辑文本。在人机交互界面中,使用Edit对象最主要的目的就是接收用户信息,通常用Edit对象输入数据,如输入用户姓名、通信地址等。编辑框组件的常用事件

:①OnChange:当编辑框组件中的文本发生改变时触发此事件。②OnKeyPress:当编辑框接收到键盘字符时触发。

3.Memo多行编辑框组件

多行编辑框组件Memo与Edit组件很相像,都是提供给用户在程序中输入数据或显示文字用的对象。与编辑框组件不同的是,多行编辑框组件可以显示和编辑多行文本,而编辑框组件只能显示和编辑一行文本。多行编辑框组件的属性和方法与编辑框组件有很多相同之处,如Text、MaxLength、ReadOnly等属性。

4.Button基本按钮组件

按钮是人机交互界面最常见的一个组件,通常用于用户选取执行某项命令。Delphi提供的按钮有基本按钮、位图按钮、复选框、单选按钮、加速按钮等。基本按钮Button是最简单的一种按钮。5.Panel面板组件

Panel组件内,起分组作用。另外,Panel组件提供了优化视觉效果的属性,因此Panel组件也常作为某些组件的背景,使程序界面更协调、优美。面板组件Panel还常用于制作信息栏或状态栏。

6.CheckBox复选框组件

复选框有一小方框,旁边带有文本说明,一般具有选中和未选中两种状态,鼠标单击复选框可以在这两种状态之间切换。选中复选框时,小方框内有√标记。

复选框组件通常由多个复选框组件形成一组,在这一组中用户可同时选中多个组件,选项彼此之间是不具有“互斥性”的,不会影响其他选项的行为,适用于要进行多项选择的情况。组件可以识别OnClick事件。

7.单选按钮组件

单选按钮是旁边带有文本说明的小圆圈,具有选中和未选中两种状态。组件的Checked属性值为True时,组件处于选中状态,小圆圈的内部有黑色的小点;为False时,组件处于未选中状态,小圆圈是空心的。在一组单选按钮中,只允许一个单选按钮处于选中状态,也就是说,在同一群组中的选项彼此之间是具有“互斥性”。单选按钮适用于在多个选项中选择一项的情况。8.ListBox列表框组件

列表框中可以显示出所有可能的数据供用户选择,用户可以选择其中的一项或多项,因此用户输入数据可以不必使用键盘。列表框组件常用于选项较多的情况。9.ComboBox组合框组件

组合框组把Edit编辑框和ListBox列表框两者功能合二为一,用户可以直接输入内容,也可以单击向下的箭头后拉出一个列表框,从中选择某个列表项。在组合框中选项数据的新增、删除、移动、选取等等,也是利用Items对象的Add、Delete、Clear、Insert、Exchange、Move等方法完成。

10.ActionList行为列表组件应用程序通常要完成多项指定的任务,Delphi中可以把某项任务指定为一个“行为”。一个应用程序的所有的“行为”常常用ActionList行为列表组件进行管理。设置ActionList的Images属性,就能为ActionList指定一个图像列表(ImageList)对象。

利用“行为”列表编辑器可以添加、删除、修改“行为”。每个“行为”都是一个对象,双击某个“行为”可在该“行为”的OnExecute事件中编写相应的执行程序代码。11.MainMenu主菜单组件

菜单可分为两类:主菜单和弹出式菜单。主菜单又称下拉菜单,由MainMenu组件实现;弹出式菜单由PopupMenu组件实现。

MainMenu主菜单组件有两个常用属性:Items(添加菜单项)及Images(指定图形组件用于建立图形菜单)。

Delphi中使用MainMenu组件创建主菜单的步骤如下:(1)生成主菜单将MainMenu组件放入应用程序的某一窗体中,就在该窗体对象上建立了主菜单对象,默认的名称是MainMenu1。该窗体的Menu属性值也自动设置为MainMenu1。(2)使用菜单编辑器添加菜单项直接双击窗体上的主菜单对象打开菜单编辑器。进人菜单编辑器后,单击空菜单项。每一个菜单项都是一个MenuItem对象,都有自己的属性和方法。(3)指定菜单加速键和热键鼠标可以操作菜单,还应该允许键盘操作菜单。输入菜单项的Caption属性时,若输入“&+字母”,“&”符号后边的那个字母称为加速字母,运行时加速字母显示成下划线字母,按Alt+加速字母键就执行此菜单项。加速键必须在上层菜单项被激活后才能使用。设置菜单项的ShortCut属性:从其下拉列表中选择一热键组合,程序运行时使用这一热键组合可以直接执行菜单项。(4)编写菜单项事件代码双击菜单项,进人该菜单项的OnClick事件程序代码中,添加相应的代码,实现菜单的功能。如果应用程序窗体上有ActionList行为列表组件,可以设置菜单项的Action属性。为菜单项指定行为,同样也能实现菜单的功能。

要在菜单中加入一个分隔条,可设置菜单项的Caption属性为“-”。要在某个菜单项的前面插入一个新的菜单项,可先选择此菜单项,然后按Insert键。删除菜单项,可先选择要删除的菜单项,按Delete键。用鼠标拖动菜单项可以调整菜单项的位置。另外,Delphi系统提供菜单模板,右击菜单项,从快捷菜单中选择从模板插入(InsertFromTemplate)可以将菜单模板加入到菜单项。12.PopupMenu弹出式菜单组件

PopupMenu组件用来制作弹出式菜单,即在窗口的某个位置右击鼠标,便会在该位置上出现一个菜单——弹出式菜单。

一个窗体中,弹出式菜单可以有多个,使用时在某个组件(如Panel)的PopupMenu属性指定弹出式菜单的名称,运行时右击这个组件,就可以打开设定的弹出式菜单。不同的组件可指定不同的弹出式菜单,也可指定同一个弹出式菜单。

弹出式菜单制作过程与主菜单基本相同,所不同的是可以设置弹出式菜单的位置。PopupMenu的属性Alignment用于设置弹出式菜单的位置,其取值说明如下:paCenter:菜单弹出时顶部中点位于鼠标右击点上paLeft:菜单弹出时左上角位于鼠标右击点上paRight:菜单弹出时右上角点位于鼠标右击点上二.Additional页上的常用组件

1.BitBtn位图按钮组件位图按钮与基本按钮的作用相同。基本按钮上只能显示文字,而位图按钮上不仅可以显示文字,还可以显示位图,使界面更加美观。

2.SpeedButton加速按钮组件

加速按钮上也可以显示图形和文字,用法与位图按钮非常相似。其他的按钮如普通按钮、位图按钮在按下后立即弹起,而加速按钮可以在按下后仍保持按下的状态。通常多个加速按钮形成一组,在这一组中只能有一个按钮处于按下状态。因此,加速按钮多用于生成工具栏按钮。

三、Win32页上的常用组件

1.ImageList图形列表组件

ImageLlist组件用于管理一组(icons)图标或(bitmaps)位图。同一个ImageList组件中的图形大小相同,默认大小为16╳16像素,因此这些图形适合于作图标。如果ImageList组件中有n个图形,则每个图形都编一个号,编号从0到n-1,通过编号可以访问对应的图形。

2.ToolBar工具栏组件

工具栏把常用的菜单项对应成按钮,并把多个按钮以列表的形式排列成行,用户单击工具栏某个按钮就执行该菜单项的功能,不要到菜单中去找相应的菜单项。工具栏中可以添加按钮(Button)、图形按钮(BitBtn)、加速按钮(SpeedButton)、组合框(ComboBox)、编辑框(Edit)等。工具栏可以放在标题栏或菜单的下面,也可以放在窗口工作区的下面或左边。

3.ProgressBar进度条组件

进度条组件用来指示一项任务的执行进度,随着任务的进行,在进度条的矩形区域内从左向右填充上小方块,当方块充满整个矩形区域时,表示任务的完成。

4.StatusBar状态栏组件

状态栏一般位于窗体的底部,用于显示当前状态信息。

状态栏组件初始是个空白的状态栏,常常要在状态栏上添加多个状态面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论