首页 Delphi_培训(一)基础知识

Delphi_培训(一)基础知识

举报
开通vip

Delphi_培训(一)基础知识nullDelphi 基础知识Delphi 基础知识Delphi 培训(一)你能学到什么……你能学到什么……能够使用Delphi进行简单的开发和程序调试 掌握一种新的计算机“外语”:OOP语法 了解VCL及其框架,学习一些系统架构设计的知识 掌握一些新的编程思想、观念,开拓一下视野 学习一些编程技巧和程序调试技巧主要内容主要内容Delphi的故事 Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……更多(待定)……更多(待定)……组件开发 W...

Delphi_培训(一)基础知识
nullDelphi 基础知识Delphi 基础知识Delphi 培训(一)你能学到什么……你能学到什么……能够使用Delphi进行简单的开发和程序调试 掌握一种新的计算机“外语”:OOP语法 了解VCL及其框架,学习一些系统架构设计的知识 掌握一些新的编程思想、观念,开拓一下视野 学习一些编程技巧和程序调试技巧主要内容主要内容Delphi的 故事 滥竽充数故事班主任管理故事5分钟二年级语文看图讲故事传统美德小故事50字120个国学经典故事ppt Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……更多(待定)……更多(待定)……组件开发 Windows API DLL 文件处理 网络编程(Socket、TCP/IP) 消息和线程及多CPU下的编程 RPC和进程通信 内核对象等 ……Long long agoLong long ago很久很久以前,有两个绝顶高手叫做Borland和Micro-Soft…… 天才安德尔森的故事(盖茨不是最优秀的程序员)…… 市场最大的不一定是最优秀的…… 物以稀为贵,跟风不一定对……Delphi的身世Delphi的身世常见的对Delphi误解常见的对Delphi误解编写的程序很大…… 运行效率很低…… 不能跨平台…… 不能编写底层的东西…… 第三方包、组件缺乏…… C/C++写的程序质量高…… Delphi的文档差:其实是因为Delphi不需要提供OS的SDK,API SDK文档…… Delphi只能编写小的软件,不能编写大型软件Pascal是最优美的编程语言,简洁而又高效 请参考文章:Delphi vs vc++,请Google之用Delphi开发的软件……用Delphi开发的软件……OS:MAC OS(麦金托什)早期版本 办公:WPS Office…… 开发:Delphi、Protel 游戏:传奇…… 网络:Foxmail、FlashFXP 财务:管家婆,用友9 工具:Total Commander、金山毒霸、Windows优化大师 欧洲航天局的罗赛塔慧星探测器的控制软件也是用Delphi写 ……为什么要用Delphi?为什么要用Delphi?开发效率极高 开发简单,容易上手,很容易学会 丰富的第三方控件库 集成开发和调试非常方便 开发的是原生32位程序,可执行机器码 史上最强编译器:DCC32…… ……Delphi的最大缺点Delphi的最大缺点太容易上手,门槛太低…… 只会摆弄控件,浮在上层,沉不下去 是个人就号称精通Delphi……主要内容主要内容Delphi的故事 Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……大杀器——Delphi的IDE大杀器——Delphi的IDE请问:对一个开发工具最关注的两点是什么? 最好用的界面设计工具:所见即所得的窗体,拖拉式,属性编辑 最优秀的Code编辑器:代码切换、跳转、自动代码完成…… 最好用的集成调试环境:所见即所得,现场查看……null现有控件列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 选定控件的属性控件面板 相当于画板工具相当于VS的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 资源管理器null现有类及其方法属性列表 Code Explorer现有工程中的文件列表 File Explorer Project Explorer效率之源——代码编辑器效率之源——代码编辑器代码浏览:Ctrl+点击,书签(Ctrl+0~9),Alt+←,→ Code Insight:代码补全,自动完成,参数提示:Ctrl + Space,Inside Tips 语法高亮 Keymapping:兼容其他IDE的快捷键设定,如VS、Eclipse等,允许自定义 多显示器支持 扩展工具:CnPack、MMX、DelFor,强烈推荐国产CnPack杀虫能手——Debugger杀虫能手——Debugger秒杀臭虫秒杀臭虫单步调试:F7/F8 F4:运行到当前光标所在代码行然后断点 F5、F9,Ctrl+F2 Ctrl+F7,打开临时修改变量值 Assert Int 3,条件断点,地址断点,数据断点等主要内容主要内容Delphi的故事 Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……Delphi的主要文件组成Delphi的主要文件组成源代码级:工程文件、源代码文件、窗体文件、资源及其脚本等 输出文件:Dcu、bpl、~备份、dof、Exe等Delphi的程序框架Delphi的程序框架123工程文件dpr 入口窗体文件dfm/pasnull单元头单元名/文件名Delphi单元文件框架编译指令Interface到Implementation中的部分相当于.h中的内容nullProject OptionsProject Options我该从那里开始下手?我该从那里开始下手?New一个Application 查看文件结构、代码结构 编写Hello World并理解程序运行机制 使用简单的调试功能 New一个Console 学会编写简单的示例程序 看书 看Delphi的源代码……我怎样才能学好Delphi?我怎样才能学好Delphi?请给自己一年时间,看完以下书籍: 《Delphi x从入门到精通》,Marco Cantu,电子工业出版社 《Delphi x开发人员指南》,Steve Teixeira和Xavier Pacheco,机械工业出版社 泡论坛: 大富翁,CSDN 其他资料 《PASCAL精要》、《Insided VCL》、《Delphi源代码分析》、《Windows核心编程》、《Windows网络编程》主要内容主要内容Delphi的故事 Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……OO的故事OO的故事软件开发技术的演变和发展 面向对象(Object-Oriented)的由来 请问OO有什么特点?面向对象的误解 面向对象的误解 滥用:OP是有代价的,建议:中小型项目可以采用传统方式来做,大型项目用OO来做 理解不够 面向对象编程不是把你的代码用OO编译器进行编译就可以了 C++的害人之处;JAVA的贡献,JAVA是一个纯面向对象的语言 语言不重要,重要的是思想,面向对象不是一种编程技术,而是一种编程思想 不是使用组件,使用类就表明你掌握了面向对象 对于面向对象编程的程序员,我们可以分成两大类:类的设计创建者和类的使用者 Delphi开发DOS程序不是面向对象的,开发的Windows程序就是OO的 关于编程语言 判断一个语言是不是支持面向对象的语言,可以从面向对象的三大特点来判断 VC和Delphi是支持OO的语言,VB不是 Delphi的伟大之处在于让一个不懂OO的人也能进行OO方式的编程OOP对OO的支持OOP对OO的支持通过属性(Property)和方法(Method)实现封装 通过Override实现继承,Delphi只能支持单根继承,不支持多重继承 多层继承可以通过接口实现 Delphi通过虚方法(Virtual,VMT)和动态方法(Dynamic, DMT)实现多态 通过动态联编(多态)和滞后联编(虚函数)实现编译支持VMT和DMTVMT和DMTVMT:虚拟方法表 体积庞大,占用内存大,效率高 DMT:动态方法表 体积小,内存消耗低,但效率差 一般情况下,几乎每个子类都要覆盖的函数/方法,就将它声明为 virtual;如果类层次很深,或子类很多,但某个函数/方法只被很少的子类覆盖,就将它声明为 dynamic Delphi大部分采用Virtual,极少Dynamic。OOP的基本概念OOP的基本概念类(Class) 类是对对象的抽象描述,把一个对象用语言描述出来就是一个类 类的实例(Instance) 类的实例也称为对象(Object)。类是一个数据类型,那么类的实例就是这个数据类型的变量,一个类可以有多个对象 类的实例化:类声明之后,必须创建才能使用,创建类的实例就是类的实例化,每一个类都应该有构造函数和析够函数 Delphi不会自动调用构造函数和析构函数 在Delphi中创建一个对象需要传递一个Owner参数,如果这个参数不为Nil,那么你可以不关心资源的释放,否则需要调用析够函 关系 Object ------> Class ----> Instance (对象)--抽象--> (类) --变量-->(实例) 传统的面向过程和面向对象编程的区别OOP的“敏感”字OOP的“敏感”字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 inherited initialization inline interface is label library mod nil not object of or out packed procedure program property raise record repeat resourcestring set shl shr string then thread var to try type unit until uses var while with private,protected,public,publishedOOP的常量和变量OOP的常量和变量标识符 以字母、下划线开头,后面跟字母、下划线、数字 不能使用保留字和关键字作为标识符 变量的声明PascalC/C++Var Value,…: integer; int Value,…; 常量的声明PascalC/C++const Pi=3.1415926; Msg=’Pascal Program.’; #define Pi 3.1415926 #define Msg “Pascal Program.” 标识符的命名约定标识符的命名约定命名约定的意义 良好的团队合作与开发 相似的名字可以使你更容易并且更自信地猜测陌生变量的功用 可以使你更快地熟悉新项目的代码 防止一变量多名 匈牙利命名法:主要包括三个部分:基本类型、一个或更多的前缀、一个限定词 常用约定 前缀:Txxx,Fxxx,SetXxx,GetXxx,OnXxx,Pxxx,Ixxx 变量名字应该有意义,驼峰命名法,firstname就比FirstName差 控件名称缩写为前缀,例如:BtnOK预定义数据类型---数值型预定义数据类型---数值型序数类型 integer:4Byte,整数,范围-2147483648-2147483647 word:2Byte,无符号整数,范围:0~65535 Dword,Cardinal:4Byte,无符号整数,范围:0~4294967295 byte:1Byte,无符号整数,范围:0~255 shortint:1Byte,-128~127 smallint:2Byte,-32768~32767 Int64:8Byte,-2^63~2^63-1 boolean:布尔类型,True=非0,False=0 浮点类型 Real,Double:8Byte,5.0 x 10^-324 .. 1.7 x 10^308 Single:4Byte,1.5 x 10^-45 .. 3.4 x 10^38 Real48:6Byte,2.9 x 10^-39 .. 1.7 x 10^38 Extend:10Byte,3.6 x 10^-4951 .. 1.1 x 10^4932预定义数据类型(续)预定义数据类型(续)字符型 String:长字符串类型,默认字符串,长度限制:2G,注意:Delphi的字符串类型是内存自管理类型的,并且采取了引用计数技术来保证效率,字符串用单引号括起来,如:'My Program' ,从1开始 String[W]:短字符型,0 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 ,一般用在API中,Pchar用#0字符表示结束 Char:单个字符,单个字符也用单括号表示,如:'A' 特殊类型 Variant:变体类型,可以支持不同数据类型的数据类型,严格来说,变体类型违反了编程规则,另外Variant效率很低 TDateTime:日期和时间,实际上是一个Double类型,12/30/1899 12:00=0,整数表示天数,小数部分表示时间/24的值,只能表示到秒 例:t := 32978.5; t := StrToDateTime(“2010-06-28 12:00:00”)OP基础知识---运算符OP基础知识---运算符类型强制和变换类型强制和变换Delphi支持类型强制和变换,但是不推荐这样做 Var N:integer; C:char; H:boolean; …… N:=integer(‘X’);///charinteger C:=Char(N);///integerchar B:=Boolean(0);///B:=False; 相关函数: chr,ord,round,trunc,int,inttostr,strtoint,str,strpas, inttohex,floattostr 类的强制变换用as来完成:(AButton as TControl).Tag:=0 赋值强制这种类型强制,要求两种数据类型的长度要一致! var n:char; ... byte(n)=65;赋值、注释赋值、注释赋值符号 :=,相当于C/C++中的= 注释,同类型注释不可以嵌套 语句块基本语句---If基本语句---If注意多个条件的时候,要注意书写格式: 例如书本上面 if Edit1.Text=‘Saturday’ or Edit1.Text=‘Sunday’ then 应该写成 if (Edit1.Text=‘Saturday’) or (Edit1.Text=‘Sunday’) then基本语句---Case基本语句---CaseDelphiCase 序数类型 of 序数值1,...:语句1; 序数值2,...:语句2; … [else] 其它处理; end;C/C++switch(表达式){ case 值1:语句1;break; case 值2:语句2;break; … default: 其它处理;break; }Case和If都可以嵌套基本语句---循环基本语句---循环For循环中,不能改变循环控制变量的值,这一点和C/C++不同基本语句---With基本语句---With异常处理异常处理Delphi全面支持异常处理,异常主要是提供程序的健壮性,保证资源不会流失,异常处理可以嵌套 Try…except,异常捕获 格式 try ///保护代码 except ///异常处理代码 end; Try…Finally,异常保护 格式 try ///保护代码 finaly ///代码 end; Except和finally的区别:Except后面的代码在发生异常的时候才会执行,不管是否发生异常,Finaly后面的代码总是会执行程序书写风格程序书写风格必须有注释,哪怕只有一行简短的,甚至一个单词!但是注释要求合理 缩进 Delphi不区分大小写,但是写代码的时候应该注意大小写的风格 匹配,例如编写程序的时候,有块语句,必须先写好begin…end;然后再到中间添加代码,又例如,写括号,应该把()写好之后,然后到中间添加代码,Delphi6能够自动匹配() 保留字应该小写 推荐一个代码格式化工具:DelForExp自定义数据类型---枚举自定义数据类型---枚举自定义数据类型都是用type定义 枚举类型,枚举类型的元素就是标识符,枚举的好处在于可以构造自己独有的数据类型并进行数据类型检查 定义 变量声明 var ADay:Tdays; 也可以直接这样声明 var MyCard: (Club, Diamond, Heart, Spade); 枚举类型属于序数类型,例如前面的Monday的序号为0,Tuesday为1... Delphi提供一些函数,可以操作枚举类型:ord(),prec(),succ(),low(),high() 自定义数据类型--- 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 自定义数据类型---记录记录DelphiType TStudentRec=record///记录 No:ingeger; Name:string; Class:byte; End; //////////////// Type TstudentRec=packed record No:integer; Name:string; Class:byte; End; ///紧缩记录C/C++Struct TStudentRec{ int No; char* Name; char Class; }Packed record和reocord的区别:Windows的内存分配机制 ,变量分配的内存都进行“边界对齐”,一次分配4Byte的内存packed的作用packed的作用可以使用SizeOf(变量)来测试一个变量占用内存的大小 Packed速度要慢,但是占用内存少,普通记录占用内存多,但是速度要快一些自定义数据类型---子界自定义数据类型---子界子界的好处在于可以利用编译器自动进行范围检查 能定义子界数据类型的数据类型:整型,字符,逻辑,枚举Type TScore=0..100;///子界 Var Score:Tscore; ///  Score:0..100; /////// Score:=120; ////Error!自定义数据类型---静态数组自定义数据类型---静态数组静态数组DelphiType TmyArray=array[1..100] of integer; ///定义数组数据类型 var Ar:TMyArray; /// or Ar:array[1..100] of integer; Ar:array[0..4,1..20] of char; ///  Ar:array[0..4] of array[1..20] of char; ... Ar[1][3]:=’C’; /// Ar[1,3]:=’C’;C/C++ int Ar[100]; char Ar[5][20]; Ar[1][2]=‘C’;字符串可以当作字符数组进行处理,例如要访问s:string中的第二个字符,可以用下面的代码:s[2]:=‘C’;自定义数据类型---动态数组自定义数据类型---动态数组动态数组:动态分配内存var ar:array of integer; ... SetLength(ar,5); ////内存分配请求,并没有实际分配内存 for i:=Low(ar) to High(ar) do ar[i]:=0; Ar[0]:=3; ///动态数组下标从0开始自定义数据类型---集合自定义数据类型---集合集合类型最多只能有255个元素type TMyChars:set of ’A’..’D’; var s:TMyChars; s:set of ’A’..’Z’; s:set of 1..100; s:set of 1..300; ///Error! ///集合函数和运算 Include();///把一个元素包含到一个集合里面,相当于+ Exclude();///把一个元素从一个集合里面删除,相当于- ///Include和Exclude效率要高!指针指针参数传递参数传递值传递 引用传递(变参) 例子(包含返回值): function ProcName(var I:integer;const Name:string):integer; begin ///… Result:=0; //// OR ProcName:=0; end;类的定义类的定义声明格式(头、实现两个部分) 数据的封装程度有三种:私有、保护、公有,定义类的时候,也要按上面的顺序 友元?type TdemoClass=class(FatherClass)///如不指定FC,默认TObject Private ///私有部分 protected ///保护部分 public ///公共部分 procedure StaticMethod;///静态方法 procedure VirtualMethod;Virtual;///虚拟方法,多态 procedure DynamicMethod;Dynamic;///动态方法,多态 published ///发布部分,用于设计状态(Object Inspecter) end;继承继承 TA称之为TB的父类,TB称之为TA的子类,或者说TB从TA继承而来,TA也称为TB的基类,TB是TA的派生类 var B:TB; … B.Proc1; ///合法 B.Proc2; ///不合法 B.Proc3; ///合法 B.Proc4; ///不合法 多态多态多态需要在定义父类的方法的时候,用Virtual或者Dynamic关键字进行定义,在定义子类的方法的时候,用override进行修饰,否则多态功能无法正常使用,并且有一个编译警告(程序可以正常运行): Method ‘XXX’hides the virtual method of base type ‘XXX’type   TAnimal=class procedure Voice;virtual; end;   TDog=class(TAnimal) procedure Voice;override; end;var a : TAnimal; begin a := TAnimal.Create; a.Voice; a.Free; a := TDog.Create; a.Voice; a.Free; end;构造函数和析构函数、覆盖和重载构造函数和析构函数、覆盖和重载构造函数用于创建对象时调用,分配内存,初始化 析构函数用于销毁对象 覆盖和重载是用同名的方法遮盖父类的方法type TA=class public constructor Create; destructor Destroy;override; end;   TB=Class(TA) public constructor Create; destructor Destroy;override; end; constructor TA.Create; Begin inherited; ///推荐,inherited放在最前面 ShowMessage('Create A'); end; destructor TA.Destroy; begin ShowMessage('Destroy A'); inherited; ///推荐:inhertied的顺序问题 end; 变量的作用范围Unit interface Type TAClass=class private protect public end; Var … Implimetiation Procedure TAClass.Method Var Begin End; End;变量的作用范围2136定义变量的一个重要的原则是: 尽量减少变量的作用范围,少用全局变量 变量可以尽量定义成Class的Private45高手是怎样练成的?高手是怎样练成的?架构第一,算法至上 采用正统的方法手段来解决问题,而不是旁门左道 良好的代码风格,编写无Warn、Hint代码 差劲的代码,应当重新编写 存储和业务分离,业务和界面分离,降低耦合性 完美主义者,追求完美,不断改进 大道至简:不要涉及面面俱到、非常灵活的数据结构 注意代码细节:内存、资源的管理;异常处理 一个优秀的程序,不在于正常的功能处理的如何,而是在于不正常的时候处理的如何主要内容主要内容Delphi的故事 Delphi IDE介绍 Delphi程序的基本概念和框架 OOP——Object Pascal语言介绍 VCL框架 更多……主要的VCL架构主要的VCL架构VCL封装了什么东东?VCL封装了什么东东?Windows 标准控件:Edit,Combobox,Memo,RichEdit,ListView等 内核对象:文件、线程、临界区、Event等等 资源管理:TIcon, TImage,TIamgeList等 GDI和绘图对象:TPicture,TPaintBox, TGraphControl等 工具类:TList,TStringList等VCL是如何封装的?VCL是如何封装的?通过Object、TWriter/TReader、TPersistent, TFiler等实现最基础的封装,完成控件属性等数据存储和持久化 通过Windows标准API完成控件本身的创建关联 通过Message完成消息处理过程 通过CM_xxx消息完成附加功能 通过在对应消息默认处理过程中增加对事件的支持控件的使用控件的使用Owner和Parent,容器组件 控件面板的组件页面 Object Inspector和常用控件的属性、事件 在窗体中使用组件 向窗体中添加组件 删除窗体中的组件 调整组件的大小和位置(键盘、鼠标操作) 设置可视组件的TabOrder 组件的锁定与解锁 设置窗体中组件的属性 创建组件的事件处理过程,可以多个控件使用同一个处理过程 多窗口的使用和Splash窗体 常用文本控件和常用按钮控件 控件的动态创建和使用 多窗体的使用、模态(Modal)窗体、非模态(Modaless)窗体
本文档为【Delphi_培训(一)基础知识】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_687460
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2013-03-29
浏览量:67