目 录
译者序
前言
第一部分 Kylix应用程序开发
第1章 Kylix简介 1
1.1 Kylix概述 1
1.1.1 使用组件方式构建应用程序 2
1.1.2 Kylix执行代码生成 3
1.1.3 Kylix编程环境是事件驱动的 5
1.1.4 面向对象的软件开发 5
1.1.5 理解Kylix的开放工具API 5
1.1.6 快速应用程序开发 6
1.2 Delphi开发者眼中的Kylix 6
1.2.1 Kylix和Linux 7
1.2.2 CLX概述 8
1.2.3 一些缺陷 10
第2章 创建应用程序 13
2.1 创建一个基本的应用程序 13
2.1.1 创建一个新的工程 13
2.1.2 放置并配置组件 16
2.1.3 书写事件处理程序 18
2.1.4 添加菜单 20
2.1.5 使用附加的窗体和对话框 22
2.1.6 在命令提示符下运行完成的工程 30
2.2 Kylix工程中的文件 31
2.2.1 工程源文件 31
2.2.2 单元 31
2.2.3 窗体文件 32
2.2.4 被编译单元 33
2.2.5 可执行文件 33
2.2.6 被修改文件 33
2.2.7 工程选项文件 33
2.2.8 工程编译器设置文件 33
第3章 Kylix的RAD框架 34
3.1 使用可视窗体继承 34
3.1.1 改变继承对象的属性 37
3.1.2 在继承对象中覆盖事件处理程序 37
3.1.3 源于当前工程 39
3.1.4 定义共享的Object Repository 39
3.2 设计动作列表 39
3.3 使用帧 41
3.3.1 创建帧 42
3.3.2 使用帧 43
3.3.3 覆盖包含组件的属性 44
3.3.4 包含的对象事件处理程序 45
3.3.5 覆盖包含的对象的事件处理程序 47
3.3.6 帧和资源 48
3.3.7 简化帧的使用 49
3.3.8 将帧转化为实际的组件 51
3.4 使用数据模块 51
3.4.1 使用数据模块来共享组件 52
3.4.2 数据模块的局限性 53
第4章 使用并配置编辑器 55
4.1 编辑器键映射 55
4.2 选择编辑器按键 57
4.2.1 键宏记录 57
4.2.2 块缩进与不缩进 58
4.2.3 使用书签 59
4.2.4 将To-Do列表项作为书签来使用 59
4.2.5 类导航 60
4.2.6 代码浏览 60
4.2.7 类完成 62
4.2.8 递增查找 64
4.2.9 查找匹配分隔符 64
4.2.10 列操作 65
4.3 Code Insight 65
4.3.1 代码完成 65
4.3.2 代码参数 66
4.3.3 工具提示表达式求值 67
4.3.4 工具提示符号洞察 67
4.3.5 代码模板 67
4.4 编辑器键绑定 70
4.4.1 声明键绑定类 71
4.4.2 实现键绑定类 72
4.4.3 声明并实现Register过程 75
4.4.4 创建并安装新的设计时包 76
第5章 调试Kylix应用程序 78
5.1 集成调试器 78
5.1.1 工具提示表达式求值 78
5.1.2 调试窗口 79
5.1.3 Run菜单 84
5.2 禁用调试器 84
5.2.1 指示调试器忽略引发的异常 86
5.2.2 指示Kylix忽略特定异常 86
5.3 断点概述 87
5.3.1 源断点 87
5.3.2 其他断点类型 91
5.3.3 在Kylix会话之间持续断点 93
第二部分 数据库应用程序
第6章 数据库应用程序 95
6.1 理解数据库 96
6.1.1 数据库与表 96
6.1.2 数据库与SQL 97
6.1.3 其他与数据库相关的概念 97
6.1.4 本书中使用的数据库 98
6.1.5 创建数据库与表 98
6.2 利用Kylix开发数据库概述 99
6.3 数据库应用程序中使用的组件 106
6.3.1 数据识别控件 106
6.3.2 数据访问组件 108
6.3.3 dbExpress组件 109
6.4 dbExpress概述 110
6.5 创建简单的数据库应用程序 116
第7章 使用数据识别控件 120
7.1 数据识别控件的常规配置 120
7.1.1 Tab顺序与可视控件 121
7.1.2 修改Tab顺序 122
7.2 配置Kylix的数据识别控件 123
7.2.1 准备一个启用数据的组件模板 123
7.2.2 使用DBGrid 124
7.2.3 使用DBNavigator 142
7.2.4 使用DBText 143
7.2.5 控制DBEdit 144
7.2.6 使用DBMemo 146
7.2.7 使用DBListBox 147
7.2.8 使用DBComboBox 149
7.2.9 使用DBCheckBox 150
7.2.10 使用DBRadioGroup 150
7.2.11 使用DBLookupListBox与DBLookup
ComboBox 151
第8章 使用TField 154
8.1 字段概述 154
8.2 理解永久性字段 159
8.2.1 创建永久性字段 160
8.2.2 配置永久性字段 160
8.3 在程序运行时使用字段 167
8.3.1 读写数据集的字段 167
8.3.2 编写OnValidate事件处理程序 171
8.3.3 字段的访问. 性能与维护问题 172
8.4 创建新的永久性字段 175
8.4.1 创建计算字段 176
8.4.2 创建查找字段 177
8.4.3 定义合计字段 178
第9章 使用单向数据集 182
9.1 单向数据集 182
9.2 使用单向数据集 183
9.2.1 定义SQL连接 183
9.2.2 返回记录集的单向数据集 184
9.2.3 不返回结果集的单向数据集 186
9.3 使用参数化查询 187
9.3.1 创建主细视图 189
9.3.2 通过链接查询创建主细视图 192
9.3.3 准备单向查询 193
9.4 执行存储过程 194
9.4.1 返回各个值的存储过程 195
9.4.2 返回数据集的存储过程 196
第10章 使用内存数据集 199
10.1 内存数据集 199
10.2 创建内存表与索引 200
10.3 保存数据与取消修改 206
10.4 按索引排序 207
10.5 使用范围 212
10.6 过滤 214
10.6.1 根据属性进行过滤 214
10.6.2 过滤器选项 216
10.6.3 使用OnFilterRecord事件处理
程序 216
10.6.4 使用过滤器进行导航 217
10.7 搜索数据 218
10.7.1 使用FindKey与FindNearest 218
10.7.2 使用GotoKey与GotoNearest 219
10.7.3 使用Locate与Lookup 219
10.8 记录级别的有效性检查 224
第11章 高级数据库技术 226
11.1 应用更新的艺术 226
11.1.1 利用内存数据集编辑数据 226
11.1.2 基于记录状态进行过滤 230
11.1.3 判定记录状态 233
11.1.4 从Change日志中删除修改 234
11.1.5 刷新记录 237
11.2 自定义更新过程 238
11.2.1 通过DataSetProvider属性控制更新 239
11.2.2 向更新过程添加代码 242
11.2.3 处理更新错误 246
11.3 实用技术 248
11.3.1 使用SQL监视器 248
11.3.2 克隆游标 249
11.3.3 以每次保存一条记录的方式保存
数据 249
第12章 编写dbExpress驱动程序 253
12.1 理解数据库提供商客户端 253
12.1.1 初始化环境 254
12.1.2 连接数据库服务器 254
12.1.3 初始化语句句柄 254
12.1.4 准备SQL语句 255
12.1.5 传递运行时参数 255
12.1.6 执行SQL语句 256
12.1.7 绑定记录缓冲区 256
12.1.8 读取记录 257
12.1.9 释放句柄并且断开连接 257
12.2 dbExpress核心实现 258
12.2.1 SQLDriver类 258
12.2.2 SQLConnection类 261
12.2.3 SQLCommand类 267
12.2.4 SQLCursor类 286
12.2.5 SQLMetaData类 292
12.3 dbExpress接口源文件 292
第三部分 Kylix先进特性精选
第13章 多线程应用程序 293
13.1 多线程的优点 295
13.2 创建多线程应用程序 296
13.3 线程同步 307
13.3.1 使用Synchronize 307
13.3.2 使用临界区 308
13.3.3 等待线程 310
13.3.4 使用事件对象 313
13.3.5 锁对象 315
13.4 其他线程技术 315
13.4.1 线程局部变量 315
13.4.2 调试线程 316
13.4.3 对数据库的多线程访问 317
第14章 共享对象库 319
14.1 共享对象库概述 319
14.2 创建一个共享对象库的例子 320
14.2.1 将函数书写到Export 321
14.2.2 控制共享对象库名称 323
14.3 加载共享对象库存例程 326
14.4 创建共享对象库导入单元 328
14.5 动态加载共享对象库 330
14.5.1 声明变量 331
14.5.2 动态加载共享对象库 332
14.5.3 获取函数或者过程的地址 332
14.5.4 释放共享对象库 332
14.6 调试共享对象库 335
14.6.1 使用宿主应用程序进行调试 335
14.6.2 使用工程组进行调试 336
14.7 共享对象库初始化及退出 337
14.7.1 定义初始化代码 337
14.7.2 定义退出过程 337
第15章 构建组件 338
15.1 对象概述 338
15.1.1 从记录转向类 338
15.1.2 封装与成员可见性 341
15.1.3 定义运行时接口 342
15.1.4 继承与多态 345
15.2 组件创建简介 347
15.3 一个简单组件示例:定义新的属性
缺省值 348
15.3.1 使用Component向导 349
15.3.2 覆盖方法 350
15.3.3 实现覆盖构造函数 351
15.3.4 测试新的组件 352
15.3.5 安装组件 354
15.4 创建设计时包 355
15.5 有关属性的一个例子 357
15.5.1 定义成员域 357
15.5.2 定义属性 358
15.5.3 定义方法 358
15.5.4 覆盖现有方法 359
15.5.5 实现覆盖方法 360
15.5.6 创建事件属性 361
15.5.7 在完成组件时需要注意的细节
问题 362
15.6 相关主题:提高属性可见性 369
第16章 使用接口 372
16.1 接口概述 373
16.2 为何使用接口 373
16.3 声明接口 375
16.4 实现接口 377
16.5 接口和方法解析 384
16.6 通过授权实现接口 384
16.7 接口实例:数据泵 387
第四部分 Internet应用程序开发
第17章 Internet技术概述 393
17.1 协议. 技术与专业术语 393
17.2 RFC 394
17.3 IP地址 394
17.3.1 域名 394
17.3.2 TCP/IP与UDP 395
17.3.3 套接字与端口 395
17.3.4 SGML 396
17.3.5 HTML 396
17.3.6 FTP 397
17.3.7 HTTP 397
17.3.8 MIME 397
17.3.9 万维网 397
17.3.10 Web服务器 398
17.3.11 Web浏览器 398
17.3.12 Apache 398
17.3.13 CGI与DSO 399
17.3.14 SSI 399
17.4 Web服务器扩展概述 400
17.5 Web交互简介 400
17.5.1 URL的组成 401
17.5.2 请求类型 403
17.6 使用HTML 403
17.7 使用HTML将数据提交给Web服务器
扩展 404
17.7.1 图片标记 405
17.7.2 锚标记 405
17.7.3 HTML表单 406
17.8 编译Apache服务器来使用DSO 411
第18章 使用Web Broker编写Web服务器
扩展 414
18.1 创建简单的CGI Web服务器扩展 414
18.2 安装. 使用CGI服务器 418
18.2.1 添加LD_LIBRARY_PATH环境
变量 418
18.2.2 将CGI应用程序写到ScriptAlias
目录中 420
18.2.3 从浏览器执行CGI应用程序 421
18.3 创建. 配置一个简单的Apache DSO 422
18.3.1 创建DSO工程 422
18.3.2 使用生成器 423
18.4 安装. 使用DSO库 427
18.4.1 将DSO库写到Apache目录中 427
18.4.2 将DSO添加到httpd.conf中 427
18.4.3 关闭和启动Apache 428
18.4.4 从一个浏览器执行DSO库 429
第19章 高级Web Broker主题 431
19.1 从HTML表单中获取数据 431
19.2 创建基于Web的数据库应用程序 435
19.2.1 Web服务器扩展与并发性 435
19.2.2 数据识别提供者 436
19.2.3 在TableProducer中格式化单元 440
19.3 Cookie与WebRequest对象 441
19.3.1 获取和设置cookie 442
19.3.2 使用cookie和重定向 443
19.4 WebRequest的内容 446
19.5 调试Web服务器扩展 449
19.5.1 将CGI工程转换成DSO工程 449
19.5.2 调试DSO工程 450
第20章 Internet Direct概述 453
20.1 什么是Internet Direct 453
20.2 Internet Direct组件 455
20.2.1 Indy客户端组件 455
20.2.2 Indy服务器组件 457
20.2.3 Indy Miscellaneous组件 459
20.2.4 下载更新的Internet Direct组件 461
20.3 使用Internet Direct组件 461
20.3.1 Internet Direct客户端是如何
工作的 461
20.3.2 使用TIdAntiFreeze 462
20.3.3 Internet Direct服务器的工作方式 463
20.3.4 使用线程管理器 464
20.4 Internet Direct许可证 464
20.4.1 Indy修改的BSD许可证 464
20.4.2 Indy MPL许可证 465
20.4.3 在Kylix应用程序中遵守Indy
许可证 465
20.5 技术支持 465
第21章 使用Internet Direct 467
21.1 客户端和服务器的创建顺序 467
21.2 一个简单的服务器示例 468
21.2.1 线程和IdTCPServer 470
21.2.2 阻塞调用与并发 470
21.2.3 OnExecute和异常 471
21.3 数据库服务器示例 472
21.3.1 创建数据库服务器 472
21.3.2 创建数据库客户 474
21.4 在客户端处理异常 476
21.4.1 从客户端检测连接中断 476
21.4.2 使用多线程客户端测试服务器 477
21.5 使用TIdSMTP发送邮件 480
21.5.1 创建消息 480
21.5.2 创建TIdSMTP客户 481
21.5.3 在线程中创建客户端 482
21.5.4 初始化客户端线程 484
21.5.5 从一个线程中更新用户界面 484
21.6 ZIP编码查找服务器和客户端 486
21.6.1 定义ZIP编码协议 486
21.6.2 ZIP编码服务器 487
21.6.3 ZIP编码客户端 489
21.7 创建一个控制台服务器 491
21.7.1 创建控制台服务器的例子 491
21.7.2 测试纯文本控制台服务器 493
附 录
附录A 安装示例代码 495
附录B 本书的Web支持站点 496