DelphiVCL控件介绍目的•了解VCL框架•掌握VCL的学习方法•掌握常用控件的使用主要内容•VCL介绍•消息处理机制•VCL基础对象•VCL控件介绍What•VisualComponentLibrary(VCL)可视组件库•Win32平台下一套供BorlandDelphi使用的Framework•主要作者•ChuckJazdzewski•曾经的Borland首席科学家•Framework,组件架构设计/实现•AndersHejlsberg•C#之父•主要负责编译器,ObjectPascal程序语言,产品架构Why•工作的需要•Delphi编程的基础•公司大部分重要产品均使用delphi•智慧与技巧的结晶•Pascal语言及语法•面向对象•各种设计模式•软件架构•。。。vison•工具•使用它,理解它,超越它•勿在浮沙筑高台•框架•VCL要解决的问题•VCL的整体框架设计•VCL的几种机制介绍•实现•具体类实现•常用控件介绍要解决的问题•传统窗口应用程序的开发•开发效率低•门槛高,必须非常了解底层细节•没有面向对象•各种重复,类似代码•WindowsFramework的价值•大幅提高开发效率•封装了复杂的WindowsAPI,掩盖底层细节•傻瓜式,高效的Property-Event-Method•面向对象的特性•Key•君子生非异也,善假于物也框架相关•VCL框架•继承结构•PME•消息机制VCL框架InterfaceProgramingComarchitectureRemotingarchitectureVCLDesignPattern(设计模式)VCLTypingSystem(RTTI通过运行时类型识别)ObjectPersistence(对象持久化服务)VCLMessagingVCLNotificationBasicVCLComponentArchitectureWindowMessagingWindowSDK继承结构面向对象API封装PME•RAD•RapidApplicationDevelop•PME•组件,可拖拽•Proper:设定属性•Event:外在事件的响应•Method:默认行为外的行为开发效率消息处理机制•设计重点•封装窗口消息•简洁有效的消息处理机制•Key•该部分内容比较复杂,这次只简要介绍•Application的建立到形成消息循环的过程•窗口回调函数的消息处理封装效果•传统的Win32程序•对每一个控件•消息循环&分发•不同的消息处理:WndProc•默认消息处理:DefWindowProc•VCL框架•这些都不用自己处理精简代码隐藏细节消息循环的建立step1消息循环的建立step2消息循环窗口回调函数小结•VCL框架介绍•What&why•要解决的问题•继承结构•PME•消息机制练习•练习以小组为单位提交•代码阅读•目标函数:TWinControl.WndProc•要求:给出相关消息及处理的注释,不超过2页word•仿照窗口回调函数调试分析•目标控件:TEdit:OnKeyPress•要求•绘制出从按键到自定义函数被执行过程中消息处理的流程图•调试计划•作业格式:关键函数or代码or框图+注释•内容要求:思路清晰,内容明确,不超过2页word休息5分钟实现部分•具体类实现•基础对象介绍•VMT概念•常用控件介绍•基本原则•常用控件介绍VCL基础对象TObjectTPersistentTComponentTControlTGraphicControlTWinControlTObject•它是VCL中所有类的祖先,只提供最基础服务•对象创建和释放服务•对象信息服务•对象识别服务•对象消息分派服务TPersistent(对象持久化服务)•作用•提供对象之间相互赋值:assign•读写流的能力:dfm•概念:深拷贝与浅拷贝•区别:obj2:=obj1;obj2.Assign(obj1)ob1obj2对象实例2TComponent•基础组件服务(组件管理)•容器•组件互动通知:notifycation•重要属性•Owner:负责释放•Components:容器•练习:阅读代码,理解容器的管理方式TControlTControl•重要的界面属性•Align:对齐•Anchors:锚固•Caption•Color•PopupMenu•Font•Visible(对应方法:Show/Hide)•练习:按钮控件的所有属性含义TWinControl(封装Win32控件)•特点•封装了windows窗口创建和消息•拥有Handle(占用Windows资源,用了要还)•可作为其他控件的可视容器(成为其他控件的Parent,注意与Owner的区别)•核心服务:处理Windows消息•ProcedureWndProc(varMessage:TMessage);override;•DefaultHandler(varMessage);override;TGraphicControl•特点•没有Handle,没有输入焦点•不可作为其他控件的可视容器•提供Canvas,控件表面用Tcanvas的方法绘制对象的创建、释放•VCL中对象是需要显式创建和释放的•原则:自己创建、自己释放•创建:o:=TXXXX.Create;•释放:o.Free;FreeAndNil(o);•常用法:对象的创建、释放构造和析构函数:析构时注意:注意:TObjectList:OwnerObject为True,它掌管加入的对象生命周期接口:通过引用计数控制对象是否释放VMT表•说明•对于许多面向对象程序语言来说,VMT是一项非常重要的数据结构•不同的Delphi版本实现会有差异•Self的指向•VMT表格内容•如下图VMT表虚拟方法指针VMT表•虚拟方法在VMT中的存储VMT表•动态方法在VMT中的存储VMT表•动态方法•VCL中使用了大量的动态方法,如图:TControl类•动态方法在VMT中的存储•如前图•动态方法与虚拟方法的区别微观•具体类实现•基础对象介绍•VMT概念•常用控件介绍•基本原则•常用控件介绍基本原则•20\80原则•20%的控件可以解决80%的问题•以下区域内的控件你可能天天打交道Standard、Win32等等•怎样学习VCL类与控件用法•帮助文档,Demo,互联网•VCL源代码•融会贯通、任意扩展•一样通,样样通•组合,继承•自定义常用控件•Standard•菜单控件(TPopMenu、TMainMenu)•容器控件(TFrame、TPanel)•TEdit、TListBox、TButton、TComboBox•TActionlist•Win32•TPageControl,TListView,TTreeView•DbGo数据引擎•TADOConnection•TADODataSet•Additional•TSplitter其它•TBX•TRichTreeView小结•具体类实现•基础对象介绍•VMT概念•常用控件介绍•基本原则•常用控件介绍作业•目的:掌握常用控件的使用•内容:写一个人员信息管理工具,具体要求见程序要求•必须完成模块:两种模式查看数据•可选完成模块:编辑及保存(参考程序有点小bug)•代码评价参考(包含但不限于)以下方面:•1、功能实现程度(没有报错)•2、面向对象•3、代码规范•4、界面美观How•Step1•熟练掌握Pascal语言•学习方法:今天的课程,搜索,论坛,读书,练习•Step2•实践VCL各种控件•阅读调试VCL相关代码•Step3•VCL要解决的问题•VCL的框架及设计思想•一本好书