下册 789
第三部分 基于元件的开发 789
第二十章 VCL的要素 789
20.1 什么是元件 790
20.2 元件的种类 790
20.2.1 标准元件 790
20.2.2 自定义元件 790
20.3.1 特性 791
20.3 元件的结构 791
20.2.4 非可视元件 791
20.2.3 图像元件 791
20.3.2 特性的种类 793
20.3.3 方法 793
20.3.4 事件 793
20.3.5 流特性 795
20.3.6 拥有关系 795
20.3.7 父子关系 796
20.4 元件的继承关系 796
20.4.1 TPersistent 797
20.4.2 TComponent 797
20.4.4 TWinControl 799
20.4.3 TControl 799
20.4.5 TGraphicControl 800
20.4.6 TCustomControl 800
20.4.7 其他类 800
20.5 运行期类型信息 803
20.5.1 TypInfo.pas单元 804
20.5.2 获取类型信息 806
20.5.3 获取方法指针的类型信息 813
20.5.4 获取有序类型的PTTI信息 818
21.1 元件设计基础 823
21.1.1 什么时候需要编写元件 823
第二十一章 编写自定义元件 823
21.1.2 编写元件的一般步骤 824
21.1.3 确定一个祖先类 824
21.1.4 创建一个元件单元 825
21.1.5 加入特性 827
21.1.6 加入事件 835
21.1.7 加入自定义的方法 840
21.1.8 构造和析构 840
21.1.9 注册元件 842
21.1.10 测试元件 844
21.1.11 提供元件图标 846
21.2.1 扩展Win32控件外套的功能 847
21.2 一个范例元件 847
21.2.2 TddgRunButton——创建特性 856
21.3 TddgButtonEdit——一个容器元件 861
21.3.1 设计 862
21.3.2 显现特性 862
21.3.3 显现事件 863
21.3.4 TddgDigitalClock——加入新的事件 866
21.3.5 把Form加到元件选项板上 870
21.4 元件包 872
21.4.1 为什么使用包 872
21.4.4 包文件 873
21.4.2 什么情况下不使用包 873
21.4.3 包的类型 873
21.4.5 在Delphi4程序中使用包 874
21.4.6 把包安装到IDE中 874
21.4.7 设计您自己的包 875
21.4.8 包的版本 878
21.4.9 包的编译指令 879
21.4.10 关于{$WEAKPACKAGEUNIT}指令 879
21.4.11 包的命名约定 880
22.1.1 扩展提示功能 881
22.1 伪可视元件 881
第二十二章 高级元件技术 881
22.1.2 创建一个THintWindow的派生类 882
22.1.3 椭圆型的窗口 884
22.1.4 使自定义的提示窗口有效 885
22.1.5 发布TddgHintWindow元件 885
22.2 动态效果的元件 885
22.2.2 游动的元件 885
22.2.3 编写这个元件 886
22.2.2 在内存中的位图上输出 886
22.2.5 开始游动 888
22.2.4 在元件上输出 888
22.2.6 测试TddgMarquee元件 899
22.3 编写特性编辑器 901
22.3.1 派生出一个特性编辑器对象 902
22.3.2 把特性当作文本来编辑 903
22.3.3 注册新的特性编辑器 906
22.3.4 用对话框来编辑特性 908
22.4 元件编辑器 910
22.4.1 TComponentEditor 911
22.4.2 一个简单的元件 912
22.4.3 一个简单的元件编辑器 912
22.4.4 注册元件编辑器 913
22.5.1 声明特性 916
22.5 对非公布的数据进行流操作 916
22.5.2 DefineProperty()的例子 917
22.5.3 TddgWaveFile:调用DefineBinaryProperty()的例子 919
22.6 元件的列表:TCollection和TCollectionItem 930
22.6.1 声明TCollectionItem类:TRunBtnItem 932
22.6.2 声明TCollection类:TRunButtons 933
22.6.3 实现TddgLaunchPa、TRunBtnItem和TRunButtons 933
22.6.4 编辑一组TCollectionItem对象的列表 941
23.1 OLE基础 949
第二十三章 COM和ActiveX 949
23.1.1 组件对象模型 950
23.1.2 COM、ActiveX与OLE的异同 950
23.1.3 术语 950
23.1.4 ActiveX有什么伟大之处 951
23.1.5 OLE1与OLE2 951
23.1.6 结构化存储 951
23.1.7 统一数据传输 951
23.2.1 接口 952
23.2 COM与Object Pascal 952
23.1.9 预期:COM+ 952
23.1.8 线程模式 952
23.2.2 使用接口 954
23.2.3 HResult类型 959
23.3 COM对象和类工厂 959
23.3.1 TComObject和TComObjectFactory 960
23.3.2 In-Process COM服务器 961
23.3.3 创建In-Process COM服务器的实例 962
23.3.4 Out-of-Process COM服务器 963
23.5 Automation 964
23.4 分布式COM 964
23.3.5 聚合 964
23.5.1 IDispatch接口 965
23.5.2 类型信息 966
23.5.3 推后捆绑与早期捆绑 966
23.5.4 注册 966
23.5.5 创建Automation服务器 967
23.5.6 创建Automation控制器 980
23.6 TOleContainer 989
23.6.1 一个简单的范例程序 989
23.6.2 一个稍复杂的范例程序 991
24.1 托盘图标 1005
24.1.1 API 1005
第二十四章 扩展Windows Shell 1005
24.1.2 处理消息 1008
24.1.3 图标及提示 1009
24.1.4 鼠标点击 1009
24.1.5 将应用程序隐藏起来 1011
24.1.6 一个托盘图标的例子 1018
24.2 应用程序桌面工具栏 1021
24.2.1 API 1021
24.2.2 TAppBar:AppBar的Form 1022
24.2.3 使用TAppBar 1032
24.3 外壳链接 1036
24.3.1 获取IShellLink的实例 1037
24.3.2 使用IShellLink 1037
24.3.3 创建一个外壳链接 1039
24.3.4 获取及设置链接信息 1040
24.3.5 一个例子 1045
24.4 外壳扩展 1054
24.4.1 COM对象向导 1055
24.4.2 复制钩子句柄 1055
24.4.3 上下文菜单处理 1061
24.4.4 图标句柄 1071
25.1 为什么要创建ActiveX控件 1081
第二十五章 创建ActiveX控件 1081
25.2 创建ActiveX控件 1082
25.2.1 ActiveX控件向导 1083
25.2.2 ActiveX框架 1116
25.2.3 特性页 1119
25.3 ActiveForm 1133
25.3.1 在ActiveForm中加入特性 1133
25.4 Web上的ActiveX 1143
25.4.1 与Web浏览器交互 1143
25.4.2 Web分发 1154
26.1 Open Tools API的接口 1159
第二十六章 Open Tools API 1159
26.2 使用Open Tools API 1160
26.2.1 一个叫Dumb的专家 1161
26.2.2 Expert专家 1164
26.2.3 DDG Search 1176
26.3 Form专家 1191
第四部分 数据库开发 1199
第二十七章 编写桌面数据库应用程序 1199
27.1 使用数据集 1200
27.1.1 VCL数据库体系结构 1200
27.1.3 打开一个数据集 1201
27.1.2 BDE数据访问元件 1201
27.1.4 浏览数据集 1202
27.1.5 对字段的操作 1208
27.1.6 刷新数据集 1222
27.1.7 变化的状态 1223
27.1.8 过滤器 1223
27.2 使用TTable元件 1225
27.2.1 查找记录 1226
27.2.2 主/细表 1228
27.2.3 TTable的事件 1230
27.2.4 通过代码创建一个数据库表 1230
27.4.1 数据模块 1232
27.3 数据模块 1232
27.4 搜索、设置范围和过滤的示例 1232
27.4.2 主Form 1233
27.4.3 Range Form 1236
27.4.4 Key Serach Form 1238
27.4.5 Filter Form 1241
27.5 TQuery和TStoredProc:其他数据集 1245
27.6 文本文件 1245
27.6.1 计划文件 1245
27.6.2 数据文件 1247
27.6.4 限制 1248
27.6.3 使用文本数据库 1248
27.7 用ODBC连接 1249
27.7.1 到哪找到ODBC驱动程序 1249
27.7.2 ODBC实例:连接MS Access 1249
27.6.5 从文本数据库表中引入数据 1249
第二十八章 开发客户/服务器应用程序 1255
28.1 为什么要采用客户/服务器模式 1256
28.2 客户/服务器体系结构 1256
28.2.2 服务器 1257
28.2.3 业务规则 1257
28.2.1 客户 1257
28.2.4 胖客户、胖服务器、中间层:业务规则究竟属于哪一端 1258
28.3 客户/服务器模型 1259
28.3.1 两层模型 1260
28.3.2 三层模型 1261
28.4 Client/Server与桌面数据库开发的比较 1261
28.4.1 面向子集与面向记录 1261
28.4.2 数据安全性 1262
28.4.3 记录锁定方法 1262
28.4.4 数据完整性 1262
28.5 SQL:在客户/服务器开发中的角色 1263
28.4.5 面向事务 1263
28.7 服务器:设计后端 1264
28.6 Delphi Client/Server开发 1264
28.7.1 数据库对象 1265
28.7.2 定义数据库表 1265
28.7.3 使用域 1268
28.7.4 用视图、存储过程和触发器定义业务规则 1268
28.7.5 对数据库对象的访问权限 1274
28.8 客户:设计前端 1276
28.8.1 使用TDatabase元件 1276
28.8.2 执行存储过程 1293
29.1.1 BDE单元 1297
第二十九章 扩展数据库VCL 1297
29.1 使用BDE 1297
29.1.2 Check() 1298
29.1.3 游标和句柄 1298
29.1.4 使游标同步 1299
29.2 dBASE表 1299
29.2.1 物理记录编号 1299
29.2.2 显示被删除的记录 1300
29.2.3 测试被软删除的记录 1301
29.2.5 紧缩 1302
29.2.4 恢复被软删除的记录 1302
29.3 Paradox表 1303
29.3.1 记录序号 1303
29.3.2 紧缩 1304
29.3.3 限制查询结果 1311
29.3.4 BDE杂项 1312
29.3.5 编写数据感知控件 1318
29.4 扩展TDataSet 1323
29.4.1 过去 1323
29.4.2 现在 1323
29.4.3 创建一个TDataSet派生类 1324
第三十章 使用WebBroker技术 1351
30.1 ISAPI、NSAPI和CGI——Web服务器扩展 1352
30.1.1 公共网关接口(CGI) 1352
30.1.2 ISAPI和NSAPI 1353
30.1.3 使用Web服务器 1353
30.2 用Delphi创建Web应用程序 1354
30.2.1 TWebModule和TWebDispatcher 1354
30.2.2 TWebRequest和TWebResponse 1357
30.3 用HTML内容生成器建立动态网页 1360
30.3.1 TPageProducer 1360
30.3.2 TDataSetTableProducer和TQueryTableProducer 1363
30.4 使用COOKIE 1368
30.5 重定向到另一个Web站点 1371
30.6 从HTML表单中获取信息 1372
30.7 数据流 1374
30.7.1 数据流的例子 1375
第三十一章 MIDAS开发 1379
31.1 分布式应用程序基础 1379
31.2 一个简单的MIDAS应用程序 1381
31.2.1 建立应用服务器 1381
31.2.2 建立客户程序 1385
31.2.3 保存修改了的数据 1386
31.3 分布式主细关系 1386
31.4 公文包模式:把数据带上路 1387
31.5 连接缓冲池:解决一些问题的方案 1388
31.6 实例化:您希望有多少个服务器 1394
31.7 回调:客户现在是服务器 1394
31.8 安全 1396
第五部分 快速数据库应用程序开发 1401
第三十二章 货物管理程序——Client/Server开发 1401
32.1 设计后端 1402
32.1.1 定义域 1403
32.1.2 定义表 1404
32.1.3 定义生成器 1406
32.1.4 定义触发器 1406
32.1.5 定义存储过程 1407
31.2.6 授予权限 1409
32.2 集中数据库访问——商业规则 1409
32.2.1 Login()/Logout()方法 1422
32.2.2 Customer表的方法 1423
32.2.4 SALES表的方法 1424
32.2.3 PART表的方法 1424
32.2.5 临时表的方法 1425
32.3 设计用户界面 1426
32.3.1 TMainForm——应用程序的主Form 1426
32.3.2 TCustomerForm——客户输入 1431
32.3.3 TPartForm——条目输入 1437
32.3.4 TSalesForm——销售浏览 1442
32.3.5 TNewSalesForm——销售输入 1443
32.3.6 客户搜索对话框 1447
第三十三章 客户跟踪系统:MIDAS开发 1455
33.1 设计服务器程序 1455
33.2.1 客户端数据模块 1459
33.2 设计客户程序 1459
33.2.2 主Form 1469
第三十四章 错误报告工具——桌面数据库应用程序 1479
34.1 通用应用程序需求 1479
34.1.1 使程序可以在WWW上使用 1479
34.1.2 用户数据输入和登录 1480
34.1.3 错误处理、浏览和过滤 1480
34.1.4 错误注解 1480
34.1.5 其他U/I功能 1480
34.2 数据模型 1480
34.3 开发数据模块 1481
34.3.1 应用程序初始化和登录 1494
34.3.2 生成ID 1494
34.3.3 错误处理例程 1495
34.3.4 浏览和过滤记录 1495
34.3.5 增加用户 1495
34.3.6 加入注解 1498
34.4 开发用户界面 1499
34.4.1 主Form 1499
34.4.2 其他用户界面 1508
34.5 使程序具有Web功能 1508
35.1 网页布局 1509
第三十五章 错误报告工具:使用WebBroker 1509
35.2 修改数据模块 1510
35.3 创建TDataSetTableProducer元件:dstpBugs 1511
35.4 创建TWebDispatcher元件:wbdpBugs 1511
35.5 创建TPageProducer元件:pprdBugs 1512
35.6 编写ISAPI服务器——加入TActionItem 1512
35.6.1 辅助例程 1513
35.6.2 介绍网页 1514
35.6.3 获取和校验用户登录的名称 1515
35.7 浏览错误报告 1519
35.7.1 浏览所有的错误报告 1520
35.7.2 浏览用户自己输入的错误报告 1521
35.7.3 格式化表格单元并显示错误细节 1523
35.8 加入新的错误报告 1525
35.8.1 获取错误信息 1525
35.8.2 校验插入的记录 1527
附录A 错误信息与异常 1533
A.1 处理层和安全层 1533
A.2 运行期错误 1534
A.2.1 异常 1534
A.2.2 Win32系统错误 1538
附录B BDE错误代码 1559