内 容 提 要
本书的核心是讲述 Object Pascal 和 VCL 的重、难点知识(即所谓“精要”),集中于第 3 章、第 5
章。第 2 章、第 4 章阐明相应的一些基本概念,是为初学者而设立的。
本书也是一本参考手册,包括了“IDE 的快捷键列表”(2.8 节)、“编译指令”(3.4 节)、“VCL 消
息大全”(5.2.4 节)、“常用函数和过程”(第 8 章)以及一些常用的、重要的开发技巧(第 9 章)等内
容。
本书同时也较为全面地讲述了组件开发知识,集中于第 6 章、第 7 章。
第 10 章通过一个实例综合运用了全书内容。
未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。
版权所有,侵权必究。
图书在版编目(CIP)数据
Delphi 精要/罗小平编著.—北京:电子工业出版社,2004.1
(Borland In-Depth Series\Borland 大系)
ISBN 7-5053-9412-6
Ⅰ.D... Ⅱ.罗... Ⅲ.软件工具-程序设计 Ⅳ.TP311.56
中国版本图书馆 CIP 数据核字(2003)第 110153 号
责任编辑:周 筠 陈元玉
技术编辑:韩 磊
印 刷:
出版发行:电子工业出版社
北京市海淀区万寿路 173 信箱 邮编 100036
经 销:各地新华书店
开 本:787×980 1/16 印张:25.25 字数:600 千字
印 次:2004 年 1 月第 1 次印刷
印 数:6 000 册 定价:39.8 元(含光盘 1 张)
凡购买电子工业出版社的图书,如有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部
联系。联系电话:(010)68279077。质量投诉请发邮件至 zlts@phei.com.cn,盗版侵权举报请发邮件至
dbqq@phei.com.cn。
目
录
第 1 章 关于 Delphi 与本书............................................................................................................... (1)
1.1 Delphi 是什么 .............................................................................................................................. (1)
1.1.1 Delphi 的历史 .................................................................................................................. (1)
1.1.2 选择 Delphi 意味着什么 ................................................................................................. (2)
1.1.3 如何使用 Delphi 编程 ..................................................................................................... (3)
1.2 本书的特点 .................................................................................................................................. (4)
1.2.1 本书有哪些内容,没有哪些内容................................................................................... (5)
1.2.2 本书是如何写作的 .......................................................................................................... (5)
1.2.3 如何阅读本书 .................................................................................................................. (5)
第 2 章 Object Pascal 入门............................................................................................................... (7)
2.1 运算符 .......................................................................................................................................... (7)
2.1.1 赋值运算符 ...................................................................................................................... (7)
2.1.2 比较运算符 ...................................................................................................................... (7)
2.1.3 逻辑运算符 ...................................................................................................................... (8)
2.1.4 算术运算符 ...................................................................................................................... (8)
2.1.5 按位运算符 ...................................................................................................................... (9)
2.1.6 其他运算符和模拟运算 .................................................................................................. (9)
2.2 常量和变量 ................................................................................................................................ (12)
2.2.1 无类型常量和有类型常量 ............................................................................................ (13)
2.2.2 全局变量和局部变量 .................................................................................................... (13)
2.2.3 声明时使用编译时函数 ................................................................................................ (14)
2.2.4 资源字符串 .................................................................................................................... (15)
2.3 过程和函数 ................................................................................................................................ (15)
2.3.1 过程和函数的区别 ........................................................................................................ (15)
2.3.2 子过程............................................................................................................................ (16)
2.4 数据类型 .................................................................................................................................... (17)
2.4.1 常用类型和复杂类型 .................................................................................................... (17)
精要
·2·
2.4.2 不同语言的数据类型对照表 ........................................................................................ (17)
2.5 程序流程控制 ............................................................................................................................ (18)
2.5.1 条件分支........................................................................................................................ (18)
2.5.2 循环................................................................................................................................ (19)
2.5.3 跳转................................................................................................................................ (20)
2.5.4 用过程辅助实现流程控制 ............................................................................................ (21)
2.6 单元的组织结构 ........................................................................................................................ (24)
2.6.1 Program 的组织结构 ..................................................................................................... (24)
2.6.2 Unit 的组织结构 ............................................................................................................ (25)
2.6.3 单元循环引用 ................................................................................................................ (27)
2.7 with...do 语句的用法 ................................................................................................................. (28)
2.8 IDE 的快捷键列表..................................................................................................................... (29)
第 3 章 Object Pascal 精要............................................................................................................. (31)
3.1 数据类型及其相互关系 ............................................................................................................ (31)
3.1.1 数据类型概述 ................................................................................................................ (32)
3.1.2 变量的内存分配和释放 ................................................................................................ (48)
3.1.3 数据的内存结构 ............................................................................................................ (52)
3.1.4 强数据类型与类型转化 ................................................................................................ (53)
3.2 过程和函数 ................................................................................................................................ (59)
3.2.1 作用域............................................................................................................................ (60)
3.2.2 参数传递........................................................................................................................ (62)
3.2.3 声明指令........................................................................................................................ (66)
3.3 类和类成员 ................................................................................................................................ (66)
3.3.1 类和类成员概述 ............................................................................................................ (67)
3.3.2 深入认识方法 ................................................................................................................ (69)
3.3.3 深入认识属性 ................................................................................................................ (78)
3.3.4 深入认识事件 ................................................................................................................ (84)
3.3.5 类成员重新声明 ............................................................................................................ (86)
3.3.6 inherited 释疑................................................................................................................. (88)
3.3.7 接口的真相 .................................................................................................................... (89)
3.4 编译指令 .................................................................................................................................... (95)
3.4.1 开关指令........................................................................................................................ (96)
3.4.2 参数指令........................................................................................................................ (99)
精要
·3·
3.4.3 条件指令...................................................................................................................... (102)
第 4 章 VCL 入门............................................................................................................. (104)
4.1 VCL 概述 ................................................................................................................................. (104)
4.2 组件与控件的概念 .................................................................................................................. (105)
4.3 使用 VCL ................................................................................................................................. (105)
4.4 扩展 VCL ................................................................................................................................. (107)
第 5 章 VCL 精要 .............................................................................................................................. (108)
5.1 揭开 VCL 的神秘面纱 ............................................................................................................ (108)
5.1.1 VCL 架构 ..................................................................................................................... (108)
5.1.2 构造和析构的内幕 .......................................................................................................(111)
5.1.3 虚拟方法表和动态方法表 .......................................................................................... (115)
5.1.4 TObject 如何使用虚拟方法表 .................................................................................... (118)
5.1.5 运行时类型信息 .......................................................................................................... (122)
5.2 VCL 的消息机制 ..................................................................................................................... (130)
5.2.1 VCL 消息机制 ............................................................................................................. (130)
5.2.2 处理消息的八种方法 .................................................................................................. (134)
5.2.3 选用什么方法发送消息 .............................................................................................. (140)
5.2.4 VCL 消息大全 ............................................................................................................. (144)
5.3 多态性 ...................................................................................................................................... (161)
5.3.1 多态性的概念 .............................................................................................................. (162)
5.3.2 多态性和虚方法的关系 .............................................................................................. (164)
第 6 章 组件开发实战...................................................................................................................... (167)
6.1 三种组件开发方法 .................................................................................................................. (167)
6.1.1 继承、聚合和子类化 .................................................................................................. (167)
6.1.2 接口、虚方法和辅助类的选择 .................................................................................. (169)
6.2 文件拖放监视器 ...................................................................................................................... (169)
6.2.1 文件拖放原理 .............................................................................................................. (169)
6.2.2 文件拖放实例 .............................................................................................................. (170)
6.2.3 组件封装...................................................................................................................... (171)
6.3 托盘组件 .................................................................................................................................. (175)
6.3.1 装入托盘图标 .............................................................................................................. (175)
6.3.2 在应用程序最小化时去掉状态栏的图....................................................................... (177)
精要
·4·
6.3.3 给托盘图标增加接收鼠标消息功能........................................................................... (179)
6.3.4 处理鼠标消息 .............................................................................................................. (181)
6.3.5 显示动画图标 .............................................................................................................. (182)
6.3.6 设置程序的自动启动功能 .......................................................................................... (182)
6.3.7 组件封装...................................................................................................................... (183)
6.4 自动下拉的 TComboBox......................................................................................................... (190)
6.5 开发数据敏感控件 .................................................................................................................. (195)
6.5.1 数据敏感原理 .............................................................................................................. (196)
6.5.2 开发日期敏感控件 ...................................................................................................... (196)
6.6 开发聚合组件 .......................................................................................................................... (203)
6.6.1 开发 LabelDBDatePicker............................................................................................. (203)
6.6.2 加强 LabelDBDatePicker............................................................................................. (206)
6.7 开发图形图像控件 .................................................................................................................. (211)
6.8 开发 QuickReport 组件............................................................................................................ (218)
第 7 章 组件开发相关工作............................................................................................................. (225)
7.1 包和包编译指令 ...................................................................................................................... (225)
7.2 创建组件图标 .......................................................................................................................... (226)
7.3 属性编辑器 .............................................................................................................................. (227)
7.4 组件编辑器 .............................................................................................................................. (231)
第 8 章 常用函数和过程 ................................................................................................................. (235)
8.1 数据类型转化类 ...................................................................................................................... (235)
8.1.1 数值和字符串的相互转化 .......................................................................................... (235)
8.1.2 整数和字符串的相互转化 .......................................................................................... (236)
8.1.3 实数和字符串的相互转化 .......................................................................................... (236)
8.1.4 实数子类型的相互转化 .............................................................................................. (237)
8.1.5 布尔类型和字符串的相互转化 .................................................................................. (237)
8.2 字符串处理类 .......................................................................................................................... (237)
8.2.1 字符串的分类 .............................................................................................................. (240)
8.2.2 和字符串相关的类 ...................................................................................................... (241)
8.3 流处理类 .................................................................................................................................. (245)
8.4 内存管理、程序流程控制类................................................................................................... (250)
8.4.1 内存管理...................................................................................................................... (250)
精要
·5·
8.4.2 程序流程控制 .............................................................................................................. (251)
8.5 文件操作类 .............................................................................................................................. (252)
8.5.1 使用文件句柄进行 I/O 处理 ....................................................................................... (252)
8.5.2 使用 Pascal 文件变量进行 I/O 处理 ........................................................................... (253)
8.5.3 面向对象文件 I/O 处理............................................................................................... (255)
8.5.4 文件属性操作 .............................................................................................................. (255)
8.5.5 其他函数和方法 .......................................................................................................... (256)
8.6 日期时间类 .............................................................................................................................. (258)
8.6.1 获取/合成日期/时间.................................................................................................... (258)
8.6.2 日期/时间和字符串的转换 ......................................................................................... (259)
8.6.3 日期/时间的运算 ......................................................................................................... (259)
8.7 VCL 类 ..................................................................................................................................... (260)
8.7.1 Classes 单元 ................................................................................................................. (260)
8.7.2 Controls 单元 ............................................................................................................... (262)
8.7.3 Dialogs 单元................................................................................................................. (262)
8.8 位运算类 .................................................................................................................................. (264)
8.9 图形图像类 .............................................................................................................................. (266)
第 9 章 高级开发技巧...................................................................................................................... (268)
9.1 自定义窗口过程 ...................................................................................................................... (268)
9.2 自定义消息及其替代方法....................................................................................................... (270)
9.3 自定义系统惟一消息 .............................................................................................................. (272)
9.4 新颖的类工厂 .......................................................................................................................... (275)
9.5 使用对象库 .............................................................................................................................. (281)
9.6 非发布(published)数据的持久化 ....................................................................................... (287)
9.7 使用回调函数 .......................................................................................................................... (288)
9.8 使用递归算法 .......................................................................................................................... (290)
9.9 编写 NT 服务程序 ................................................................................................................... (294)
9.10 编写只能惟一运行的程序..................................................................................................... (295)
9.11 字段类型全家福 .................................................................................................................... (298)
9.12 获取数据库结构信息 ............................................................................................................ (300)
9.13 深入使用 TCanvas ................................................................................................................. (301)
9.14 指针列表类的使用 ................................................................................................................ (308)
9.15 结构化存储技术 .................................................................................................................... (312)
精要
·6·
9.16 挂钩技术 ................................................................................................................................ (321)
9.17 TRichEdit 高级开发............................................................................................................... (327)
9.18 用 TTreeView 分析数据表的结构......................................................................................... (334)
9.19 SQL 语句分析器.................................................................................................................... (339)
9.20 剪贴板高级编程 .................................................................................................................... (344)
第 10 章 综合例子——使用 Socket 传输多个文件.............................................................. (350)
10.1 Socket 简介 ............................................................................................................................ (350)
10.2 TServerSocket 和 TClientSocket............................................................................................ (351)
10.3 设计通讯协议 ........................................................................................................................ (354)
10.4 实现服务端 ............................................................................................................................ (357)
10.5 实现客户端 ............................................................................................................................ (367)
10.6 组件封装 ................................................................................................................................ (374)
10.7 自动下载技术在项目中的应用............................................................................................. (391)
第 1 章 关于 Delphi 与本书
第 1 章 关于 Delphi 与本书
在一本书的开头,总应该说点什么,我也不能脱离俗套。既然是俗套,或许也的确是必要的。黑
格尔不是说过:存在即合理。
既然要说,就得说点有价值的,如果全是废话、大话、空话,就难免遭人唾骂。
在本章里,我想谈谈两个方面的话题:
(1) 我对 Delphi 的一些认识。
(2) 这本书的特点。
1.1 Delphi 是什么
1.1 Delphi 是什么
这一节希望读者朋友对 Delphi 有一个总体的认识,包括其发展历史、特点。无论是在网络论坛、
办公室,还是在技术座谈会上,时常有人询问“Delphi 有没有前途”、“我该选择.NET、Java 还是 Delphi”、
“Delphi 的旗帜还能打多久”之类的问题,即使是正在使用 Delphi 的朋友,也常常被这样的问题困扰。
本节不指望能正面回答这些问题,但是希望能给出一些理由让困惑的朋友们平静下来,从而将时间和
精力放到更重要的事情上去。
1.1.1 Delphi 的历史
在 DOS 时代,程序员可选择的开发工具很少:要么是易用但低效的 BASIC 语言,要么是高效但
难用的汇编语言。即使到了 Windows 3.X 时代,仍然是两难选择:要么是容易使用但功能十分有限的
Visual BASIC,要么是强大但难以使用的 C/C++。
但是到了 1995 年,情况发生了很大变化。那就是 Delphi 1.0 在 Borland 公司诞生了。Delphi 1.0 运
行在 Windows 3.X 平台上,以 Object Pascal(面向对象的 Pascal,从 Pascal 发展而来)为开发语言,它
提供了一种全新的 Windows 程序开发方法:可视化的开发环境、真编译后的可执行程序、DDL 和支持
数据库软件开发。Delphi 1.0 是第一个综合了可视化开发技术、优化的源代码编译器和可扩展的数据库
访问引擎的 Windows 平台开发工具。Delphi 1.0 奠定了 RAD(Rapid Application Development,快速应
用程序开发)的概念。
尽管在 Delphi 3 开发前后,著名的 Delphi 首席设计师 Anders Hejlsberg(第一个 Turbo Pascal
编译器的作者)、首席技术总裁 Paul Gross 离开 Borland 公司去了 Microsoft 公司,并且在整个的 Delphi
发展过程中,Borland 公司也出现了一些重大决策失误,但是 Delphi 仍然拥有全世界众多的爱好者
和使用者。