本书是讲述Delphi最经典的著作之一,作为Delphi的新版本,Delphi 6不仅能帮助程序员高效开发Windows应用程序,简化Web服务、中间软件以及后台数据库系统的合成,还是目前惟一全面支持所有主流业界标准的开发工具和提高电子商务能力的利器。本书内容丰富、条理清晰,用深入浅出的语言阐述了Delphi 6的精髓,对Delphi或即将移植到Delphi的程序员来说,具有极大的参考价值。本书最后还介绍了Delphi在Internet方面的应用。在移动商务网络编程越来越热的今天,无疑会成为程序员关注的焦点。
目录
- 译者序
- 序言
- 前言
- 作者介绍
- 第一部分 基本知识
- 第1章 Delphi编程简介
- 1.1 Delphi的产品家族介绍
- 1.2 认识Delphi
- 1.2.1 可视化开发环境的特性
- 1.2.2 编译器速度和编译后代码执行效率
- 1.2.3 编程语言的功能和复杂性的对立
- 1.2.4 数据库结构的灵活性和可扩展性
- 1.2.5 实现机制对设计和使用模式的增强
- 1.3 历史回顾
- 1.3.1 Delphi 1
- 1.3.2 Delphi 2
- 1.3.3 Delphi 3
- 1.3.4 Delphi 4
- 1.3.5 Delphi 5
- 1.3.6 Delphi 6
- 1.4 Delphi IDE环境
- 1.4.1 主窗口
- 1.4.2 主菜单
- 1.4.3 Delphi工具栏
- 1.4.4 组件选项板
- 1.4.5 窗体设计器
- 1.4.6 对象观察器
- 1.4.7 代码编辑器
- 1.4.8 代码浏览器
- 1.4.9 对象层次图
- 1.5 项目源文件概述
- 1.6 应用程序简介
- 1.7 事件处理机制的优势
- 1.8 快速原型化
- 1.9 可扩展的组件和环境
- 1.10 必须掌握的10种IDE功能
- 1.11 小结
- 第2章 Object Pascal语言
- 2.1 注释
- 2.2 扩展过程和函数特性
- 2.2.1 函数调用中的圆括号
- 2.2.2 重载
- 2.2.3 缺省参数值
- 2.3 变量
- 2.4 常量
- 2.5 运算符
- 2.5.1 赋值运算符
- 2.5.2 比较运算符
- 2.5.3 逻辑运算符
- 2.5.4 数学运算符
- 2.5.5 按位运算符
- 2.5.6 增/减量运算
- 2.5.7 “计算-赋值”运算符
- 2.6 Object Pascal类型
- 2.6.1 类型比较
- 2.6.2 字符类型
- 2.6.3 字符串
- 2.6.4 变体类型
- 2.6.5 货币类型
- 2.7 用户自定义类型
- 2.7.1 数组
- 2.7.2 动态数组
- 2.7.3 记录
- 2.7.4 集合
- 2.7.5 对象
- 2.7.6 指针
- 2.7.7 类型别名
- 2.8 类型转换和强制类型转换
- 2.9 字符串资源
- 2.10 条件判断语句
- 2.10.1 if语句
- 2.10.2 case语句
- 2.11 循环
- 2.11.1 for循环
- 2.11.2 while循环
- 2.11.3 repeat..until循环
- 2.11.4 Break()过程
- 2.11.5 Continue()过程
- 2.12 过程和函数
- 2.13 作用域
- 2.14 单元
- 2.14.1 uses子句
- 2.14.2 单元循环引用
- 2.15 包
- 2.15.1 使用Delphi包
- 2.15.2 包的语法格式
- 2.16 面向对象编程
- 2.17 使用Delphi对象
- 2.17.1 声明和实例化
- 2.17.2 析构
- 2.17.3 方法
- 2.17.4 方法的类型
- 2.17.5 属性
- 2.17.6 可见区域说明符
- 2.17.7 友元类
- 2.17.8 对象的秘密
- 2.17.9 TObject:所有对象的祖先
- 2.17.10 接口
- 2.18 结构化异常处理
- 2.18.1 异常类
- 2.18.2 异常执行流程
- 2.18.3 异常的再激活
- 2.19 运行时信息
- 2.20 小结
- 第3章 理解Windows消息
- 3.1 什么是消息
- 3.2 消息的类型
- 3.3 Windows消息系统的工作方式
- 3.4 Delphi的消息系统
- 3.5 消息的处理
- 3.5.1 消息处理:并非无约定
- 3.5.2 为Result消息值赋值
- 3.5.3 TApplication类型的OnMessage事件
- 3.6 发送自己的消息
- 3.6.1 Perform()方法
- 3.6.2 SendMessage()和PostMessage()API函数
- 3.7 非标准消息
- 3.7.1 通知消息
- 3.7.2 内部VCL消息
- 3.7.3 用户定义消息
- 3.8 剖析VCL的消息系统
- 3.9 消息和事件之间的关系
- 3.10 小结
- 第二部分 高级技术
- 第4章 编写可移植代码
- 4.1 版本兼容的共性
- 4.1.1 版本判断
- 4.1.2 单元、组件和包
- 4.1.3 关于IDE的讨论
- 4.2 Delphi和Kylix兼容性
- 4.2.1 Linux中不具备的特性
- 4.2.2 编译器和语言特性
- 4.2.3 平台相关特点
- 4.3 Delphi 6的新特性
- 4.3.1 变体变量
- 4.3.2 枚举类型
- 4.3.3 $IF指示符
- 4.3.4 潜在的二进制DFM的不兼容
- 4.4 从Delphi 5升级
- 4.4.1 可写的类型常量
- 4.4.2 Cardinal一元取反操作
- 4.5 从Delphi 4升级
- 4.5.1 RTL问题
- 4.5.2 VCL问题
- 4.5.3 Internet开发主题
- 4.5.4 数据库问题
- 4.6 从Delphi 3升级
- 4.6.1 无符号32位整数
- 4.6.2 64位整数
- 4.6.3 Real类型
- 4.7 从Delphi 2升级
- 4.7.1 Boolean类型的改变
- 4.7.2 ResourceString
- 4.7.3 BTL的改变
- 4.7.4 TCustomForm
- 4.7.5 GetChildren()
- 4.7.6 自动化服务器
- 4.8 从Delphil升级
- 4.9 小结
- 第5章 多线程技术
- 5.1 阐述线程
- 5.1.1 多任务的类型
- 5.1.2 在Delphi应用程序中使用多线程
- 5.1.3 线程的滥用
- 5.2 TThread对象
- 5.2.1 TThread基础
- 5.2.2 线程实例
- 5.2.3 线程终止
- 5.2.4 和VCL同步
- 5.2.5 应用程序Demo
- 5.2.6 优先级和调度
- 5.2.7 线程的挂起和恢复
- 5.2.8 线程中的计时
- 5.3 管理多线程
- 5.3.1 线程局部存储
- 5.3.2 线程同步
- 5.4 多线程应用程序范例
- 5.4.1 用户界面
- 5.4.2 搜索线程
- 5.4.3 调整优先级
- 5.5 多线程访问BDE
- 5.6 多线程图形操作
- 5.7 纤程
- 5.8 小结
- 第6章 动态链接库
- 6.1 何谓DLL
- 6.2 静态链接和动态链接
- 6.3 为何要用DLL
- 6.3.1 多个应用程序共享代码、资源和数据
- 6.3.2 隐藏实施细节
- 6.4 创建和使用DLL
- 6.4.1 数美分(简单的DLL)
- 6.4.2 通过DLL显示模式窗体
- 6.5 通过DLL显示无模式窗体
- 6.6 在Delphi应用程序中使用DLL
- 6.7 显式调用DLL
- 6.8 动态链接库的入口/出口函数
- 6.8.1 进程和线程的初始化和结束标准函数
- 6.8.2 DLL入口/出口示例
- 6.9 DLL中的异常
- 6.9.1 在16位Delphi中捕捉异常
- 6.9.2 异常和Safecall指示符
- 6.10 回调函数
- 6.10.1 使用回调函数
- 6.10.2 绘制Owner-Draw列表框
- 6.11 通过DLL调用回调函数
- 6.12 共享不同进程中的DLL数据
- 6.12.1 创建共享内存的DLL
- 6.12.2 使用共享内存的DLL
- 6.13 从DLL中输出对象
- 6.14 小结
- 第三部分 数据库开发
- 第7章 Delphi数据库体系结构
- 7.1 数据库类型
- 7.2 数据库体系结构
- 7.3 连接到数据库服务器
- 7.3.1 数据库连接概述
- 7.3.2 建立数据库连接
- 7.4 操作数据集
- 7.4.1 打开及关闭数据集
- 7.4.2 导航数据集
- 7.4.3 管理数据集
- 7.4.4 数据集状态
- 7.5 操作字段
- 7.5.1 字段值
- 7.5.2 字段数据类型
- 7.5.3 字段名称及号码
- 7.5.4 管理字段数据
- 7.5.5 操作BLOB字段
- 7.5.6 过滤数据
- 7.5.7 搜索数据集
- 7.5.8 关键字查找
- 7.5.9 使用数据模块
- 7.5.10 查找、范围及过滤器演示
- 7.5.11 书签
- 7.6 小结
- 第8章 用dbExpress进行数据库开发
- 8.1 使用dbExpess
- 8.1.1 单向、只读数据集
- 8.1.2 dbExpress与BDE比较
- 8.1.3 dbExpress支持跨平台开发
- 8.2 dbExpress组件
- 8.2.1 TSQLConnection
- 8.2.2 TSQLDataset
- 8.2.3 显示查询结果
- 8.2.4 向后兼容组件
- 8.2.5 TSQLMonitor
- 8.3 设计可编辑的dbExpress应用程序
- 8.4 部署dbExpress应用程序
- 8.5 小结
- 第9章 用dbGo for ADO进行数据库开发
- 9.1 dbGo介绍
- 9.2 Mcrosoft的统一数据访问策略概述
- 9.3 OLE DB、ADO、ODBC概述
- 9.4 使用dbGo for ADO
- 9.4.1 为ODBC建立OLE DB提供者
- 9.4.2 Access数据库
- 9.5 dbGo for ADO组件
- 9.5.1 TADOConnection
- 9.5.2 建立数据库连接
- 9.5.3 回避/替代登录提示
- 9.5.4 TADOCommand
- 9.5.5 TADODataset
- 9.5.6 类似BDE的数据集组件
- 9.6 事务处理
- 9.7 小结
- 第四部分 基于组件的开发
- 第10章 组件体系:VCL和CLX
- 10.1 关于新的CLX
- 10.2 何谓组件
- 10.3 组件的层次结构
- 10.3.1 非可视组件
- 10.3.2 可视组件
- 10.4 组件结构
- 10.4.1 属性
- 10.4.2 属性的类型
- 10.4.3 方法
- 10.4.4 事件
- 10.4.5 流式属性
- 10.4.6 所有权
- 10.4.7 父子关系
- 10.5 可视组件的继承关系
- 10.5.1 TPersistent类
- 10.5.2 TPersistent方法
- 10.5.3 TComponent类
- 10.5.4 TControl类
- 10.5.5 TWinControl和TWidgetControl
- 10.5.6 TGraphicControl类
- 10.5.7 TCustomControl类
- 10.5.8 其他类
- 10.6 运行期类型信息
- 10.6.1 TypInfo.pas单元:运行类型信息的定义者
- 10.6.2 获取类型信息
- 10.6.3 获得方法指针的类型信息
- 10.6.4 获取有序类型的类型信息
- 10.6.5 通过RTTI为属性赋值
- 10.7 小结
- 第11章 编写VCL组件
- 11.1 组件设计基础
- 11.1.1 决定是否应编写组件
- 11.1.2 编写组件的步骤
- 11.1.3 确定祖先类
- 11.1.4 创建组件单元
- 11.1.5 创建属性
- 11.1.6 创建事件
- 11.1.7 创建自定义方法
- 11.1.8 构造函数和析构函数
- 11.1.9 注册组件
- 11.1.10 测试组件
- 11.1.11 提供组件图标
- 11.2 组件示例
- 11.2.1 扩展Win32组件包装器的性能
- 11.2.2 TddgRunButton:创建属性
- 11.3 TddgButtonEdit:一个容器组件
- 11.3.1 设计决策
- 11.3.2 显露属性
- 11.3.3 显露事件
- 11.3.4 TddgDigitalClock:创建组件事件
- 11.3.5 把窗体添加到组件面板
- 11.4 小结
- 第12章 高级VCL组件构造技术
- 12.1 伪可视组件
- 12.1.1 扩展提示功能
- 12.1.2 创建一个THintWindow派生类
- 12.1.3 椭圆型窗口
- 12.1.4 激活THintWindow派生窗口
- 12.1.5 运用TDDGHintWindow
- 12.2 动态组件
- 12.2.1 滚动字幕组件
- 12.2.2 编写组件
- 12.2.3 在屏幕以外的位图上绘制
- 12.2.4 描绘组件
- 12.2.5 让组件“动起来”
- 12.2.6 测试TddgMarquee组件
- 12.3 编写属性编辑器
- 12.3.1 创建一个继承的属性编辑器对象
- 12.3.2 将属性作为文本进行编辑
- 12.3.3 注册新的属性编辑器
- 12.3.4 利用对话框将属性作为整体进行编辑
- 12.4 组件编辑器
- 12.4.1 TComponentEditor
- 12.4.2 一个简单的组件
- 12.4.3 一个简单的组件编辑器
- 12.4.4 注册组件编辑器
- 12.5 对非公开的组件数据执行流操作
- 12.5.1 定义属性
- 12.5.2 DefineProperty()的例子
- 12.5.3 TddgWaveFile:DefineBinaryProperty()用法示例
- 12.6 属性类别
- 12.6.1 类别类
- 12.6.2 自定义类别
- 12.7 组件列表:TCollection和TCollectionItem
- 12.7.1 定义TCollectionItem类:TRunBtnItem
- 12.7.2 定义TCollection类:TRunButtons
- 12.7.3 实现TddgLaunchPad、TRun-BtnItem和TRunButtons
- 12.7.4 用对话框属性编辑器编辑TCollectionItem组件的列表
- 12.8 小结
- 第13章 CLX组件开发
- 13.1 何谓CLX
- 13.2 CLX的体系结构
- 13.3 移植问题
- 13.4 组件示例
- 13.4.1 TddgSpinner组件
- 13.4.2 设计期增强工具
- 13.4.3 组件引用和图像列表
- 13.4.4 CLX数据感知组件
- 13.5 CLX设计编辑器
- 13.6 包
- 13.6.1 命名约定
- 13.6.2 运行期包
- 13.6.3 设计期包
- 13.6.4 单元注册
- 13.6.5 组件位图
- 13.7 小结
- 第14章 充分发挥包的作用
- 14.1 为何要用包
- 14.1.1 精简代码
- 14.1.2 发布更小的应用程序--应用程序分割
- 14.1.3 组件容器
- 14.2 为何不用包
- 14.3 包的类型
- 14.4 包文件
- 14.5 使用运行期包
- 14.6 把包安装到Delphi IDE中
- 14.7 创建包
- 14.7.1 包编辑器
- 14.7.2 包设计方案
- 14.8 包的版本化
- 14.9 包编译器指示符
- 14.10 包的命名约定
- 14.11 使用运行期(插件)包的可扩展应用程序
- 14.12 从包中导出函数
- 14.13 获取包的信息
- 14.14 小结
- 第15章 COM开发
- 15.1 COM基础
- 15.1.1 COM2组件对象模型
- 15.1.2 COM、ActiveX和OLE之间的对比
- 15.1.3 术语
- 15.1.4 ActiveX的优势
- 15.1.5 OLE 与OLE 2的对比
- 15.1.6 结构化存储
- 15.1.7 统一数据传输
- 15.1.8 线程模式
- 15.1.9 COM+
- 15.2 COM与Object Pascal
- 15.2.1 接口
- 15.2.2 使用接口
- 15.2.3 HResult返回类型
- 15.3 COM对象和类工厂
- 15.3.1 TComObject和TComObject-Factory
- 15.3.2 in-process COM服务器
- 15.3.3 创建in-proc COM服务器实例
- 15.3.4 out-of-process COM服务器
- 15.4 聚合
- 15.5 分布式COM
- 15.6 Automation
- 15.6.1 IDispatch
- 15.6.2 类型信息
- 15.6.3 后期绑定与早期绑定的对比
- 15.6.4 注册
- 15.6.5 创建Automation服务器
- 15.6.6 创建Automation控制器
- 15.7 高级Automation技术
- 15.7.1 Automation事件
- 15.7.2 Automation集合
- 15.7.3 类型库新增接口类型
- 15.7.4 二进制数据的交换
- 15.7.5 后台:COM的语言支持
- 15.8 TOleContainer
- 15.8.1 一个简单的示例程序
- 15.8.2 一个较为复杂的示例程序
- 15.9.4 小结
- 第16章 Windows外壳编程
- 16.1 托盘图标组件
- 16.1.1 API
- 16.1.2 处理消息
- 16.1.3 图标及提示
- 16.1.4 鼠标点击
- 16.1.5 隐藏应用程序
- 16.1.6 托盘图标应用程序示例
- 16.2 应用程序桌面工具栏
- 16.2.1 API
- 16.2.2 TAppBar:AppBar的窗体
- 16.2.3 使用TAppBar
- 16.3 外壳链接
- 16.3.1 获取IShellLink实例
- 16.3.2 使用IShellLink
- 16.3.3 创建一个外壳链接
- 16.3.4 获取及设置链接信息
- 16.3.5 示例程序
- 16.4 外壳扩展
- 16.4.1 COM对象向导
- 16.4.2 复制钩子处理器
- 16.4.3 环境菜单处理器
- 16.4.4 图标处理器
- 16.4.5 信息提示处理器
- 16.5 小结
- 第17章 使用Open Tools API
- 17.1 Open Tools接口
- 17.2 使用Open Tools API
- 17.2.1 简单的向导
- 17.2.2 Wizard向导
- 17.2.3 DDG Search
- 17.3 窗体向导
- 17.4 小结
- 第五部分 企业开发
- 第18章 使用COM+/MTS开发事务程序
- 18.1 什么是COM+
- 18.2 使用COM的原因
- 18.3 服务
- 18.3.1 事务
- 18.3.2 安全
- 18.3.3 及时激活
- 18.3.4 队列组件
- 18.3.5 对象缓冲池
- 18.3.6 事件
- 18.4 运行期
- 18.4.1 注册数据库(RegDB)
- 18.4.2 配置组件
- 18.4.3 运行环境(Contexts)
- 18.4.4 Neutral线程
- 18.5 创建COM+应用程序
- 18.5.1 目标:规模
- 18.5.2 执行环境
- 18.5.3 有状态(Stateful)和无状态(Stateless)
- 18.5.4 生命周期管理
- 18.5.5 COM+应用程序的组织
- 18.5.6 有关事务的思考
- 18.5.7 资源
- 18.6 Delphi中的COM+
- 18.6.1 COM+向导
- 18.6.2 COM+框架
- 18.6.3 Tic-Tac-Toe:一个简单的应用程序
- 18.6.4 调试COM+应用程序
- 18.7 小结
- 第19章 CORBA开发
- 19.1 CORBA特性
- 19.2 CORBA体系结构
- 19.2.1 OSAgent
- 19.2.2 接口
- 19.3 接口定义语言
- 19.3.1 基本类型
- 19.3.2 用户定义类型
- 19.3.3 别名
- 19.3.4 枚举
- 19.3.5 结构
- 19.3.6 数组
- 19.3.7 序列
- 19.3.8 方法参数
- 19.3.9 模块
- 19.4 银行案例
- 19.5 复杂数据类型
- 19.6 Delphi、CORBA和Enterprise Java Beans(EJB)
- 19.6.1 Delphi程序员EJB速成
- 19.6.2 EJB是一种特殊的组件
- 19.6.3 EJB在容器中运行
- 19.6.4 EJB具有预定义的API
- 19.6.5 Home(本地)接口和Remote(远程)接口
- 19.6.6 EJB的类型
- 19.6.7 配置JBuilder 5以开发EJB
- 19.6.8 创建一个简单的“Hello'world” EJB
- 19.7 CORBA和Web Services
- 19.7.1 创建Web Service
- 19.7.2 创建SOAP客户端应用程序
- 19.7.3 添加CORBA客户端代码至Web Service中
- 19.8 小结
- 第20章 BizSnap开发:基于SOAP的Web Services
- 20.1 Web Services
- 20.2 SOAP
- 20.3 编写Web Service
- 20.3.1 TWebModule
- 20.3.2 定义一个可调用接口
- 20.3.3 实现一个可调用接口
- 20.3.4 测试Web Service
- 20.4 从客户端调用Web Service
- 20.4.1 为远程可调用对象产生一个输入单元
- 20.4.2 使用THTTPRIO组件
- 20.5 小结
- 第21章 DataSnap开发
- 21.1 创建多层应用程序的机制
- 21.2 多层体系结构的优点
- 21.2.1 集中商业逻辑
- 21.2.2 瘦客户结构
- 21.2.3 自动错误调解
- 21.2.4 公文包模型
- 21.2.5 容错性
- 21.2.6 负载平衡
- 21.3 典型的DataSnap结构
- 21.3.1 服务器
- 21.3.2 客户端
- 21.4 使用DataSnap创建应用程序
- 21.4.1 创建服务器
- 21.4.2 创建客户端
- 21.5 更多增强应用程序健壮性的措施
- 21.5.1 客户端优化技术
- 21.5.2 应用程序服务器技术
- 21.6 实例
- 21.7 Client Dataset组件的更多特性
- 21.8 典型错误
- 21.9 配置DataSnap应用程序
- 21.9.1 发放许可证
- 21.9.2 DCOM配置
- 21.9.3 文件配置
- 21.9.4 Internet配置考虑(防火墙)
- 21.10 小结
- 第六部分 Internet开发
- 第22章 ASP开发
- 22.1 理解活动服务器对象
- 22.2 活动服务器对象向导
- 22.2.1 类型库编辑器
- 22.2.2 新方法
- 22.2.3 ASP Response对象
- 22.2.4 第一次运行
- 22.2.5 ASP Request对象
- 22.2.6 重新编译活动服务器对象
- 22.2.7 再次运行活动服务器对象
- 22.3 ASP Session、Server和Application对象
- 22.4 活动服务器对象及数据库
- 22.5 活动服务器对象及NetCLX支持
- 22.6 调试活动服务器对象
- 22.6.1 使用MTS调试活动服务器对象
- 22.6.2 采用Windows NT 4调试
- 22.6.3 采用Windows 2000调试
- 22.7 小结
- 第23章 WebSnap开发
- 23.1 WebSnap的特性
- 23.1.1 多个Webmodule
- 23.1.2 服务器执行脚本
- 23.1.3 TAdapter(适配器)组件
- 23.1.4 多种调度方法
- 23.1.5 Page producer(页面生成器)组件
- 23.1.6 会话管理
- 23.1.7 登录服务
- 23.1.8 用户跟踪
- 23.1.9 HTML管理
- 23.1.10 文件上传服务
- 23.2 websnap开发
- 23.2.1 应用程序的设计
- 23.2.2 为应用程序添加功能
- 23.2.3 导航菜单栏
- 23.2.4 登录
- 23.2.5 管理用户偏好数据
- 23.2.6 在会话之间保存偏好数据
- 23.2.7 图像处理
- 23.2.8 显示数据
- 23.2.9 将应用程序转换为ISAPI DLL
- 23.3 高级话题
- 23.3.1 LocabFileServices(文件定位服务)
- 23.3.2 文件上传
- 23.3.3 包含定制模板
- 23.3.4 在TAdapterPageProducer中定制组件
- 23.4 小结
- 第24章 无线开发
- 24.1 开发技术的发展:回顾
- 24.1.1 20世纪80年代以前:庞然大物时代
- 24.1.2 20世纪80年代后期:桌面数据库应用程序
- 24.1.3 20世纪90年代早期:客户端/服务器
- 24.1.4 20世纪90年代后期:多层结构及基于Internet的事务处理
- 24.1.5 21世纪早期:扩展到无线移动领域的应用程序基础架构
- 24.2 移动无线设备
- 24.1.3 20世纪90年代早期:客户端/服务器
- 24.1.4 20世纪90年代后期:多层结构及基于Internet的事务处理
- 24.1.5 21世纪早期:扩展到无线移动领域的应用程序基础架构
- 24.2 移动无线设备
- 24.2.1 移动电话
- 24.2.2 palmos设备
- 24.2.3 Pocket PC
- 24.2.4 RIM BlackBerrv
- 24.3 无线电技术
- 24.3.1 GSM、CDMA和TDMA
- 24.3.2 CDPD
- 24.3.3 3G
- 24.3.4 GPRS
- 24.3.5 蓝牙
- 24.3.6 802.11
- 24.4 基于服务器的无线数据技术
- 24.4.1 SMS
- 24.4.2 WAP
- 24.4.3 I-mode
- 24.4.4 PQA
- 24.5 无线用户体验
- 24.5.1 环路选择网络和数据包选择网络
- 24.5.2 无线并非Web
- 24.5.3 窗体因素的重要性
- 24.5.4 数据输入和导航技术
- 24.5.5 M-Commerce
- 24.6 小结