Delphi 的知识体系

时间:2024-08-12 21:34:56

第一部分   快速开发的基础
  第1章   Delphi 5下的Windows编程    1
    1.1   Delphi产品家族    1
    1.2  Delphi是什么    3
      1.2.1   可视化开发环境    3
      1.2.2   编译器的速度和已编译代码的效率    4 
      1.2.3   编程语言的功能及其复杂性    4
      1.2.4   数据库结构的灵活性和可扩展性    5
      1.2.5   框架对设计和使用模式的扩充    5
    1.3   历史回顾    5
      1.3.1   Delphi 1    5
      1.3.2   Delphi 2    6
      1.3.3   Delphi 3    6
      1.3.4   Delphi 4    7
      1.3.5   Delphi 5    7
      1.3.6   未来    7
    1.4   Delphi 5的IDE    7
      1.4.1   主窗口    8
      1.4.2   窗体设计器    9
      1.4.3   Object Inspector    9
      1.4.4   代码编辑器    9
      1.4.5   代码浏览器    10
      1.4.6   源代码生成器    10
    1.5   创建一个简单的应用程序    11
    1.6   事件机制的优势在哪里    12
    1.7   加速原型化    13
    1.8   可扩展的组件和环境    13
    1.9   IDE最重要的十点功能    13
    1.10   总结    15
  第2章   Object Pascal语言    16
    2.1   注解    16
    2.2   新的过程和函数特征    17
      2.2.1   圆括号    17
      2.2.2   重载    17
      2.2.3   缺省值参数    17
    2.3   变量    18
    2.4   常量    19
    2.5   运算符    20
      2.5.1   赋值运算符    20
      2.5.2   比较运算符    20
      2.5.3   逻辑表达式    21
      2.5.4   算术运算符    21
      2.5.5   按位运算符    22
      2.5.6   加减运算过程    22
    2.6   Object Pascal类型    23
      2.6.1   类型的比较    23
      2.6.2   字符    24
      2.6.3   字符串    24
      2.6.4   变体类型    32
      2.6.5   Currency    39
    2.7   用户自定义类型    39
      2.7.1   数组    39
      2.7.2   动态数组    40
      2.7.3   记录    41
      2.7.4   集合    42
      2.7.5   对象    43
      2.7.6   指针    44
      2.7.7   类型别名    46
    2.8   强制类型转换和类型约定    46
    2.9   字符串资源    47
    2.10   测试条件    47
      2.10.1   if语句    47
      2.10.2   case语句    48
    2.11   循环    49
      2.11.1   for循环    49
      2.11.2   while循环    49
      2.11.3   repeat...until    50
      2.11.4   Break()过程    50
      2.11.5   Continue()过程    50
    2.12   过程和函数    50
    2.13   作用域    50
    2.14   单元    55
      2.14.1   uses子句    55
      2.14.2   循环单元引用    56
    2.15   包    56
      2.15.1   使用Delphi的包    56
      2.15.2   包的语法    56
    2.16   面向对象编程    57
    2.17   使用Delphi对象    58
      2.17.1   声明和实例化    58
      2.17.2   析构    59
    2.18   方法    59
      2.18.1   方法的类型    60
      2.18.2   属性    61
      2.18.3   可见性表示符    62
      2.18.4   友类    62
      2.18.5   对象的秘密    63
      2.18.6   TObject:所有对象的祖先    63
      2.18.7   接口    63
    2.19   结构化异常处理    66
      2.19.1   异常类    68
      2.19.2   执行的流程    70
      2.19.3   重新触发异常    71
    2.20   运行期类型信息    72
    2.21   总结    72
  第3章   Win32 API    73
    3.1   对象:以前和现在    73
      3.1.1   内核对象    73
      3.1.2   GDI和用户对象    75
    3.2   多任务和多线程    75
    3.3   Win32内存管理    76
      3.3.1   什么是线性内存模式    76
      3.3.2   Win32系统是怎样管理内存的    76
    3.4   Win32的错误处理    78
    3.5   总结    78
  第4章   应用程序框架和设计    79
    4.1   理解Delphi环境和项目的体系结构    79
    4.2  构成Delphi 5项目的文件    79
      4.2.1   项目文件    80
      4.2.2   单元文件    80
      4.2.3   窗体文件    80
      4.2.4   资源文件    81
      4.2.5   项目选项及桌面设置文件    81
      4.2.6   备份文件    81
      4.2.7   包文件    82
    4.3   项目管理提示    82
      4.3.1   一个项目一个目录    82
      4.3.2   共享代码的单元    82
      4.3.3   多项目管理    84
    4.4   Delphi 5项目的框架类    84
      4.4.1   TForm类    84
      4.4.2   TApplication类    89
      4.4.3   TApplication的方法    91
      4.4.4   TApplication的事件    92
      4.4.5   TScreen类    93
    4.5   定义公共体系结构:使用对象库    93
      4.5.1   考虑应用程序的体系结构    93
      4.5.2   Delphi固有的体系结构    94
      4.5.3   体系结构的例子    94
      4.5.4   子窗体TChildForm    94
      4.5.5   数据库基础模式窗体TDBMode- Form    96 
             4.5.6   数据库导航/状态窗体TDBNavstat- Form    97 
             4.5.7   使用框架进行应用程序结构设计    102
           4.6   一些项目管理的功能    103
      4.6.1   在项目中添加资源    103
      4.6.2   改变屏幕光标    105
      4.6.3   避免创建一个窗体的多个实例    106
      4.6.4   在DPR文件中增加代码    107
      4.6.5   覆盖应用程序的异常处理    107
      4.6.6   显示一个封面    109
      4.6.7   使窗体尺寸最小    110
      4.6.8   运行没有窗体的项目    111
      4.6.9   退出Windows    112
      4.6.10   防止关闭Windows    113
    4.7   总结    113
第5章   理解Windows消息    114
5.1   什么是消息    114
5.2   消息的类型    115
5.3   Windows消息系统是如何工作的    115
5.4    Delphi的消息系统    116
5.5   消息处理    117
5.5.1   消息处理:不是无约定的    118
5.5.2   对Result域赋值    119
5.5.3   TApplication的OnMessage事件    119
5.6   发送自己的消息    120
5.6.1   Perform()    120
5.6.2   sendMessage()和PostMessage()    120
5.7   非标准的消息    121
5.7.1   通知消息    121
5.7.2   VCL内部的消息    122
5.7.3   用户自定义的消息    122
5.8   一个消息系统的剖析:VCL    123
5.9   消息与事件之间的关系    128
5.10   总结    129
第6章   代码标准文档    130
6.1   一般的源代码格式规则    130
6.1.1   缩进    130
6.1.2   边距    130
6.1.3   begin...end    130
6.2   Object Pascal    131
6.2.1   括号    131
6.2.2   保留字和关键字    131
6.2.3   过程和函数    131
6.2.4   变量    132
6.2.5   类型    133
6.2.6   构造类型    133
6.2.7   语句    134
6.2.8   结构化异常处理    134
6.2.9   类    135
6.3   文件    136
6.3.1   项目文件    136
6.3.2   窗体文件    136
6.3.3   数据模块文件    137
6.3.4   远程数据模块文件    137
6.3.5   单元文件    137
6.3.6   文件头    138
6.4   窗体与数据模块    138
6.4.1   窗体    138
6.4.2   数据模块    139
6.5   包    139
6.5.1   运行期包与设计期包    139
6.5.2   文件命名标准    140
6.6   组件    140
6.6.1   自定义组件    140
6.6.2   组件实例的命名规则    140
6.7   代码标准文档升级    141
第7章   使用ActiveX控件    142
7.1   什么是ActiveX控件    142
7.2   何时使用ActiveX控件    142
7.3   把ActiveX控件加到组件面板上    143
7.4   Delphi组件外套    144
7.4.1   外套文件是从哪来的    152
7.4.2   枚举    152
7.4.3   控件接口    152
7.4.4   TOleControl的派生类    152
7.4.5   方法    152
7.4.6   属性    153
7.5   在应用程序中使用ActiveX控件    153
7.6   发布带有ActiveX控件的应用程序    154
7.7   注册ActiveX控件    155
7.8   BlackJack:一个OCX示范程序    155
7.8.1   纸牌    155
7.8.2   游戏    157
7.8.3   调用ActiveX控件的方法    165
7.9   总结    166
第二部分   高级技术
第8章   使用GDI和字体的图像编程    167
8.1   TImage:Delphi的图像显示    167
8.2   存储图像    168
8.3   使用TCanvas的属性    169
8.3.1   画笔    170
8.3.2   使用TCanvas.Pixels属性    175
8.3.3   使用刷子    175
8.3.4   使用字体    180
8.3.5   使用CopyMode属性    181
8.3.6   其他属性    184
8.4   使用TCanvas的方法    184
8.4.1   用TCanvas画线    184
8.4.2   用TCanvas画几何形状    185
8.4.3   画图的示范程序    185
8.4.4   用TCanvas输出文字    189
8.5   坐标系统和映射模式    193
8.5.1   设备坐标系    193
8.5.2   逻辑坐标系    194
8.5.3   屏幕坐标系    194
8.5.4   窗体坐标系    194
8.5.5   坐标映射    195
8.5.6   设置映射模式    196
8.5.7   设置窗口/视区范围    196
8.5.8   关于映射模式的示范程序    197
8.6   创建一个绘画程序    202
8.7   编写动画程序    215
8.8   高级字体    221
8.8.1   Win32字体类型    222
8.8.2   基本字体元素    222
8.8.3   GDI字体分类    223
8.8.4   显示不同字体    223
8.9   实际创建一种字体    224
8.9.1   这个程序是如何工作的    224
8.9.2   显示字体的有关信息    230
8.10   总结    233
第9章   动态链接库    234
9.1   究竟什么是DLL    234
9.2   静态链接与动态链接    235
9.3   为什么要使用DLL    236
9.3.1   共享代码、资源和数据    236
9.3.2   隐藏实现的细节    237
9.3.3   自定义控件    237
9.4   创建和使用DLL    237
9.4.1   数美分:一个简单的DLL    237
9.4.2   显示DLL中的模式窗体    239
9.5   显示DLL中的无模式窗体    241
9.6   在Delphi应用程序中使用DLL    242
9.7   DLL的入口函数和出口函数    246
9.7.1   进程/线程初始化和终止例程    246
9.7.2   DLL入口/出口示例    246
9.8   DLL中的异常    250
9.8.1   在16位Delphi中捕捉异常    250
9.8.2   异常和Safecall指示符    250
9.9   回调函数    250
9.9.1   使用回调函数    253
9.9.2   拥有者绘制的列表框    253
9.10   从DLL中调用回调函数    253
9.11   在不同的进程间共享DLL数据    256
9.11.1   一个可以被共享数据的DLL    256
9.11.2   访问DLL中的共享数据    259
9.12   引出DLL中的对象    261
9.13   总结    265
第10章   Delphi 5的打印    266
10.1   TPrinter对象    266
10.2   TPrinter.Canvas    267
10.3   简单打印    267
10.3.1   打印TMemo组件中的内容    267
10.3.2   打印位图    268
10.3.3   打印RTF格式的文本    269
10.4   打印窗体    269
10.5   高级打印    270
10.5.1   打印分栏报表    270
10.5.2   放弃打印进程    275
10.5.3   打印信封    275
10.5.4   抽象打印    276
10.5.5   一个简单的打印预览程序    285
10.6   其他打印任务    286
10.6.1   TDeviceMode结构    286
10.6.2   设置打印份数    288
10.6.3   设置打印方向    288
10.6.4   设置纸张尺寸    288
10.6.5   设置纸张的长度    289
10.6.6   设置页的宽度    289
10.6.7   设置打印比例    289
10.6.8   设置打印颜色    289
10.6.9   设置打印质量    289
10.6.10   设置双面打印    290
10.6.11   指定默认打印机    290
10.7   获取打印机信息    291
10.7.1   GetDeviceCaps()和DeviceCapa-
             bilities()    292
10.7.2   获取打印机信息的示范程序    292
10.8   总结    303
第11章   编写多线程应用程序    304
11.1   对线程的解释    304
11.1.1   一种新型的多任务    304
11.1.2   在Delphi程序中使用多线程    304
11.1.3   关于线程的滥用    305
11.2   TThread对象    305
11.2.1   TThread基础    305
11.2.2   TThread实例    307
11.2.3   线程的终止    307
11.2.4   与VCL同步    308
11.2.5   一个演示程序    310
11.2.6   优先级和时序安排    311
11.2.7   挂起和唤醒线程    313
11.2.8   测试线程的时间    313
11.3   管理多线程    314
11.3.1   线程局部存储    314
11.3.2   线程同步    317
11.4   一个多线程的示范程序    325
11.4.1   用户界面    326
11.4.2   搜索线程    330
11.4.3   调整优先级    334
11.5   多线程与数据库    335
11.6   多线程与图形处理    340
11.7   总结    343
第12章   文件处理    344
12.1   处理文件的输入/输出    344
12.1.1   文本文件的处理    344
12.1.2   类型文件的处理    348
12.1.3   无类型文件的处理    356
12.2   TTextRec 和TFileRec结构    359
12.3   内存映射文件    360
12.3.1   内存映射文件的应用    360
12.3.2   使用映射文件    361
12.3.3   内存映射文件的一致性    366
12.3.4   文本搜索实用程序    366
12.4   目录和驱动器    373
12.4.1   获得有效驱动器和驱动器类型列
             表    373
12.4.2   获取驱动器信息    374
12.4.3   获取Windows目录位置    376
12.4.4   获取系统目录的位置    376
12.4.5   获取当前目录    377
12.4.6   在目录中查找文件    377
12.4.7   复制和删除目录树    380
12.4.8   获取文件的版本信息    382
12.4.9   获取版本号    387
12.4.10   获得操作系统信息    388
12.4.11   使用TVerInfoRes类    388
12.5   使用SHFileOperation()函数    390
12.6   总结    391
第13章   核心技术    392
13.1   高级消息处理    392
13.1.1   子类化    392
13.1.2   HookMainWindow()    396
13.2   防止同时出现多个应用程序实例    397
13.3   使用Delphi的BASM    401
13.3.1   BASM是如何工作的    401
13.3.2   简易的参数访问    402
13.3.3   var声明的参数    402
13.3.4   Register调用约定    403
13.3.5   全汇编过程    403
13.3.6   记录    403
13.4   使用挂钩    404
13.4.1   设置挂钩    404
13.4.2   使用挂钩函数    405
13.4.3   使用脱钩函数    405
13.4.4   使用SendKeys:一个JournalPlay-
             back类型的挂钩    405
13.5   使用C/C++的OBJ文件    416
13.5.1   调用一个函数    416
13.5.2   命名问题    417
13.5.3   共享数据    417
13.5.4   使用Delphi RTL    418
13.6   使用C++类    422
13.7   替换    426
13.7.1   generic替换    426
13.7.2   WM_COPYDATA    435
13.8   获取包的信息    440
13.9   总结    443
第14章   获取系统信息    444
14.1   InfoForm:获取一般信息    444
14.1.1   格式化字符串    444
14.1.2   获取内存状态    445
14.1.3   获取操作系统版本信息    446
14.1.4   获取目录信息    447
14.1.5   获取系统信息    448
14.1.6   检查环境    450
14.2   平台无关性    455
14.3   Windows 95/98: 使用ToolHelp32    455
14.3.1   快照    456
14.3.2   列举进程    457
14.3.3   列举线程    460
14.3.4   列举模块    461
14.3.5   列举堆    462
14.3.6   堆的视图    465
14.3.7   程序源码    466
14.4   Windows NT/2000: PSAPI    474
14.5   总结    485
第15章   移植到Delphi 5    486
15.1   Delphi 5的新功能    486
15.1.1   哪个版本    486
15.1.2   单元、组件和包    487
15.2   从Delphi 4移植到Delphi 5    487
15.2.1   IDE问题    488
15.2.2   RTL问题    488
15.2.3   VCL问题    488
15.2.4   Internet开发问题    488
15.2.5   数据库问题    488
15.3   从Delphi 3移植到Delphi 5    489
15.3.1   无符号的32位整数    489
15.3.2   64位整数    490
15.3.3   Real类型    490
15.4   从Delphi 2移植到Delphi 5    490
15.4.1   改变为Boolean类型    490
15.4.2   ResourceString    490
15.4.3   RTL的改变    491
15.4.4   TCustomForm    491
15.4.5   GetChildren()    491
15.4.6   自动化服务器    491
15.5   从Delphi 1移植到Delphi 5    491
15.5.1   字符串和字符    492
15.5.2   变量长度和范围    497
15.5.3   记录的排列    497
15.5.4   32位的数学运算    498
15.5.5   TDateTime类    498
15.5.6   单元结束代码    498
15.5.7   汇编语言    499
15.5.8   调用约定    499
15.5.9   动态链接库    500
15.5.10   Windows操作系统的变化    501
15.5.11   32位的地址空间    501
15.5.12   32位资源    501
15.5.13   VBX控件    502
15.5.14   Windows API函数的变化    502
15.5.15   16位和32位并存    504
15.6   总结    504
第16章   MDI应用程序    505
16.1   创建MDI应用程序    505
16.1.1   理解MDI基础    505
16.1.2   子窗体    506
16.1.3   主窗体    522
16.2   菜单    528
16.2.1   用MDI程序合并菜单    528
16.2.2   在菜单中列出打开的文档    528
16.3   杂类MDI技术    529
16.3.1   在MDI客户区输出一幅位图    529
16.3.2   创建一个隐藏的子窗体    534
16.3.3   最小化、最大化、还原所有MDI
             子窗体    536
16.4   总结    538
第17章   用剪贴板共享信息    539
17.1   剪贴板基础    539
17.1.1   剪贴板对文本操作    540
17.1.2   剪贴板对位图操作    540
17.2   创建你自己的剪贴板格式    541
17.2.1   创建一个感知剪贴板的对象    541
17.2.2   使用自定义的剪贴板格式    545
17.3   总结    547
第18章   多媒体编程    548
18.1   创建一个简单的媒体播放器    548
18.2   播放WAV文件    549
18.3   播放视频    550
18.3.1   显示第一帧    550
18.3.2   使用Display属性    551
18.3.3   使用DisplayRect属性    551
18.3.4   理解TMediaPlayer事件    552
18.3.5   DDGMPlay的源代码    552
18.4   设备支持    553
18.5   创建音频CD播放器    554
18.5.1   显示闪屏    555
18.5.2   开始编写CD播放器    555
18.5.3   更新CD播放器的信息    557
18.5.4   刷新CD播放器的方法    558
18.5.5   CD播放器的源代码    559
18.6   总结    565
第19章   测试与调试    566
19.1   常见的编程错误    567
19.1.1   在类的实例创建之前使用了它    567
19.1.2   确保类的实例被释放    567
19.1.3   掌握指针    568
19.1.4   使用未初始化的PChar类变量    568
19.1.5   释放空指针    569
19.2   使用内部集成调试器    569
19.2.1   使用命令行参数    569
19.2.2   断点    569
19.2.3   逐行执行代码    571
19.2.4   使用Watch窗口    572
19.2.5  Debug Inspector    572
19.2.6   计算和修改    572
19.2.7   访问调用栈    572
19.2.8   查看线程    573
19.2.9   事件日志    573
19.2.10   模块视图    574
19.2.11   调试DLL    574
19.2.12   CPU视图    575
19.3   总结    575
第三部分   基于组件的开发
第20章   VCL元素和运行期类型信息    577
20.1   什么是组件    577
20.2   组件的类型    578
20.2.1   标准控件    578
20.2.2   自定义控件    578
20.2.3   图形控件    578
20.2.4   非可视组件    579
20.3   组件的结构    579
20.3.1   属性    579
20.3.2   属性的类型    580
20.3.3   方法    580
20.3.4   事件    581
20.3.5   流属性    582
20.3.6   拥有关系    582
20.3.7   父子关系    583
20.4   可视组件的层次关系    583
20.4.1   TPersistent类    584
20.4.2   TComponent类    584
20.4.3   TControl类    585
20.4.4   TWinControl类    585
20.4.5   TGraphicControl类    586
20.4.6   TCustomControl类    586
20.4.7   其他类    587
20.5   运行期类型信息    589
20.5.1   TypInfo.pas单元:定义运行类型
             信息    589
20.5.2   获取类型信息    591
20.5.3   获取方法指针的类型信息    596
20.5.4   获取有序类型的类型信息    600
20.5.5   通过RTTI给属性赋值    604
20.6   总结    606
第21章   编写自定义组件    607
21.1   组件设计基础    607
21.1.1   确定是否需要编写组件    607
21.1.2   编写组件的一般步骤    607
21.1.3   确定一个祖先类    608
21.1.4   创建一个组件单元    609
21.1.5   添加属性    609
21.1.6   加入事件    615
21.1.7   创建自定义的方法    619
21.1.8   构造器和析构器    619
21.1.9   注册组件    620
21.1.10   测试组件    621
21.1.11   提供组件图标    623
21.2   一个组件的示例    623
21.2.1   扩展Win32组件外套功能    624
21.2.2   TddgRunButton: 创建属性    631
21.3   TddgButtonEdit:一个容器组件    636
21.3.1   设计    636
21.3.2   显现属性    637
21.3.3   显现事件    637
21.3.4   TddgDigitalClock:创建组件事
             件    639
21.3.5   把窗体加到组件面板上    642
21.4   组件包    644
21.4.1   为什么使用包    644
21.4.2   什么情况下不使用包    645
21.4.3   包的类型    645
21.4.4   包文件    645
21.4.5   在Delphi 5应用程序中使用包    645
21.4.6   把包安装到IDE中    645
21.4.7   设计自己的包    646
21.4.8   包的版本    649
21.4.9   包的编译指令    649
21.4.10   关于{$WEAKPACKAGEUNIT}
               指令    649
21.4.11   包的命名约定    650
21.5   附加包    650
21.6   总结    655
第22章   高级组件技术    656
22.1   伪可视组件    656
22.1.1   扩展提示功能    656
22.1.2   创建一个THintWindow的派生
             类    656
22.1.3   椭圆型的窗口    658
22.1.4   使派生的提示窗口有效    659
22.1.5   放置TDDGHintWindow    659
22.2   动态组件    659
22.2.1   走马灯组件    659
22.2.2   编写这个组件    659
22.2.3   在内存中的位图上输出    659
22.2.4   输出组件    661
22.2.5   使组件动起来    661
22.2.6   测试TddgMarquee组件    668
22.3   编写属性编辑器    670
22.3.1   派生出一个属性编辑器对象    670
22.3.2   把属性当作文本来编辑    671
22.3.3   注册新的属性编辑器    674
22.3.4   用对话框来编辑属性    675
22.4   组件编辑器    677
22.4.1   TComponentEditor    677
22.4.2   一个简单的组件    678
22.4.3   一个简单的组件编辑器    679
22.4.4   注册组件编辑器    679
22.5   对非公开的组件数据进行流操作    681
22.5.1   声明属性    681
22.5.2   DefineProperty()的例子    682
22.5.3   TddgWaveFile:调用Define-
             BinaryProperty()的例子    684
22.6   属性类别    690
22.6.1   类别的类    690
22.6.2   自定义类别    691
22.7   组件列表:TCollection和
       TCollectionItem    694
22.7.1   声明TCollectionItem类:
             TRunBtnItem    695
22.7.2   声明TCollection类:
             TRunButtons    696
22.7.3   实现TddgLaunchPad、TRun-
             BtnItem和TRunButtons    696
22.7.4   用对话框属性编辑器编辑
             TCollectionItem组件的列表    702
22.8   总结    711
第23章   COM和ActiveX    712
23.1   COM基础    712
23.1.1   COM:组件对象模型    712
23.1.2   COM、ActiveX、OLE的异同    713
23.1.3   术语    713
23.1.4   ActiveX的伟大之处    713
23.1.5   OLE 1和OLE 2    713
23.1.6   结构化存储    714
23.1.7   统一数据传输    714
23.1.8   线程模式    714
23.1.9   COM+    714
23.2   COM与Object Pascal    714
23.2.1   接口    715
23.2.2   使用接口    716
23.2.3   HResult返回类型    719
23.3   COM对象和类工厂    720
23.3.1   TComObject和TComObject-
             Factory    720
23.3.2   in-process COM服务器    721
23.3.3   创建一个in-proc COM服务器实
             例    722
23.3.4   out-of-process COM服务器    723
23.4   聚合    723
23.5   分布式COM    723
23.6   自动化    724
23.6.1   IDispatch接口    724
23.6.2   类型信息    725
23.6.3   后期捆绑与前期捆绑    725
23.6.4   注册    725
23.6.5   创建自动化服务器    725
23.6.6   创建自动化控制器    740
23.7   高级自动化技术    745
23.7.1   自动化事件    745
23.7.2   自动化集合    754
23.7.3   类型库中新的接口类型    760
23.7.4   交换二进制数据    761
23.7.5   COM的语言支持    763
23.8   MTS    766
23.8.1   为什么会出现MTS    767
23.8.2   什么是MTS    767
23.8.3   Delphi中的MTS    770
23.9   TOleContainer    785
23.9.1   一个简单的范例程序    785
23.9.2   一个稍复杂的范例程序    787
23.10   总结    794
第24章   扩展Windows外壳    795
24.1   托盘图标组件    795
24.1.1   API    795
24.1.2   处理消息    797
24.1.3   图标及提示    797
24.1.4   鼠标点击    798
24.1.5   隐藏应用程序    799
24.1.6   托盘图标应用程序举例    805
24.2   应用程序桌面工具栏    807
24.2.1   API    807
24.2.2   TAppBar:AppBar的窗体    808
24.2.3   使用TAppBar    815
24.3   外壳链接    817
24.3.1   获取一个IShellLink实例    818
24.3.2   使用IShellLink    819
24.3.3   创建一个外壳链接    820
24.3.4   获取及设置链接信息    821
24.3.5   一个例子程序    824
24.4   外壳扩展    831
24.4.1   COM对象向导    832
24.4.2   复制钩子处理器    832
24.4.3   上下文菜单处理器    836
24.4.4   图标处理器    844
24.5   总结    850
第25章   创建ActiveX控件    851
25.1   为什么要创建ActiveX控件    851
25.2   创建一个ActiveX控件    851
25.2.1   ActiveX控件向导    852
25.2.2   ActiveX框架    875
25.2.3   属性页    877
25.3   ActiveForm    886
25.4   在Web上的ActiveX    892
25.4.1   与Web浏览器通信    892
25.4.2   Web发布    901
25.5   总结    903
第26章   使用Delphi Open Tools API    904
26.1   Open Tools API接口    904
26.2   使用Open Tools API    905
26.2.1   Dumb向导    905
26.2.2   Wizard向导    908
26.2.3   DDG Search    916
26.3   窗体向导    925
26.4   总结    931
第27章   使用Delphi开发CORBA    932
27.1   ORB    932
27.2   接口    932
27.3   Stub和Skeleton    933
27.4   VisiBroker的ORB    933
27.4.1   VisiBroker的运行时支持服务    933
27.4.2   VisiBroker管理工具    934
27.5   Delphi的CORBA支持    934
27.5.1   CORBA的类支持    935
27.5.2   CORBA对象向导    936
27.5.3   Delphi的类型库编辑器    941
27.6   在Delphi 5中创建CORBA解决方案    942
27.6.1   建立一个CORBA服务器    942
27.6.2   实现IQueryServer的方法    943
27.6.3   编译一个静态绑定的CORBA
             客户    956
27.6.4   编译一个动态绑定的CORBA
             客户    958
27.6.5   跨语言的CORBA    960
27.7   使用VisiBroker ORB    967
27.8   总结    967
第四部分   开发数据库
第28章   编写桌面数据库应用程序    969
28.1   使用数据集    969
28.1.1   VCL的数据库体系结构    970
28.1.2   BDE数据访问组件    970
28.1.3   打开一个数据集    971
28.1.4   浏览数据集    971
28.1.5   对字段操作    975
28.1.6   刷新数据集    985
28.1.7   变化的状态    986
28.1.8   过滤器    986
28.2   使用TTable组件    988
28.2.1   查找记录    988
28.2.2   主/细表    990
28.2.3   TTable的事件    990
28.2.4   通过代码创建一个数据库表    991
28.3   数据模块    992
28.4   搜索、设置范围和过滤的示例    992
28.4.1   数据模块    992
28.4.2   主窗体    993
28.4.3   Range窗体    995
28.4.4   Key Search窗体    996
28.4.5   Filter窗体    998
28.5   TQuery和TStoredProc:其他数据
          集    1000
28.6   文本文件数据库表    1001
28.6.1   概要文件    1001
28.6.2   数据文件    1002
28.6.3   使用文本数据库表    1002
28.6.4   限制    1003
28.6.5   从文本数据库表中引入数据    1003
28.7   用ODBC连接    1004
28.7.1   到哪儿找ODBC驱动程序    1004
28.7.2   ODBC实例:连接MS Access    1004
28.8   ActiveX Data Object    1007
28.8.1   Microsoft 数据访问简介    1007
28.8.2   ADOExpress组件    1008
28.8.3   连接一个ADO数据存储    1008
28.8.4   示例:通过ADO连接    1010
28.8.5   ADO开发    1011
28.9   总结    1011
第29章   开发客户/服务器应用程序    1012
29.1   为什么要采用客户/服务器结构    1012
29.2   客户/服务器体系结构    1013
29.2.1   客户    1013
29.2.2   服务器    1013
29.2.3   业务规则    1014
29.2.4   胖客户、胖服务器、中间层:业
             务规则属于哪一端    1014
29.3   客户/服务器模型    1015
29.3.1   两层模型    1015
29.3.2   三层模型    1016
29.4   客户/服务器与桌面数据库开发的比
       较    1017
29.4.1   面向集合与面向记录    1017
29.4.2   数据安全    1017
29.4.3   记录锁定方法    1017
29.4.4   数据完整性    1018
29.4.5   面向事务    1018
29.5   SQL在客户/服务器开发中的角色    1018
29.6   Delphi客户/服务器开发    1019
29.7   服务器:后端设计    1019
29.7.1   数据库对象    1019
29.7.2   定义数据库表    1020
29.7.3   使用域    1021
29.7.4   用视图、存储过程和触发器定义
             业务规则    1022
29.7.5   数据库对象的访问权限    1027
29.8   客户:前端开发    1028
29.8.1   使用TDatabase组件    1028
29.8.2   TTable还是TQuery    1034
29.8.3   使用TQuery组件    1036
29.8.4   执行存储过程    1041
29.9   总结    1043
第30章   扩展数据库VCL    1044
30.1   使用BDE    1044
30.1.1   BDE单元    1044
30.1.2   Check()    1044
30.1.3   指针和句柄    1045
30.1.4   使指针同步    1045
30.2   dBASE表    1045
30.2.1   物理记录编号    1046
30.2.2   显示被删除的记录    1047
30.2.3   测试被软删除的记录    1047
30.2.4   恢复被软删除的记录    1048
30.2.5   紧缩表    1048
30.3   Paradox表    1049
30.3.1   记录序号    1049
30.3.2   紧缩    1049
30.3.3   限制查询结果    1055
30.3.4   BDE杂项    1056
30.3.5   编写数据感知VCL控件    1059
30.4   扩展TDataSet    1063
30.4.1   过去    1063
30.4.2   现在    1063
30.4.3   创建一个TDataSet派生类    1064
30.5   总结    1083
第31章   用WebBroker使应用程序具有
         Internet功能    1084
31.1   ISAPI、NSAPI和CGI—Web服务
       器扩展    1085
31.1.1   公共网关接口    1085
31.1.2   ISAPI和NSAPI    1085
31.2   用Delphi创建Web应用程序    1086
31.2.1   TWebModule和TWeb-
             Dispatcher    1086
31.2.2   TWebRequest和TWeb-
             Response    1088
31.3   用HTML内容生成器建立动态网
       页    1091
31.3.1   TPageProducer    1091
31.3.2   TDatasetTableProducer和
             TQueryTableProducer    1092
31.4   使用cookie保存状态    1097
31.5   重定向到另一个Web站点    1099
31.6   从HTML表单中获取信息    1099
31.7   数据流    1101
31.8  总结    1104
第32章   MIDAS开发    1105
32.1   多层应用程序的结构    1105
32.2   多层体系结构的优点    1106
32.3   典型的MIDAS体系结构    1107
32.3.1   服务器    1107
32.3.2   客户    1109
32.4   用MIDAS建立应用程序    1110
32.4.1   设置服务器    1110
32.4.2   创建客户    1111
32.5   增强应用程序的更多选择    1115
32.5.1   客户优化技巧    1115
32.5.2   服务器端的技巧    1116
32.6   几个实例    1117
32.6.1   连接    1117
32.6.2   MIDAS的Web功能    1119
32.7   客户数据集的更多功能    1125
32.7.1   嵌套的数据集    1125
32.7.2   客户主/细连接    1125
32.7.3   两层应用程序    1130
32.8   部署MIDAS应用程序    1131
32.9   总结    1134
第五部分   快速开发数据库应用程序
第33章   货物管理程序:客户/服务器
         开发    1135
33.1   设计后端    1135
33.1.1   定义域    1136
33.1.2   定义表    1137
33.1.3   定义生成器    1138
33.1.4   定义触发器    1138
33.1.5   定义存储过程    1139
33.1.6   授权    1141
33.2   集中数据库访问:业务规则    1141
33.2.1   登录和退出方法    1150
33.2.2   Customer表的方法    1151
33.2.3   Part表的方法    1152
33.2.4   Sales表的方法    1152
33.2.5   临时表的方法    1153
33.2.6   TDataModule操纵数据访问
             组件的事件    1153
33.3   设计用户界面    1153
33.3.1   TMainForm:应用程序的主窗
             体    1154
33.3.2   TCustomerForm:客户输入    1158
33.3.3   TPartsForm: 货物输入    1161
33.3.4   TSalesForm: 销售浏览    1165
33.3.5   TNewSalesForm: 销售输入    1165
33.3.6   CustomerSearch对话框    1169
33.4   总结    1173
第34章   客户跟踪系统:MIDAS开发    1174
34.1   设计服务器应用程序    1174
34.2   设计客户应用程序    1176
34.2.1  客户数据模块    1176
34.2.2    客户主窗体    1184
34.3   总结    1190
第35章   错误报告工具:桌面数据库
         开发    1191
35.1   通用应用程序的需求    1191
35.1.1   为WWW做准备    1191
35.1.2   用户的数据输入和登录    1191
35.1.3   错误处理、浏览和过滤    1191
35.1.4   错误注解    1191
35.1.5   用户界面的功能    1192
35.2   数据模型    1192
35.3   开发数据模块    1192
35.3.1   应用程序初始化和登录    1201
35.3.2   生成Paradox关键值    1202
35.3.3   错误处理例程    1202
35.3.4   浏览/过滤错误    1202
35.3.5   增加用户    1202
35.3.6   加入注解    1204
35.4   开发用户界面    1205
35.4.1   主窗体    1205
35.4.2   用户界面的其他问题    1211
35.5   使应用程序具有Web功能    1211
35.6   总结    1211
第36章   错误报告工具:使用
         WebBroker    1212
36.1   网页布局    1212
36.2   修改数据模块    1213
36.3   配置TDataSetTableProducer组件:
       dstpBugs    1213
36.4   配置TWebDispatcher组件:
       wbdpBugs    1213
36.5   配置TPageProducer组件:
       pprdBugs    1214
36.6   编写DDGWebBugs ISAPI服务器:
      增加TActionItem实例    1214
36.6.1   辅助例程    1214
36.6.2   介绍网页    1215
36.6.3   获取并校验用户登录名字    1216
36.7   浏览错误信息    1219
36.7.1   浏览所有错误信息    1219
36.7.2   浏览用户自己的错误信息    1221
36.7.3   格式化表格单元并显示错误细
             节    1222
36.8   增加新的错误信息    1223
36.8.1   获取错误信息    1223
36.8.2   校验插入的错误信息    1225