目 录 1
序 1
第一部分面向对象的Pascal 1
第1章 可视化编程RAD——一种 1
快速应用程序开发工具 1
1.1 Delphi 2.0 1
1.2本书的各部分 2
1.2.1有关Windows API的章节 3
1.2.2充分利用本书 4
1.2.3其他内容 5
1.3 Delphi来源声明和Unicode声明 5
1.4 内存剧场 6
1.5使用组件配制板 7
1.6检查提示和警告信息 11
1.7程序代码中的新变化 11
1.8本书中的程序代码 11
1.9本书的内容从何而来 12
1.10其他作者 12
1.11写作本书的目的 13
第2章Win32中Delphi的变量类型 15
2.1 旧的字符串类型和新的字符串类型 15
2.2长字符串和独立调试器 18
2.3深入研究短字符串ShortString 23
2.4关于AnsiString 24
2.5 Trim函数 30
2.6 AnsiString和PChar 31
第二部分 Win 32
2.7引用计数 32
2.8 WideChar和Unicode 33
2.9 Variant 38
2.10导出和基本整数类型 45
2.11 Currency类型 48
2.12小结 49
3.1字符串——数组的一种形式 50
第3章 字符串和文本文件 50
3.2 PChar:另一种以0结尾的字符串 55
3.3使用字符串 57
3.4基于日期的文件名 59
3.5 ReplaceChars函数 61
3.6使用Move和FillChar函数 62
3.7限制ShortString的长度 68
3.8使用文本文件工作 69
3.9小结 77
第4章 指针和PChar类型 78
4.1指针和Win32 78
4.2指针和内存剧场 81
4.3用New和Dispose分配内存 84
4.4声明指针:一个实际的例子 86
4.5权限冲突:招致麻烦 89
4.6指针和对象 94
4.8 PChar和Char数组 95
4.7将一个指针设为nil 95
4.9小结 101
第5章 指针、链表以及内存 102
5.1PChar上的指针运算 102
5.2链表 103
5.3第二个链表的例子 112
5.4在调试中检查指针 127
5.5关于空指针的其他内容 133
5.6关键内容的回顾 133
5.7另一种无效的指针 134
5.8小结 136
第6章 异常 137
6.1关于异常所隐含的理论 137
6.2异常类 139
6.3基本异常语法 141
6.4建立并且引发自己的异常 146
6.5使用资源来追踪错误字符串 150
6.6try..finally程序块 155
6.7替代缺省的异常处理器 158
6.8引发异常、流、释放内存 161
6.9小结 164
第7章 多任务与多线程 167
7.1进程和存储 167
7.2多任务和多线程 169
7.3 多线程:一个简单的例子 171
7.4 一个程序,多个线程 176
7.5 在Windows API下使用位图 181
7.6在Thread2程序中使用线程 183
7.7使用Mutexes 191
7.8线程与VCL 195
7.9 TThread对象 197
7.10设定线程的优先级 205
7.11再看Delphi的线程 210
7.12小结 210
第8章 Win32内存管理 211
8.1 Win32内存管理一瞥 211
8.2为什么不用了解这东西 213
8.3 4GB虚拟内存空间近观 214
8.4分配虚拟内存的理论 214
8.5使用VirtualAlloc 215
8.6分配内存和使用堆 223
8.7把文件映象进内存 228
8.8内存管理基础 235
8.9小结 238
9.1简述 239
WinProc 239
第9章 VCL库之外:WinMain和 239
第三部分Windows API 239
9.2 Windows API程序:一个最简单的 240
例子 240
9.3代码 244
9.4注册窗口 246
9.5创建窗口 248
9.6 Window过程 250
9.7从另一个角度观察 253
9.8和Delphi的关系 255
9.9重载TForm.WindProc 257
9.10小结 261
第10章 对话框和资源 262
10.1使用源码 262
10.2旧风格Windows对话框 262
10.3使用源代码:深入Windows API 263
10.4在标准的DelphiRAD程序中使用 273
资源 273
10.5批处理文件问题 276
10.5.1重访命令行 278
10.5.2获得16位和32位Windows 280
API兼容 280
10.6小结 285
第11章 消息和显示文本 286
11.1 MESSAGES.PAS 286
11.2什么是消息 287
11.3第二个大型Windows程序 288
11.4 Case 语句、MESSAGES.PAS和 292
Message Crackers 292
11.5创建消息处理器 299
过程 300
11.7总结MessageCrackers 300
11.6 MESSAGES.PAS和缺省Window 300
11.8图画文本(Painting Text) 301
11.9 BeginPaint、EndPaint和设备 301
描述表 301
11.10文本输出(TextOut)和画文本 304
(DrawText) 304
11.11 Windows API 与RAD Delphi的 306
关系 306
11.12小结 307
第12章 鼠标和键盘 309
12.1 一个报告鼠标和键盘事件的程序 309
12.2 forward声明 320
12.3 Windows键盘和鼠标消息 321
12.4处理wm_Char消息 321
12.5用wm_KeyDown检测按键 325
12.6系统键 327
12.7 wm_MouseMove消息 328
12.8按钮选择和双击的处理 330
12.9处理wm_Paint 331
12.10小结 333
第13章 Windows API和DLL 335
13.1 DLL基础 335
13.2一个简单的DLL 337
13.3从API应用程序中调用Delphi对 341
话框 341
13.4创建对DLL的调用 348
13.5重温WndProc 351
13.6 wm_Paint和InvalidateRect 353
13.7运行时动态装载DLL 354
13.7.1 理解MESSAGES.PAS 360
13.7.2完全用Windows API调用书写的DLLs 361
13.7.3 APIDLL 380
13.7.4一个等同的Squares单元 383
13.8小结 386
第14章 Windows控件和Callbacks 387
14.1理解控件和消息 387
14.2字体显示程序 388
14.3静态控件(Static Controls) 399
14.4列表框(List Boxs) 401
14.5复选框(Check Boxs) 403
14.6编辑控件(Edit Controls) 404
14.7 FontsExp的测试 407
14.8传送消息 408
14.9 SendMessage和PostMessage函数 409
14.10枚举系统字体 411
14.11 FontCallBack函数 413
14.12与列表框通信 414
14.12.1显示字体 416
14.12.2复选框的使用 419
14.12.3高亮选择 420
14.12.4 ShowTheFont返回值 420
14.12.5 GetTextMetrics和FontStr 421
模块 421
14.13小结 424
第四部分数据库 425
第15章 使用TTable和TDataSet 425
15.1数据库基础 426
15.2数据模块 427
15.3对象储存器(Object Repository) 429
15.4数据库浏览器(Database Explorer) 430
15.5理解TDataSet类 431
15.6导航例程 433
15.7字段 436
文件 440
15.8使用SetKey和FindKey查找一个 440
15.9用ApplyRange筛选数据集的记录 442
15.10用OnFilterRecord事件筛选 444
15.11书签 445
15.12创建链接的光标 447
15.13跟踪数据集状态 451
15.14小结 452
第16章SQL和TQuery对象 453
16.1 TQuery基本知识 453
16.2 SQL特性 454
16.3 TQuery和参数 456
16.4 SQL特性和Format函数 461
16.5通过TDataSource传递参数 464
16.6执行多表连接 466
16.7参数化查询和Join语句 468
16.8打开或ExecSQL 469
16.9TQuery的特殊特性 471
16.10小结 471
第17章 字段和数据库工具 473
17.1关系数据库 473
17.1.1 一对多关系:数据和索引 475
17.1.2一对多关系:代码 478
17.1.3关系数据库和连接 479
17.1.4 Joins和QBE 481
17.2字段编辑器(Fields Editor) 483
17.3计算字段 486
17.4运行时的TabGrid 486
17.5 Lookup字段 495
17.6多记录(MultiRecord)对象 501
17.7小结 502
18.1 支持16位和32位平台 503
18.2定义数据 503
第18章 实用数据库 503
18.3定义该程序的外观 508
18.4创建完成的程序 512
18.5进出只读模式 530
18.6数据排序 533
18.7查找数据 534
18.8筛选数据 536
18.9打印记录 537
18.10设置颜色 540
18.11标志文件(Marking Files) 545
18.12剪贴板:剪切、复制和粘贴 546
18.13小结 547
第19章本地InterBase服务器 548
19.1建立本地InterBase 548
19.2建立InterBase别名(Alias) 550
19.3创建数据库 551
19.4用WISQL浏览数据库 552
19.5事务(Transaction) 554
19.6高速缓存更新(Cached Updates) 555
19.7多对多关系 560
19.8小结 568
第20章 高级InterBase技术 569
20.1 Music程序 569
20.2建立数据库结构 570
20.2.2发生器、触发器和存储过程 574
20.2.1其他索引 574
20.3 Delphi终端中的存储过程 577
20.4对于MUSIC.GDB的完整的数据 579
定义 579
20.5服务器方规则和客户方规则 581
20.6关于Music程序接口的简介 582
20.7 Music程序代码 586
20.8压缩口令:TDatabase对象 610
20.9建立表格事件 610
20.10筛选器和查询功能 611
20.11在Album表上查询 612
20.12小结 615
第21章ReportSmith 616
21.1范例报表 616
21.1.1建立一个报表 616
21.1.2要求1 623
21.1.3要求2 625
21.1.4要求3 626
21.1.5要求4 627
21.2范例报表1的Delphi表格 629
21.3范例报表2的Delphi表格 632
21.3.1要求1 632
21.3.2要求2 633
21.3.3要求3 634
21.3.4要求4 635
21.3.5要求4的继续 636
21.4范例报表3 637
21.5小结 640
第五部分对 象 641
第22章 消息处理 641
22.1 Delphi事件 641
22.2理解事件 645
22.3利用Delphi集来跟踪消息 646
22.4跟踪鼠标和键盘消息 651
22.5捕获虚拟按键 658
22.6直接处理事件 661
22.7处理wm_Command消息 664
22.8小结 668
第23章 对象和继承 670
23.1对象 670
23.2创建简单的对象 672
23.3理解继承 676
23.4 VCL程序的继承关系 681
23.5虚拟、动态和消息 683
23.5.1方法表与类型 689
23.5.2方法的指针 693
23.5.3对象与方法指针的综述 695
23.6 is与as操作符 696
23.7小结 700
第24章 对象、封装及属性 701
24.1封装 701
24.2简洁:好的对象设计的秘密 704
24.3一个实例 705
24.4属性 712
24.5关于属性的深入研究 715
24.6小结 726
25.1远程的多态性继承 727
第25章 多态性继承技术 727
25.2从另一角度看多态性继承 730
25.3虚拟方法和多态性继承 731
25.4 VCL中的多态性继承 735
25.5多态性继承的封装(主要观点的 738
回顾) 738
25.6 OBJECT 4 739
25.7 OBJECT 4的主要特性 761
25.8多态性继承的典型方法 764
25.9 MaskEdit和其他问题 766
25.10方法地址和多态性继承 767
25.11小结 770
第26章 创建组件 771
26.1组件理论 771
26.2创建已存在的组件的派生类 772
26.3扩展UNLEASH部分 779
26.4从头开始创建组件 785
26.5 CLOCK组件 788
26.6为组件建立图标 797
26.7 5个主要的Tools API 798
26.8属性编辑器 799
26.9小结 802
第27章 创建非可视组件 803
27.1 FindAllW程序 803
27.2使用TFileIterator重复查看目录 815
27.3何时应把可视对象转化成组件 817
27.4 AllDirs和FileIter单元 817
27.5重复浏览目录 818
27.6使用FindFirst、FindNext和 818
FindClose 818
27.7创建事件处理函数 820
27.8 DelAllDb程序 822
27.9小结 831
第六部分OLE与COM 833
第28章 对象的链接和嵌入 833
28.1基本概念 833
28.2 OLE技术:嵌入、就地激活和OCX 835
28.3在运行时使用TOleContainer 841
28.4 TOleContainer、文件IO和SCaling 844
28.5使用DDE 845
28.5.1简单的DDE服务器 845
28.5.2另一个DDE客户和服务器的 848
例子 848
28.6通过命令行来编译 857
28.7对资源的处理 858
第29章 OLE自动化的基础 861
29.1什么是OLE自动化 861
29.2作为OLE对象的Variant变量 863
29.3 自动化和登录 866
29.4 OLE参数:有名的和变化的 868
29.5 Variant数组 870
29.6 Excel自动化 876
29.7简单的OLE自动化服务器 878
29.8给自动化服务器加方法和属性 879
29.9 Delphi中的区域自动化服务器 884
29.10具体的包含 886
29.11 自动化对象 888
29.12小结 888
第30章 COM对象的基本知识 890
30.1 从DLL中输出VCL对象 891
30.2创建一个DLL服务器 898
30.3 登录和GUID 905
30.4创建对象 908
30.5考虑IClassFactory 911
30.6 IUnknown和IMyObject 913
30.7实现IClassFactory 915
30.8释放DLL 917
30.9创建客户程序 917
30.10从IMyObject中输出额外函数 924
30.11调试DLL 926
30.12创建一个EXE服务器 928
30.13在OLE文档上 936
30.14小结 936
存储 937
31.1使用结构化存储 937
第31章 COM、自动化、结构化 937
31.2打开一个已有的混合文件 943
31.3 VCL外的自动化 956
28.8小结 959
31.4调用TMyAuto对象 967
31.5 RunSimp程序 972
31.6关于OLE的最后几点 972
31.7小结 973
第七部分多媒体和游戏 975
第32章 Games SDK 975
32.1历史过程 975
32.2 Windows 95 Game SDK 976
32.3组件对象模块 977
32.4 DirectDraw 977
32.5 IDirectDraw对象 978
32.5.1 DirectDraw结果代码及Delphi异常 979
32.5.2选择全屏模式 979
32.5.3添加应用程序异常处理 980
32.6显示界面 980
32.6.1转换页面 982
32.6.2加上返回中止 982
32.6.3进入后部缓冲区 983
32.6.4恢复界面 983
32.6.5在DirectDeaw界面上画图 985
32.6.6锁定Windows 987
32.6.7使主模块无效 987
32.6.8 控制Delphi:自定义Canvas类 987
32.7 改善图像 990
32.8 关于调色板 993
32.9 全部组织起来 994
32.9.1 带透明区的位图块移动 994
32.9.2 一个简单的动画类 996
32.9.3更新显示 997
32.9.4处理键盘输入 999
32.9.5进入消息循环 1000
32.10需要精灵 1002
32.10.1 TDDSprite类 1004
32.10.2 显示统计量 1006
32.10.3复制精灵 1007
32.10.4 更新统计值 1009
32.10.5在设计时刻生成精灵 1010
32.11小结 1011
第33章 制作SDK世界 1012
33.1 快速动画与Games SDK 1012
33.2 XFire程序 1012
33.3 XFire总览 1054
33.4 DrawBoard部分 1056
33.5 GameBoard部分 1058
33.6生成一个迷宫 1059
33.7在地图上滚动 1064
33.8小结 1066
第34章 Delphi多媒体编程 1067
34.1 多媒体探秘 1067
34.2文件格式:需要多大的磁盘空间 1067
34.3硬件:需要什么样的机器 1068
34.4为何要为多媒体烦恼 1069
34.5 Delphi与多媒体 1070
34.6TMediaPlayer组件 1070
34.7在运行时打开TMediaPlayer 1071
34.8多媒体程序的两个方面 1072
34.9媒体通道程序的进一步讨论 1074
34.10定义一个可以放影像的窗口 1081
34.11演示程序 1083
34.12 MIDI细节 1097
34.13小结 1097
第35章 高级多媒体性能 1098
35.1在Delphi中使用OWL 1098
35.2 工具和限制 1099
35.3关于MIDI文件的一些说明 1100
35.4面对mciSendCommand的语言 1100
35.5集中注意力 1102
35.6播放文件 1103
35.7录制声音 1108
35.8 Media32程序 1110
35.9 多媒体特征通道的核心文件 1167
35.10性能对话框 1168
35.11恰当的前端 1169
35.12 与多媒体文件工作 1170
35.13设置时间格式 1170
35.14处理mm_Notify消息 1171
35.15小结 1173
第八部分Internet 1175
第36章 采用Delphi进行CGI编程 1175
36.1从何处入手 1175
36.2 Web文档是HTML文件 1177
36.3为什么编写网络应用程序如此 1178
烦人 1178
36.4比较网络节点 1178
36.4.3静态与动态页面 1179
36.4.1公共与私有 1179
36.4.2服务端平台是什么 1179
36.4.4交互作用的网络节点 1180
36.4.5数据库驱动的网络节点 1180
36.5分析网络节点 1181
36.5.1网页 1181
36.5.2流程中的网点地址页面 1181
36.5.3选择自己的软件工具 1182
36.6 CGI详述 1182
36.6.1 INI包含的一切 1184
36.6.2使用HTML窗体 1185
36.6.3 CGI程序的作用 1186
36.7为什么不是很容易 1186
36.7.1性能 1187
36.7.3存储状态 1188
36.7.4 HTML美工与程序员分离 1188
36.7.2跟踪时期 1188
36.7.5商业准则 1189
36.8框架的需要 1189
36.9电子商贸及安全 1190
36.10关于java 1191
36.11 小结 1192
37.1.3 多才多艺的小构件 1193
37.1.2组件是舞台上的演员 1193
37.1.1组件是TForm的邻居 1193
37.1 生活是不确定的,先来些点心 1193
第37章 在Delphi中控制BDE 1193
37.1.4自己动手 1194
37.2返回主要通道 1194
37.2.1 关键内容出现 1194
37.2.2 TWebApp和Company 1194
37.2.3 TWebCommandLine 1194
37.2.6生成HTML 1195
37.2.4 TWebHtmlMemu 1195
37.2.5TWebMenu 1195
37.3控制Delphi数据库组件 1196
37.3.1 介绍TWebDataGrid和TWebDataSource 1197
37.3.2练习 1198
37.3.3进一步定制 1200
37.3.4 一个新的Cyber-Shopping接口 1200
37.4控制Delphi 1201
37.4.1 String Grid 1201
37.4.2电子邮件 1202
37.4.3 加上组件 1203
37.4.4定义基本的 E-Mail设置 1203
37.4.5交互的轮廓 1204
37.4.6定制图形 1205
37.5网络交通 1207
37.6小结 1207