Delphi 6开发人员指南作 者: (美)Steve Teixeira,(美)Xavier Pacheco著;龙劲松,王瑜,谢尚书译出版时间:2003丛编项: Borland/Inprise核心技术丛书内容简介 本书是讲述Delphi最经典的著作之一,作为Delphi的新版本,Delphi 6不仅能帮助程序员高效开发Windows应用程序,简化Web服务、中间软件以及后台数据库系统的合成,还是目前惟一全面支持所有主流业界标准的开发工具和提高电子商务能力的利器。本书内容丰富、条理清晰,用深入浅出的语言阐述了Delphi 6的精髓,对Delphi或即将移植到Delphi的程序员来说,具有极大的参考价值。本书最后还介绍了Delphi在Internet方面的应用。在移动商务网络编程越来越热的今天,无疑会成为程序员关注的焦点。目录译者序序言前言作者介绍第一部分 基本知识第1章 Delphi编程简介1.1 Delphi的产品家族介绍1.2 认识Delphi1.2.1 可视化开发环境的特性1.2.2 编译器速度和编译后代码执行效率1.2.3 编程语言的功能和复杂性的对立1.2.4 数据库结构的灵活性和可扩展性1.2.5 实现机制对设计和使用模式的增强1.3 历史回顾1.3.1 Delphi 11.3.2 Delphi 21.3.3 Delphi 31.3.4 Delphi 41.3.5 Delphi 51.3.6 Delphi 61.4 Delphi IDE环境1.4.1 主窗口1.4.2 主菜单1.4.3 Delphi工具栏1.4.4 组件选项板1.4.5 窗体设计器1.4.6 对象观察器1.4.7 代码编辑器1.4.8 代码浏览器1.4.9 对象层次图1.5 项目源文件概述1.6 应用程序简介1.7 事件处理机制的优势1.8 快速原型化1.9 可扩展的组件和环境1.10 必须掌握的10种IDE功能1.11 小结第2章 Object Pascal语言2.1 注释2.2 扩展过程和函数特性2.2.1 函数调用中的圆括号2.2.2 重载2.2.3 缺省参数值2.3 变量2.4 常量2.5 运算符2.5.1 赋值运算符2.5.2 比较运算符2.5.3 逻辑运算符2.5.4 数学运算符2.5.5 按位运算符2.5.6 增/减量运算2.5.7 “计算-赋值”运算符2.6 Object Pascal类型2.6.1 类型比较2.6.2 字符类型2.6.3 字符串2.6.4 变体类型2.6.5 货币类型2.7 用户自定义类型2.7.1 数组2.7.2 动态数组2.7.3 记录2.7.4 集合2.7.5 对象2.7.6 指针2.7.7 类型别名2.8 类型转换和强制类型转换2.9 字符串资源2.10 条件判断语句2.10.1 if语句2.10.2 case语句2.11 循环2.11.1 for循环2.11.2 while循环2.11.3 repeat..until循环2.11.4 Break()过程2.11.5 Continue()过程2.12 过程和函数2.13 作用域2.14 单元2.14.1 uses子句2.14.2 单元循环引用2.15 包2.15.1 使用Delphi包2.15.2 包的语法格式2.16 面向对象编程2.17 使用Delphi对象2.17.1 声明和实例化2.17.2 析构2.17.3 方法2.17.4 方法的类型2.17.5 属性2.17.6 可见区域说明符2.17.7 友元类2.17.8 对象的秘密2.17.9 TObject:所有对象的祖先2.17.10 接口2.18 结构化异常处理2.18.1 异常类2.18.2 异常执行流程2.18.3 异常的再激活2.19 运行时信息2.20 小结第3章 理解Windows消息3.1 什么是消息3.2 消息的类型3.3 Windows消息系统的工作方式3.4 Delphi的消息系统3.5 消息的处理3.5.1 消息处理:并非无约定3.5.2 为Result消息值赋值3.5.3 TApplication类型的OnMessage事件3.6 发送自己的消息3.6.1 Perform()方法3.6.2 SendMessage()和PostMessage()API函数3.7 非标准消息3.7.1 通知消息3.7.2 内部VCL消息3.7.3 用户定义消息3.8 剖析VCL的消息系统3.9 消息和事件之间的关系3.10 小结第二部分 高级技术第4章 编写可移植代码4.1 版本兼容的共性4.1.1 版本判断4.1.2 单元、组件和包4.1.3 关于IDE的讨论4.2 Delphi和Kylix兼容性4.2.1 Linux中不具备的特性4.2.2 编译器和语言特性4.2.3 平台相关特点4.3 Delphi 6的新特性4.3.1 变体变量4.3.2 枚举类型4.3.3 $IF指示符4.3.4 潜在的二进制DFM的不兼容4.4 从Delphi 5升级4.4.1 可写的类型常量4.4.2 Cardinal一元取反操作4.5 从Delphi 4升级4.5.1 RTL问题4.5.2 VCL问题4.5.3 Internet开发主题4.5.4 数据库问题4.6 从Delphi 3升级4.6.1 无符号32位整数4.6.2 64位整数4.6.3 Real类型4.7 从Delphi 2升级4.7.1 Boolean类型的改变4.7.2 ResourceString4.7.3 BTL的改变4.7.4 TCustomForm4.7.5 GetChildren()4.7.6 自动化服务器4.8 从Delphil升级4.9 小结第5章 多线程技术5.1 阐述线程5.1.1 多任务的类型5.1.2 在Delphi应用程序中使用多线程5.1.3 线程的滥用5.2 TThread对象5.2.1 TThread基础5.2.2 线程实例5.2.3 线程终止5.2.4 和VCL同步5.2.5 应用程序Demo5.2.6 优先级和调度5.2.7 线程的挂起和恢复5.2.8 线程中的计时5.3 管理多线程5.3.1 线程局部存储5.3.2 线程同步5.4 多线程应用程序范例5.4.1 用户界面5.4.2 搜索线程5.4.3 调整优先级5.5 多线程访问BDE5.6 多线程图形操作5.7 纤程5.8 小结第6章 动态链接库6.1 何谓DLL6.2 静态链接和动态链接6.3 为何要用DLL6.3.1 多个应用程序共享代码、资源和数据6.3.2 隐藏实施细节6.4 创建和使用DLL6.4.1 数美分(简单的DLL)6.4.2 通过DLL显示模式窗体6.5 通过DLL显示无模式窗体6.6 在Delphi应用程序中使用DLL6.7 显式调用DLL6.8 动态链接库的入口/出口函数6.8.1 进程和线程的初始化和结束标准函数6.8.2 DLL入口/出口示例6.9 DLL中的异常6.9.1 在16位Delphi中捕捉异常6.9.2 异常和Safecall指示符6.10 回调函数6.10.1 使用回调函数6.10.2 绘制Owner-Draw列表框6.11 通过DLL调用回调函数6.12 共享不同进程中的DLL数据6.12.1 创建共享内存的DLL6.12.2 使用共享内存的DLL6.13 从DLL中输出对象6.14 小结第三部分 数据库开发第7章 Delphi数据库体系结构7.1 数据库类型7.2 数据库体系结构7.3 连接到数据库服务器7.3.1 数据库连接概述7.3.2 建立数据库连接7.4 操作数据集7.4.1 打开及关闭数据集7.4.2 导航数据集7.4.3 管理数据集7.4.4 数据集状态7.5 操作字段7.5.1 字段值7.5.2 字段数据类型7.5.3 字段名称及号码7.5.4 管理字段数据7.5.5 操作BLOB字段7.5.6 过滤数据7.5.7 搜索数据集7.5.8 关键字查找7.5.9 使用数据模块7.5.10 查找、范围及过滤器演示7.5.11 书签7.6 小结第8章 用dbExpress进行数据库开发8.1 使用dbExpess8.1.1 单向、只读数据集8.1.2 dbExpress与BDE比较8.1.3 dbExpress支持跨平台开发8.2 dbExpress组件8.2.1 TSQLConnection8.2.2 TSQLDataset8.2.3 显示查询结果8.2.4 向后兼容组件8.2.5 TSQLMonitor8.3 设计可编辑的dbExpress应用程序8.4 部署dbExpress应用程序8.5 小结第9章 用dbGo for ADO进行数据库开发9.1 dbGo介绍9.2 Mcrosoft的统一数据访问策略概述9.3 OLE DB、ADO、ODBC概述9.4 使用dbGo for ADO9.4.1 为ODBC建立OLE DB提供者9.4.2 Access数据库9.5 dbGo for ADO组件9.5.1 TADOConnection9.5.2 建立数据库连接9.5.3 回避/替代登录提示9.5.4 TADOCommand9.5.5 TADODataset9.5.6 类似BDE的数据集组件9.6 事务处理9.7 小结第四部分 基于组件的开发第10章 组件体系:VCL和CLX10.1 关于新的CLX10.2 何谓组件10.3 组件的层次结构10.3.1 非可视组件10.3.2 可视组件10.4 组件结构10.4.1 属性10.4.2 属性的类型10.4.3 方法10.4.4 事件10.4.5 流式属性10.4.6 所有权10.4.7 父子关系10.5 可视组件的继承关系10.5.1 TPersistent类10.5.2 TPersistent方法10.5.3 TComponent类10.5.4 TControl类10.5.5 TWinControl和TWidgetControl10.5.6 TGraphicControl类10.5.7 TCustomControl类10.5.8 其他类10.6 运行期类型信息10.6.1 TypInfo.pas单元:运行类型信息的定义者10.6.2 获取类型信息10.6.3 获得方法指针的类型信息10.6.4 获取有序类型的类型信息10.6.5 通过RTTI为属性赋值10.7 小结第11章 编写VCL组件11.1 组件设计基础11.1.1 决定是否应编写组件11.1.2 编写组件的步骤11.1.3 确定祖先类11.1.4 创建组件单元11.1.5 创建属性11.1.6 创建事件11.1.7 创建自定义方法11.1.8 构造函数和析构函数11.1.9 注册组件11.1.10 测试组件11.1.11 提供组件图标11.2 组件示例11.2.1 扩展Win32组件包装器的性能11.2.2 TddgRunButton:创建属性11.3 TddgButtonEdit:一个容器组件11.3.1 设计决策11.3.2 显露属性11.3.3 显露事件11.3.4 TddgDigitalClock:创建组件事件11.3.5 把窗体添加到组件面板11.4 小结第12章 高级VCL组件构造技术12.1 伪可视组件12.1.1 扩展提示功能12.1.2 创建一个THintWindow派生类12.1.3 椭圆型窗口12.1.4 激活THintWindow派生窗口12.1.5 运用TDDGHintWindow12.2 动态组件12.2.1 滚动字幕组件12.2.2 编写组件12.2.3 在屏幕以外的位图上绘制12.2.4 描绘组件12.2.5 让组件“动起来”12.2.6 测试TddgMarquee组件12.3 编写属性编辑器12.3.1 创建一个继承的属性编辑器对象12.3.2 将属性作为文本进行编辑12.3.3 注册新的属性编辑器12.3.4 利用对话框将属性作为整体进行编辑12.4 组件编辑器12.4.1 TComponentEditor12.4.2 一个简单的组件12.4.3 一个简单的组件编辑器12.4.4 注册组件编辑器12.5 对非公开的组件数据执行流操作12.5.1 定义属性12.5.2 DefineProperty()的例子12.5.3 TddgWaveFile:DefineBinaryProperty()用法示例12.6 属性类别12.6.1 类别类12.6.2 自定义类别12.7 组件列表:TCollection和TCollectionItem12.7.1 定义TCollectionItem类:TRunBtnItem12.7.2 定义TCollection类:TRunButtons12.7.3 实现TddgLaunchPad、TRun-BtnItem和TRunButtons12.7.4 用对话框属性编辑器编辑TCollectionItem组件的列表12.8 小结第13章 CLX组件开发13.1 何谓CLX13.2 CLX的体系结构13.3 移植问题13.4 组件示例13.4.1 TddgSpinner组件13.4.2 设计期增强工具13.4.3 组件引用和图像列表13.4.4 CLX数据感知组件13.5 CLX设计编辑器13.6 包13.6.1 命名约定13.6.2 运行期包13.6.3 设计期包13.6.4 单元注册13.6.5 组件位图13.7 小结第14章 充分发挥包的作用14.1 为何要用包14.1.1 精简代码14.1.2 发布更小的应用程序--应用程序分割14.1.3 组件容器14.2 为何不用包14.3 包的类型14.4 包文件14.5 使用运行期包14.6 把包安装到Delphi IDE中14.7 创建包14.7.1 包编辑器14.7.2 包设计方案14.8 包的版本化14.9 包编译器指示符14.10 包的命名约定14.11 使用运行期(插件)包的可扩展应用程序14.12 从包中导出函数14.13 获取包的信息14.14 小结第15章 COM开发15.1 COM基础15.1.1 COM2组件对象模型15.1.2 COM、ActiveX和OLE之间的对比15.1.3 术语15.1.4 ActiveX的优势15.1.5 OLE 与OLE 2的对比15.1.6 结构化存储15.1.7 统一数据传输15.1.8 线程模式15.1.9 COM+15.2 COM与Object Pascal15.2.1 接口15.2.2 使用接口15.2.3 HResult返回类型15.3 COM对象和类工厂15.3.1 TComObject和TComObject-Factory15.3.2 in-process COM服务器15.3.3 创建in-proc COM服务器实例15.3.4 out-of-process COM服务器15.4 聚合15.5 分布式COM15.6 Automation15.6.1 IDispatch15.6.2 类型信息15.6.3 后期绑定与早期绑定的对比15.6.4 注册15.6.5 创建Automation服务器15.6.6 创建Automation控制器15.7 高级Automation技术15.7.1 Automation事件15.7.2 Automation集合15.7.3 类型库新增接口类型15.7.4 二进制数据的交换15.7.5 后台:COM的语言支持15.8 TOleContainer15.8.1 一个简单的示例程序15.8.2 一个较为复杂的示例程序15.9.4 小结第16章 Windows外壳编程16.1 托盘图标组件16.1.1 API16.1.2 处理消息16.1.3 图标及提示16.1.4 鼠标点击16.1.5 隐藏应用程序16.1.6 托盘图标应用程序示例16.2 应用程序桌面工具栏16.2.1 API16.2.2 TAppBar:AppBar的窗体16.2.3 使用TAppBar16.3 外壳链接16.3.1 获取IShellLink实例16.3.2 使用IShellLink16.3.3 创建一个外壳链接16.3.4 获取及设置链接信息16.3.5 示例程序16.4 外壳扩展16.4.1 COM对象向导16.4.2 复制钩子处理器16.4.3 环境菜单处理器16.4.4 图标处理器16.4.5 信息提示处理器16.5 小结第17章 使用Open Tools API17.1 Open Tools接口17.2 使用Open Tools API17.2.1 简单的向导17.2.2 Wizard向导17.2.3 DDG Search17.3 窗体向导17.4 小结第五部分 企业开发第18章 使用COM+/MTS开发事务程序18.1 什么是COM+18.2 使用COM的原因18.3 服务18.3.1 事务18.3.2 安全18.3.3 及时激活18.3.4 队列组件18.3.5 对象缓冲池18.3.6 事件18.4 运行期18.4.1 注册数据库(RegDB)18.4.2 配置组件18.4.3 运行环境(Contexts)18.4.4 Neutral线程18.5 创建COM+应用程序18.5.1 目标:规模18.5.2 执行环境18.5.3 有状态(Stateful)和无状态(Stateless)18.5.4 生命周期管理18.5.5 COM+应用程序的组织18.5.6 有关事务的思考18.5.7 资源18.6 Delphi中的COM+18.6.1 COM+向导18.6.2 COM+框架18.6.3 Tic-Tac-Toe:一个简单的应用程序18.6.4 调试COM+应用程序18.7 小结第19章 CORBA开发19.1 CORBA特性19.2 CORBA体系结构19.2.1 OSAgent19.2.2 接口19.3 接口定义语言19.3.1 基本类型19.3.2 用户定义类型19.3.3 别名19.3.4 枚举19.3.5 结构19.3.6 数组19.3.7 序列19.3.8 方法参数19.3.9 模块19.4 银行案例19.5 复杂数据类型19.6 Delphi、CORBA和Enterprise Java Beans(EJB)19.6.1 Delphi程序员EJB速成19.6.2 EJB是一种特殊的组件19.6.3 EJB在容器中运行19.6.4 EJB具有预定义的API19.6.5 Home(本地)接口和Remote(远程)接口19.6.6 EJB的类型19.6.7 配置JBuilder 5以开发EJB19.6.8 创建一个简单的“Hello'world” EJB19.7 CORBA和Web Services19.7.1 创建Web Service19.7.2 创建SOAP客户端应用程序19.7.3 添加CORBA客户端代码至Web Service中19.8 小结第20章 BizSnap开发:基于SOAP的Web Services20.1 Web Services20.2 SOAP20.3 编写Web Service20.3.1 TWebModule20.3.2 定义一个可调用接口20.3.3 实现一个可调用接口20.3.4 测试Web Service20.4 从客户端调用Web Service20.4.1 为远程可调用对象产生一个输入单元20.4.2 使用THTTPRIO组件20.5 小结第21章 DataSnap开发21.1 创建多层应用程序的机制21.2 多层体系结构的优点21.2.1 集中商业逻辑21.2.2 瘦客户结构21.2.3 自动错误调解21.2.4 公文包模型21.2.5 容错性21.2.6 负载平衡21.3 典型的DataSnap结构21.3.1 服务器21.3.2 客户端21.4 使用DataSnap创建应用程序21.4.1 创建服务器21.4.2 创建客户端21.5 更多增强应用程序健壮性的措施21.5.1 客户端优化技术21.5.2 应用程序服务器技术21.6 实例21.7 Client Dataset组件的更多特性21.8 典型错误21.9 配置DataSnap应用程序21.9.1 发放许可证21.9.2 DCOM配置21.9.3 文件配置21.9.4 Internet配置考虑(防火墙)21.10 小结第六部分 Internet开发第22章 ASP开发22.1 理解活动服务器对象22.2 活动服务器对象向导22.2.1 类型库编辑器22.2.2 新方法22.2.3 ASP Response对象22.2.4 第一次运行22.2.5 ASP Request对象22.2.6 重新编译活动服务器对象22.2.7 再次运行活动服务器对象22.3 ASP Session、Server和Application对象22.4 活动服务器对象及数据库22.5 活动服务器对象及NetCLX支持22.6 调试活动服务器对象22.6.1 使用MTS调试活动服务器对象22.6.2 采用Windows NT 4调试22.6.3 采用Windows 2000调试22.7 小结第23章 WebSnap开发23.1 WebSnap的特性23.1.1 多个Webmodule23.1.2 服务器执行脚本23.1.3 TAdapter(适配器)组件23.1.4 多种调度方法23.1.5 Page producer(页面生成器)组件23.1.6 会话管理23.1.7 登录服务23.1.8 用户跟踪23.1.9 HTML管理23.1.10 文件上传服务23.2 websnap开发23.2.1 应用程序的设计23.2.2 为应用程序添加功能23.2.3 导航菜单栏23.2.4 登录23.2.5 管理用户偏好数据23.2.6 在会话之间保存偏好数据23.2.7 图像处理23.2.8 显示数据23.2.9 将应用程序转换为ISAPI DLL23.3 高级话题23.3.1 LocabFileServices(文件定位服务)23.3.2 文件上传23.3.3 包含定制模板23.3.4 在TAdapterPageProducer中定制组件23.4 小结第24章 无线开发24.1 开发技术的发展:回顾24.1.1 20世纪80年代以前:庞然大物时代24.1.2 20世纪80年代后期:桌面数据库应用程序24.1.3 20世纪90年代早期:客户端/服务器24.1.4 20世纪90年代后期:多层结构及基于Internet的事务处理24.1.5 21世纪早期:扩展到无线移动领域的应用程序基础架构24.2 移动无线设备24.1.3 20世纪90年代早期:客户端/服务器24.1.4 20世纪90年代后期:多层结构及基于Internet的事务处理24.1.5 21世纪早期:扩展到无线移动领域的应用程序基础架构24.2 移动无线设备24.2.1 移动电话24.2.2 palmos设备24.2.3 Pocket PC24.2.4 RIM BlackBerrv24.3 无线电技术24.3.1 GSM、CDMA和TDMA24.3.2 CDPD24.3.3 3G24.3.4 GPRS24.3.5 蓝牙24.3.6 802.1124.4 基于服务器的无线数据技术24.4.1 SMS24.4.2 WAP24.4.3 I-mode24.4.4 PQA24.5 无线用户体验24.5.1 环路选择网络和数据包选择网络24.5.2 无线并非Web24.5.3 窗体因素的重要性24.5.4 数据输入和导航技术24.5.5 M-Commerce24.6 小结 上一篇: C++游戏编程 下一篇: 21世纪高等学校计算机教育实用规划教材:C语言程序设计