第1章 走进Delphi 1
1.1 浏览和配置IDE 1
1.1.1 打开文件和保存文件 1
1.1.2 搜索代码 3
1.1.3 探索Delphi 5
1.1.4 运行程序 10
1.1.5 配置工作环境 13
1.1.6 使用上下文菜单 15
1.2 创建应用程序 16
1.2.1 创建一个程序 17
1.2.2 保存您的工作 18
1.2.3 编译并运行程序 18
1.3 理解Delphi的设计--以工程为中心 19
1.3.1 工程文件 19
1.3.2 源代码文件 19
1.3.3 窗体与数据模块 20
1.3.4 配置与选项文件 21
1.3.5 中间编译单元 21
1.3.6 备份文件 21
1.3.7 包文件 21
1.3.8 应用程序文件 22
1.4 源代码文件的组织 22
1.4.1 单元的各个总分 22
1.4.2 Unit语句 23
1.4.3 接口部分 23
1.4.4 实现部分 23
1.4.5 定义Uses子句 24
1.4.6 Type子句 24
1.4.7 变量部分 24
1.4.8 资源声明 25
1.4.9 Initialization部分的使用 25
1.4.10 Finalization部分的使用 25
1.5 代码的原子与分子 26
1.5.1 操作符与操作数 26
1.5.2 关键字 26
1.5.3 基本数据类型 27
1.5.4 书写代码 28
1.5.5 条件语句 28
1.5.6 循环控制语句 30
1.6 编写过程和函数 30
1.6.1 编写过程 31
1.6.2 编写函数 32
1.6.3 参数前缀的使用 32
1.6.4 参数的默认值 33
1.7 调试程序 33
1.7.1 向集成调试器传递命令行参数 34
1.7.2 简化的中断命令 34
1.8 小结 34
第2章 学好面向对象的Pascal 36
2.1 Delphi的惯例 36
2.1.1 少就是多 37
2.1.2 最好的习惯 37
2.1.3 惯例 37
2.2 每个Windows程序都具有的成分 38
2.2.1 图形用户界面 38
2.2.2 过程和函数 40
2.2.3 Windows是基于消息的操作系统 41
2.2.4 事件处理程序把Windows和Windows程序联系起来 41
2.3 调用WindwosAPI过程 42
2.3.1 可执行文件与动态链接库 43
2.3.2 怎样调用WindowsAPI过程 43
2.3.3 声明API过程 44
2.3.4 在运行时加载库 45
2.3.5 创建动态链接库 47
2.4 类的定义与对象的实例化 49
2.4.1 基本的类语法 50
2.4.2 捕获状态 52
2.4.3 增加功能 53
2.4.4 创建对象实例 54
2.5 信息隐藏是好事情 55
2.5.1 存取限字符 55
2.5.2 作用域 59
2.5.3 信息隐藏的目的 59
2.6 向类添加特性 60
2.6.1 数据维护对象的状态 60
2.6.2 特性代表数据的接口 60
2.6.3 特性访问方法 61
2.7 小结 63
第3章 Delphi体系结构的关键类 64
3.1 浏览Delphi的体系结构 64
3.1.1 Project Browser选项 66
3.1.2 理解Project Browser中的作用域、继承和引用 68
3.2 根类 68
3.2.1 TObject类 68
3.2.2 COM接口 70
3.3 组件的继承 70
3.3.1 TPersistent类 70
3.3.2 TComponent类 72
3.3.3 TControl类 73
3.3.4 TWinControl类 73
3.3.5 使用新的标签化组件 73
3.3.6 特性编辑器类 74
3.4 TApplication类 74
3.4.1 Application事件 75
3.4.2 使用TApplicationEvents组件 76
3.5 新的Windows Shell组件 77
3.6 图形类 78
3.6.1 TCanvas类 78
3.6.2 Delphi6中新增的字体、画笔、画刷恢复能力 80
3.7 打印 80
3.8 Internet类 82
3.9 数据结构 82
3.9.1 使用新的TValueListEditor组件 82
3.9.2 在表中存储数据 82
3.9.3 TOrderedList 84
3.9.4 TCollection类 84
3.10 数据流 85
3.10.1 TStrings类 86
3.11 TParser类 86
3.12 异常处理 87
3.12.1 使用try except块语句 88
3.12.2 使用资源保护块 90
3.12.3 引发异常 90
3.13 多线程类 91
3.14 OpenTools API 92
3.15 Microsoft Office服务器 92
3.16 小结 93
第4章 定义多态和动态过程 94
4.1 使用默认参数 94
4.2 产生多态的行为 95
4.2.1 引入命名矫正 96
4.2.2 过载过程 96
4.3 在过载过程与默认参数之间选择 97
4.4 继承 97
4.4.1 理解继承关系中存取限定符的作用 98
4.4.2 单继承 99
4.4.3 多继承 99
4.5 静态的、虚的和动态的方法 100
4.6 重载方法 101
4.6.1 Inherited保留字的使用 103
4.6.2 重载构造函数 103
4.6.3 重载析构函数 104
4.7 重新引入方法 104
4.8 抽象类 105
4.9 向前声明 105
4.10 小结 106
第5章 集合、常数与运行时类型信息编程 107
5.1 不可变常数 107
5.1.1 全局与本地常数 107
5.1.2 常数参数 108
5.1.3 使用const创建静态本地变量 109
5.1.4 数组常数 110
5.1.5 记录常数 111
5.1.6 过程常数 112
5.1.7 指针常数 113
5.1.8 用于初始化常量的过程 113
5.2 枚举的使用 113
5.2.1 用枚举定义数组边界 114
5.2.2 预定义枚举类型 115
5.2.3 用于枚举类型的过程 117
5.3 集合操作 118
5.3.1 理解集合以及set of语句 119
5.3.2 使用集合构造器 119
5.3.3 集合操作符 120
5.3.4 Include和Exclude过程 124
5.4 掌握数组 125
5.4.1 数组异常 125
5.4.2 定义子界值 126
5.4.3 使用类型减少边界错误 126
5.4.4 下界与上界函数 127
5.4.5 开放数组参数 128
5.4.6 定义静态数组和动态数组 131
5.4.7 紧缩数组 132
5.5 运行时类型信息 133
5.6 类型转换 133
5.7 小结 134
第6章 接口的奥秘 135
6.1 赢得对意大利细面条的战争 135
6.2 类定义实用指南 138
6.2.1 类中有什么 139
6.2.2 没有数据的类 139
6.2.3 命名惯例 140
6.2.4 存取限定符的使用 141
6.2.5 默认的公开或公有权限 141
6.2.6 公开接口 143
6.2.7 公有接口 143
6.2.8 保护接口 143
6.2.9 私有接口 143
6.3 创建自定义过程类型 144
6.3.1 定义过程类型 144
6.3.2 回调过程 145
6.4 过程类型中的默认参数值 147
6.5 传递过程类型的参数 147
6.6 过程类型常量 148
6.7 事件处理程序 149
6.7.1 定义事件处理程序 150
6.7.2 调用事件方法 150
6.7.3 触发事件 151
6.7.4 定义事件特性 154
6.7.5 事件处理程序将消息转发到应用程序 155
6.8 消息方法 155
6.8.1 查找预定义消息常数 155
6.8.2 定义消息处理程序 157
6.8.3 理解Delphi的消息发送体系 160
6.9 小结 161
第7章 抽象类和静态接口 162
7.1 类方法的实现 162
7.1.1 创建无数据类 163
7.1.2 构造函数和析构函数 166
7.2 维护无对象状态 167
7.3 动态链接库编程 169
7.3.1 调用DLL过程 169
7.3.2 编写动态链接库 172
7.3.3 处理DLL异常 175
7.3.4 对字符串参数使用共享内存管理器 176
7.3.5 创建工程组 177
7.3.6 测试DLL 177
7.4 瘦客户程序设计 179
7.4.1 使用类引用 180
7.4.2 定义纯虚抽象类 182
7.4.3 创建面向对象的DLL 183
7.4.4 创建瘦客户程序 189
7.5 小结 191
第8章 高级特性编程 192
8.1 声明特性 192
8.1.1 存取限定符 193
8.1.2 只读和只写特性的定义 195
8.1.3 针对处理器密集型特性修改的安全措施 195
8.1.4 使用Assign方法进行对象赋值 198
8.2 特性的存储限定符 198
8.2.1 默认和非默认存储方式的使用 200
8.2.2 使用stored限定符 201
8.3 定义数组特性 202
8.3.1 数组特性的default限定符 204
8.3.2 隐式范围检查 205
8.4 定义索引特性 205
8.4.1 使用枚举索引值 207
8.5 多态特性 208
8.6 提升子类中特性的可见性 211
8.7 小结 213
第9章 创建定制组件 214
9.1 组件单元概览 214
9.2 使用组件向导 215
9.2.1 为扩展的标签控件编写代码 216
9.2.2 测试控件 219
9.3 组件的构造函数和析构函数 220
9.4 定义组件特性 221
9.5 编译并测试组件 226
9.5.1 陷阱代码 230
9.6 在Code Insight中定义陷阱 231
9.7 添加组件图标 232
9.7.1 用Image Editor创建组件资源文件 233
9.7.2 查找图标资源 234
9.8 将组件安装到包中 236
9.9 小结 237
第10章 高级组件设计 238
10.1 动态装载资源 238
10.1.1 创建Delphi组件资源文件 239
10.1.2 装载资源 240
10.2 公开所拥有的组件 242
10.2.1 声明公开的组件特性 243
10.2.2 调用SetSubComponent以持久化公开对象 245
10.3 创建对话框组件 246
10.4 重载Notification方法 250
10.5 创建特性编辑器 251
10.5.1 子类化已有的特性编辑器 252
10.5.2 定义定制的特性编辑器 253
10.6 持久化非公开特性 259
10.6.1 重载DefineProperties 259
10.6.2 TReader和TWriter 260
10.6.3 写入复杂类型的数据 260
10.7 小结 263
第11章 用组件开发一致的界面 264
11.1 定制组件 265
11.1.1 定制组件的三个C 265
11.1.2 重分解 266
11.1.3 小的改变有什么好处 268
11.1.4 采取好的策略 268
11.1.5 组件化 269
11.2 创建组件模板 269
11.2.1 定义组件模板 269
11.3 窗体模板与窗体继承 274
11.3.1 创建窗体模板 275
11.3.2 使用模板窗体 278
11.4 静态与动态的组件用法 279
11.4.1 动态创建窗体 279
11.4.2 一个动态的数据库窗体 282
11.5 所有者绘图组件 287
11.5.1 定制网格绘制 289
11.5.2 所有者绘图TMainMenu组件 290
11.6 小结 293
第12章 使用Microsoft自动化组件 294
12.1 TOleServer 294
12.2 Microsoft自动化服务器 297
12.2.1 自动化服务器组件概览 297
12.2.2 导入类型库 299
12.2.3 CreateOleObject 304
12.2.4 CreateRemoteComObject 305
12.3 Access 305
12.3.1 用Access解析固定长度的数据 306
12.4 小结 310
第13章 使用Data Access组件 311
13.1 ODBC(开放式数据库连接) 312
13.1.1 创建ODBC别名 312
13.1.2 改变ODBC别名的配置 314
13.1.3 测试连接 314
13.2 Borland数据库引擎 315
13.3 数据库窗体向导 315
13.3.1 使用SQL Explorer创建BDE别名 316
13.3.2 使用数据库窗体向导 317
13.4 Data Access组件 319
13.5 TDataSet 320
13.6 TBDEDataSet和TDBDataSet 326
13.7 TTable组件 326
13.7.1 SessionName和DatabaseName特性 327
13.7.2 Table属性 327
13.7.3 Fields 327
13.8 TQuery组件 328
13.8.1 编写SQL SELECT语句 329
13.8.2 Open与ExecSQL方法 330
13.8.3 RequestLive特性 331
13.8.4 Params 331
13.8.5 UpdateObject特性 332
13.9 TDataSource组件 332
13.10 TDatabase 333
13.10.1 CachedUpdates 334
13.10.2 事务隔离级别 334
13.11 TSession 335
13.12 TBatchMove 335
13.13 TUpdateSQL 336
13.13.1 创建一个样本UpdatdSQL应用程序 336
13.13.2 编写UpdateSQL应用程序代码 339
13.14 小结 342
第14章 使用数据控制 343
14.1 简述两层和三层设计 343
14.2 数据控件概览 345
14.2.1 DBGrid 345
14.2.2 DBNavigator 345
14.2.3 DBText 345
14.2.4 DBEdit 346
14.2.5 DBMemo 346
14.2.6 DBImage 346
14.2.7 DBListBox 346
14.2.8 DBComboBox 346
14.2.9 DBCheckBox 346
14.2.10 DBLookupListBox 347
14.2.11 DBLookupComboBox 347
14.2.12 DBRichEdit 347
14.2.13 DBCtrlGrid 347
14.2.14 DBChart 348
14.2.15 连接到DataSource和DataSet 349
14.2.16 数据控件特性 349
14.3 DBRichEdit控件 350
14.3.1 格式化文本 350
14.3.2 更改段落特性 352
14.3.3 查找文本 353
14.3.4 流BLOB字段 354
14.4 DBGrid控件 354
14.4.1 列集合和列对象 355
14.4.2 栅格事件 358
14.4.3 定制单元栅格绘图 359
14.5 DBLookupListBox和DBComboBox控件 361
14.6 DBChart控件 362
14.7 动态和静态字段 365
14.7.1 字段编辑器 366
14.7.2 字段特性:使用字段约束、默认表达式和编辑掩码 368
14.7.3 处理字段级事件 369
14.7.4 定义字段级的查找 371
14.7.5 关于动态字段组件和静态字段组件的最后一点说明 372
14.8 数据库字典 373
14.8.1 创建数据字典 373
14.8.2 将字典同DataSet相关联 376
14.9 创建定制的数据控件 376
14.9.1 添加TFieldDataLink组件 377
14.9.2 使控件可复制 380
14.10 小结 388
第15章 MIDAS编程 389
15.1 MIDAS组件概述 390
15.1.1 定义服务器应用程序 390
15.1.2 定义客户程序 393
15.2 对MIDAS服务器进行查询 395
15.2.1 服务器程序的实现 395
15.2.2 实现客户程序 401
15.3 错误处理 404
15.3.1 建立客户与服务器示例程序 404
15.3.2 使用错误处理窗体 406
15.4 公文包客户和服务器程序 407
15.5 小结 408
第16章 Intranet与Internet编程 409
16.1 传输控制协议(TCP)组件 410
16.1.1 Indy客户端TCP组件 410
16.1.2 Indy服务器TCP组件 413
16.2 用户数据报(UDP)组件 414
16.3 建立FTP客户程序 416
16.3.1 连接到FTP服务器 417
16.3.2 上传和下载文件 419
16.3.3 向FTP服务器发送命令 420
16.4 创建Telnet客户程序 422
16.5 使用POP3和SMTP建立Internet Email客户端程序 425
16.5.1 使用TIdPOP3组件 425
16.5.2 使用TIdMessage组件 427
16.5.3 使用TIdSMTP组件 427
16.6 小结 428
第17章 使用WebBroker组件创建Web服务器 429
17.1 HTML基础 429
17.1.1 URL(Uniform Resource Locator) 429
17.1.2 基本的HTML结构 431
17.1.3 将可替换参数标记与WebBroker一同使用 436
17.2 使用WebBroker组件 436
17.2.1 WebDispatcher组件 437
17.2.2 TPageProducer组件 439
17.2.3 TDataSetPageProducer组件 440
17.2.4 查看表数据 442
17.2.5 TQueryTableProducer组件 444
17.3 使用Cookie 446
17.4 小结 449
第18章 创建Windows程序 450
18.1 准备工作 450
18.1.1 大有帮助的简单工作 451
18.1.2 版本控制 451
18.2 开发中的Delphi工程选项 452
18.2.1 应用设置 452
18.2.2 设置运行时错误 452
18.2.3 调试选项 453
18.2.4 加入版本信息 454
18.2.5 在RichEditor工程中指定目录和条件选项 454
18.3 建立主窗体 455
18.3.1 多文档界面 455
18.3.2 添加TMainMenu组件 457
18.3.3 添加工具栏 463
18.3.4 TActionList和TAction组件 465
18.3.5 建立状态栏 474
18.4 建立编辑器窗体 479
18.4.1 自动合并Format菜单 480
18.4.2 创建一个惟一的临时文件 481
18.5 永久保存注册表中应用程序的设置 482
18.6 使程序合乎需要 484
18.6.1 调试与测试 484
18.6.2 质量保证 484
18.6.3 文档 484
18.7 工程部署选项 485
18.8 小结 485
第19章 Delphi的SQL的程序设计 486
19.1 结构化查询语言 486
19.2 SQL编程 487
19.2.1 SELECT语句 487
19.2.2 DELETE 489
19.2.3 INSERT 489
19.2.4 UPDATE 490
19.2.5 SQL与TQuery组件 490
19.3 高级SQL编程 492
19.3.1 定义WHERE子句 492
19.3.2 使用JOIN子句 495
19.3.3 对数据排序 496
19.3.4 GROUP BY语句 496
19.3.5 HAVING子句 497
19.3.6 UNION和INTERSECTION 497
19.3.7 定义嵌套查询 498
19.4 小结 499
附录A 使用OPENTOOLS API的Delphi扩展示例 500
A.1 OpenToolsAPI介绍 500
A.1.1 OpenTools接口 501
A.1.2 创建向导 501
A.2 创建定制向导 506
A.2.1 定义New Expert Wizard 506
A.2.2 向Delphi的菜单添加菜单项 515
A.2.3 建立代码生成器 516
A.3 CODEGEN.TXT 517
A.3.1 将向导添加到New Items对话框 521
A.4 创建组件编辑器 524
A.4.1 定义上下文菜单 524
A.4.2 注册组件编辑器 527
A.4.3 阴影标签的组件编辑器 527
A.5 小结 531
附录B 创建NT服务程序 532
B.1 创建服务程序 532
B.1.1 定义邮件发送器服务 533
B.2 安装服务程序 534
B.3 使用服务控制管理器 535
B.4 服务事件日志 536
B.5 服务的调试 536
B.6 小结 538
附录C 将程序转变为自动化服务器 539
C.1 向工程添加自动化对象 539
C.1.1 使用自动化对象向导 539
C.1.2 在类型库编辑器中定义接口 539
C.1.3 实现接口 542
C.1.4 运行服务器来注册类型库 543
C.2 建立测试程序 544
C.3 小结 545
附录D 用Delphi实现无线程序 546
D.1 准备工作 546
D.2 无线标记语言基础 547
D.2.1 定义桌面(或WML文档) 547
D.2.2 定义卡片 549
D.2.3 格式化标记 549
D.2.4 导航按钮 549
D.2.5 模板 550
D.2.6 输入域和变量 551
D.3 无线应用与Delphi 551
D.4 使用Delphi创建无线服务器 552
D.4.1 建立联系表 553
D.4.2 使用Web Broker创建CGI服务器 553
D.4.3 测试程序 555
D.5 小结 556