--DELPHI基础教程--第二十章 开发Delphi对象式数据管理功能(五)
delphi教程Delphi是一种基于ObjectPascal编程语言的集成
delphi教程Delphi是一种基于ObjectPascal编程语言的集
成
Delphi是一种基于Object Pascal编程语言的集成开发环境,Delphi的基本教程:
1. 安装Delphi
从官方网站下载并安装Delphi集成开发环境。
2. 新建工程
启动Delphi,新建一个工程。
3. 编写代码
编写代码并进行编译与调试,了解面向对象编程的基本概念和语法规范。
4. 学习基础组件
学习Delphi中的基础组件,例如标签、编辑框等等,并了解它们的用途和属性设置。
5. 数据库编程
学习如何在Delphi中进行数据库编程,了解ADO和BDE等数据库连接方式及SQL语法。
6. 界面设计
学习如何设计复杂的窗体和界面,掌握控件布局和事件处理方法。
7. 组件开发
学习组件开发与封装,掌握在Delphi中开发自定义组件的方法以及组件开发的规范及原则。
总之,Delphi的学习需要掌握基础的编程知识,同时还需要熟悉其开发环境的操作方法。
通过系统地学习Delphi的基础组件、数据库编程、界面设计和组件开发等方面的知识,可以让你更好地掌握这个强大的开发工具。
《DELPHI基础教程》
《DELPHI基础教程》1第一章Delphi快速入门(一)第一章Delphi快速入门(二)第一章Delphi快速入门(三)第一章Delphi快速入门(四)第一章Delphi快速入门(五)第二章Delphi面向对象的编程方法(一)第二章Delphi面向对象的编程方法(二)第二章Delphi面向对象的编程方法(三)第二章Delphi面向对象的编程方法(四)第三章字符串列表及应用(一)第三章字符串列表及应用(二)第四章文本编辑器的设计(一)第四章文本编辑器的设计(二)第五章Delphi图形图像编程(一)第五章Delphi图形图像编程(二)第六章文件管理(一)第六章文件管理(二)第六章文件管理(三)第七章剪贴板和动态数据交换(一)第七章剪贴板和动态数据交换(二)第八章对象链接与嵌入(一)第八章对象链接与嵌入(二)第九章Delphi拖放编程第十章动态链接库编程(一)第十章动态链接库编程(二)第十一章Delphi应用程序的应用(一)第十一章Delphi应用程序的应用(二)第十二章异常处理与程序调试(一)第十二章异常处理与程序调试(二)第十二章异常处理与程序调试(三)第十三章Delphi开发数据库应用程序概述(一)第十三章Delphi开发数据库应用程序概述(二)第十四章简单数据库应用的创建及MASTAPP介绍(一)第十四章简单数据库应用的创建及MASTAPP介绍(二)第十四章简单数据库应用的创建及MASTAPP介绍(三)第十五章数据访问部件的应用及编程(一)第十五章数据访问部件的应用及编程(二)第十五章数据访问部件的应用及编程(三)第十六章数据浏览部件的应用及编程(一)第十六章数据浏览部件的应用及编程(二)第十七章SQL编程(一)第十七章SQL编程(二)第十八章Delphi客户服务器应用开发(一)第十八章Delphi客户服务器应用开发(二)第十八章Delphi客户服务器应用开发(三)第十八章Delphi客户服务器应用开发(四)第十九章Delphi自定义部件开发(一)第十九章Delphi自定义部件开发(二)第十九章Delphi自定义部件开发(三)第十九章Delphi自定义部件开发(四)第二十章开发Delph i对象式数据管理功能(一)第二十章开发Delphi对象式数据管理功能(二)第二十章开发Delphi对象式数据管理功能(三)第二十章开发Delphi对象式数据管理功能(四)第二十章开发Delphi对象式数据管理功能(五)Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。
delphi教程
delphi教程Delphi是一种先进的编程语言和集成开发环境(IDE),经常用于快速开发可视化和跨平台的应用程序。
它是由Embarcadero Technologies开发的。
Delphi结合了面向对象编程和事件驱动编程的特点,并提供了强大的组件库和可视化设计工具,使开发人员能够轻松地创建功能强大且用户友好的应用程序。
Delphi教程可以帮助初学者了解和掌握Delphi编程语言的基础知识和技巧。
以下是一个简单的Delphi教程,介绍了一些基本概念和常用功能。
首先,我们需要了解Delphi的开发环境。
Delphi IDE提供了代码编辑器、可视化设计界面和调试工具等组件。
开发人员可以使用代码编辑器编写Delphi代码,使用界面设计器创建用户界面,以及使用调试工具调试和测试应用程序。
接下来,让我们来了解一些Delphi的基本概念。
Delphi是基于面向对象编程的语言,它使用类和对象来组织代码。
一个类是一个定义了一组属性和方法的模板,而对象是类的实例。
开发人员可以创建自己的类,并定义适用于这些类的属性和方法。
Delphi还支持事件驱动编程模型。
开发人员可以定义事件处理程序,以响应用户的操作或系统产生的事件。
通过将事件处理程序与控件的事件关联,开发人员可以实现用户界面的交互和功能。
Delphi还提供了丰富的组件库,其中包括许多预定义的控件和功能。
这些控件可以用于创建用户界面,例如按钮、文本框、列表框等等。
开发人员可以使用这些控件和组件来构建功能丰富的应用程序。
此外,Delphi还支持数据访问和数据库操作。
开发人员可以使用Delphi提供的数据库组件来连接和操作各种数据库,如Oracle、MySQL、Microsoft SQL Server等。
最后,Delphi还具有跨平台的能力。
开发人员可以使用一套代码开发应用程序,并在不同的操作系统上运行,如Windows、macOS和Linux等。
总结一下,Delphi是一种强大的编程语言和集成开发环境,适用于开发各种类型的应用程序。
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[3]
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[3]Position属性的定义中包含了两个读写控制 ... GetPosition和SetPosition:riter = class(TFiler)privateFRootAncestor: TComponent;…function GetPosition: Longint;procedure SetPosition(Value: Longint)public…property Position: Longint read GetPosition write SetPosition;property RootAncestor: TComponent read FRootAncestor write FRootAncestor;end;GetPosition和SetPosition ... 实现如下function riter GetPosition: Longint;beginResult := FStream Position + FBufPos;end;procedure riter SetPosition(Value: Longint)varStreamPosition: Longint;beginStreamPosition := FStream Position;{ 只清除越界的缓冲区 }if (Value < StreamPosition) or (Value > StreamPosition + FBufPos) thenbeginWriteBuffer;FStream Position := Value;endelse FBufPos := Value StreamPosition;end;WriteBuffer是riter对象定义的私有 ... 它的作用是将Writer 对象内部缓冲区中的有效数据写入流中并将FBufPos置为Writer对象的FlushBuffer对象就是用WriteBuffer ... 刷新缓冲区在SetPosition ... 中如果Value值超出了边界(FStream Position FStream Position + FBufPos)就将缓冲区中的内容写入流重新设置缓冲区在流中的相对位置否则就只是移动FBufPos指针riter ... 的实现⑴ WriteListBegin和WriteListEnd的实现这两个 ... 都是用于写连续若干个相同类型的值 WriteListBegin写入VaList标志 WriteListEnd写入VaNull标志procedure riter WriteListBegin;beginWriteValue(vaList)end;procedure riter WriteListEnd;beginWriteValue(vaNull)end;这两个 ... 都调用riter对象的WriteValue ... 该 ... 主要用于写入TValueType类型的值procedure riter WriteValue(Value: TValueType)beginWrite(Value SizeOf(Value))end;⑵ 简单数据类型的写入简单数据类型指的是整型字符型字符串型浮点型布尔型等 riter 对象都定义了相应的写入 ...WriteInteger ... 用于写入整型数据procedure riter WriteInteger(Value: Longint)beginif (Value >= ) and (Value <= ) thenbeginWriteValue(vaInt )Write(Value SizeOf(Shortint))end elseif (Value >= ) and (Value <= ) thenbeginWriteValue(vaInt )Write(Value SizeOf(Smallint))end elsebeginWriteValue(vaInt )Write(Value SizeOf(Longint))end;end;WriteInteger ... 将整型数据分为位位和位三种并分别用vaInt vaInt 和VaIntWriteBoolean用于写入布尔型数据procedure riter WriteBoolean(Value: Boolean)beginif Value thenWriteValue(vaTrue) elseWriteValue(vaFalse)end;与其它数据类型不同的是布尔型数据只使用了标志位是存储布尔值在标志位后没有数据WriteFloat ... 用于写入浮点型数据procedure riter WriteFloat(Value: Extended)beginWriteValue(vaExtended)Write(Value SizeOf(Extended))end;字符串 True False 和 nil 作为标识符传入是由于Delphi的特殊需要如果是 True False 和 nil 则写入VaTrue VaFalse和VaNil 否则写入VaIdent标志接着以字符串形式写入标识符WriteString ... 用于写入字符串procedure riter WriteString(const Value: string)varL: Integer;beginL := Length(Value)if L <= thenbeginWriteValue(vaString)Write(L SizeOf(Byte))end elsebeginWriteValue(vaLString)Write(L SizeOf(Integer))end;Write(Pointer(Value)^ L)end;Delphi的字符串类型有两种一种长度小于个字节另一种长度小于个字节WriteString ... 区分这两类情况存储字符串一种设置VaStirng标志另一种设置VaLString 然后存储字符串的长度值最后存储字符串数据lishixinzhi/Article/program/Delphi/201311/25098。
delphi教程
delphi教程
Delphi 是一种基于 Pascal 的编程语言,用于创建窗体应用程序和控制台应用程序。
以下是一些Delphi的教程和指南,可以帮助您入门以及深入了解Delphi的各种功能和特性。
1. Delphi 简介和基础知识
- Delphi 是什么?它的历史和背景
- 安装和设置 Delphi 开发环境
- Delphi IDE 的界面和基本功能介绍
- Delphi 的 Pascal 语法和常用关键字
2. Delphi 窗体应用程序开发
- 创建一个简单的窗体应用程序
- 窗体的属性和事件
- 使用组件和控件设计用户界面
- 处理用户输入和事件响应
3. Delphi 数据库应用程序开发
- 连接和操作数据库
- 使用 SQL 查询和更新数据库
- 数据库表格和字段的创建和管理
- 数据集和数据绑定
4. Delphi 高级特性和技巧
- 使用面向对象编程技术
- 使用线程和并发处理
- 图形和图像处理
- 异常处理和调试技巧
5. Delphi 与其他技术的集成
- 使用外部 DLL 和动态链接库
- 与 Web 服务进行通信
- 与其他编程语言进行互操作
- 创建和使用自定义组件和控件
以上是一些Delphi教程的主要内容,在学习过程中,您可以通过搜索更多的资料来深入了解每个主题。
准备好了解Delphi 的强大功能和灵活性吗?开始学习吧!。
Delphi编程入门讲解
常用工具按钮介绍
9
定制代码编辑器 Tools—Editor Properties
10
保存定制开发环境 View—Desktop—Save Desktop
11
项目目录设置 Project—Options
12
组件库路径设置 Tools—Environment Options
13
从当前工程已有基类继承
14
断点设置与调试
15
常用快捷键
F3:继续查找 F4:运行程序至光标处 F5:设置断点 F7:跟踪调试 F8:单步调试 F9:运行程序 F11:在Form/Unit和Object Inspector(对象查看器)之间切换 F12:在Form和Unit之间切换 Ctrl+F9:编译 Ctrl+Alt+F11:弹出Project Options(工程管理器) Ctrl+Shift+上/下方向键:在过程的声明和实现间切换 Ctrl+J:插入标准语法代码 Ctrl+Shift+U,Ctrl+Shift+I:将所选择的代码整体右移或者左移 Ctrl+Shift+C:完成已声明类的实现 Shift+Alt+F11:对象树状视图
ch1,ch2:letter; 39
2、子界类型数据的运算规则
①凡可使用基类型的运算规则同样适用该类 型的子界类型。 ②基类型相同的不同子界类型数据可以进行 混合运算。
var liInt1: 1..10;
liInt2: 10..20; liInt3: Integer; begin liInt1 := 5; liInt2 := 11; liInt3 := liInt1+liint2; ShowMessage(IntToStr(liInt3)); end;
《Delphi的语法基础》课件
封装与抽象
总结词
封装隐藏对象的内部细节,抽象提供对对象的通用接口 。
详细描述
封装是将对象的属性和方法封装到一个独立的单元中, 对外只暴露必要的接口。通过封装,可以隐藏对象的内 部实现细节,保护数据的安全性和完整性。抽象是通过 定义抽象类和接口来规定对象的通用行为和协议,具体 的实现细节由子类来完成。通过抽象,可以定义一组通 用的接口,使得程序更加灵活和可扩展。
05
CATALOGUE
Delphi的异常处理
异常的概念与分类
异常的概念
异常是指在程序运行过程中出现的不正常情况或错误条件,导致程序无法正常执行。
异常的分类
根据异常的性质和来源,可以将异常分为运行时异常和编译时异常。运行时异常通常是由于程序逻辑 错误或运行环境问题引起的,而编译时异常则是在编译代码时发现的错误。
文本框控件
ห้องสมุดไป่ตู้
总结词
可与多种控件配合使用
详细描述
文本框控件可以与其他控件配合使用,如按钮、列表框等。通过与这些控件的交互,可 以实现更复杂的功能,如数据验证、自动完成等。
文本框控件
总结词
灵活的属性设置
VS
详细描述
文本框控件具有丰富的属性设置,如 MaxLength、ReadOnly、 PasswordChar等。这些属性可以根据需 要进行设置,以满足不同的需求。
异常的捕获与处理
异常的捕获
在Delphi中,可以使用try-except语句来捕获异常。try语句块包含可能引发异常的代 码,而except语句块则用于处理异常。当try语句块中的代码引发异常时,程序将跳转
到相应的except语句块进行处理。
异常的处理
在except语句块中,可以使用特定的异常处理程序来处理特定的异常。处理程序可以 使用特定的变量来访问有关异常的信息,例如异常类型、消息和源代码位置等。根据需
DELPHI中文帮助手册INDEX
目录第一部分基础篇第一章Delphi快速入门1.1 Delphi基本概念介绍1.1.1 Delphi的基本形式1.1.2 面向对象编程的概念1.2 Delphi2.0快速入门1.2.1 进入Delphi的可视化编程环境1.2.2 Delphi 2.0可视化编程环境介绍1.2.3 设计简单的用户界面1.2.4 改变对象的属性1.2.5 编写事件处理过程1.2.6 使用联机帮助Help1.3 Delphi2.0的可视化部件用法简介1.3.1 常用的文本相关部件1.3.2 按钮和检查框部件1.3.3 分组、分界部件1.3.4 图形、图象部件1.3.5 关系图、文件列表部件1.3.6 滚动部件1.3.7 网格、表格部件1.3.8 多媒体(MultiMedia)和OLE部件1.4 使用非可视部件1.4.1 使用菜单部件1.4.2 使用计时器部件Timer1.4.3 使用公用对话框部件1.5 使用Delphi的工程管理、设计工具1.5.1 创建多窗体工程项目1.5.2 使用工程管理器1.5.3 使用窗体样板和对话框专家1.5.4 使用工程样板和应用专家第二章Delphi 面向对象的编程方法2.1 编写Object Pascal程序代码2.1.1 编写赋值语句2.1.2 标识符的说明与使用2.1.3 过程与函数2.1.4 跳转语句2.1.5 循环语句2.1.6 程序模块2.1.7 关于作用范围2.1.8 编写一个过程或函数2.1.9 定义新的数据类型2.1.10 Object Pascal的库单元Unit 2.2 用Delphi的对象进行编程2.2.1 什么是对象2.2.2 从一个对象中继承数据和方法2.2.3 对象的范围2.2.4 对象公有域和私有域的说明2.2.5 访问对象的域和方法2.2.6 对象变量的赋值2.2.7 建立非可视化对象第三章字符串列表及应用3.1 字符串列表的常用操作3.1.1 列表中操作字符串3.1.2 装载、保存字符串列表3.1.3 创建新的字符串列表3.1.4 往字符串列表中加入对象3.2 字符串列表应用3.2.1 设置自画风格3.2.2 把图像加入字符串列表3.2.3 绘制自画项目第4章文本编辑器的设计4.1 多文档界面4.1.1 创建父窗体4.1.2 创建子窗体4.1.3 创建应用程序菜单与菜单融合4.2 多页面界面4.2.1 静态多页面界面4.2.2 动态多页面界面4.3 文本编辑部件及应用4.3.1 TEdit部件4.3.2 TMemo部件4.4 常用对话框的使用4.4.1 字体对话框部件4.4.2 查找对话框部件4.4.3 替换对话框部件4.4.4 打开对话框部件4.5 文件打印4.5.1 TPrinter对象4.5.2 打印对话框第五章Delphi图形图像编程5.1 图形对象概述5.1.1 TCanvas对象5.1.2 TPen对象5.1.3 TBrush对象5.1.4 TColor类型5.2 图形程序的开发5.2.1 在工具条中加快速键5.2.2 响应鼠标事件5.2.3 绘图功能的实现5.3 图像对象概述5.3.1 TGraphic对象5.3.2 TPicture对象5.3.3 TImage部件5.3.4 TBitmap对象5.4 图像对象的应用第六章文件管理6.1 文件类型和标准过程6.1.1 文本文件6.1.2 记录文件6.1.3 无类型文件6.1.4 Delphi的文件管理标准过程6.2 记录文件的应用6.2.1 任务介绍6.2.2 设计基本思路6.2.3 记录文件的创建和打开6.2.4 记录文件的读入和显示6.2.5 增加一条记录6.2.6 修改记录6.2.7 记录的删除、插入、排序6.2.8 结果综合6.2.9 编辑对话框的输入检查6.2.10 文件和系统的关闭6.2.11 记录文件小结6.3 文件控件的应用6.3.1 文件控件及其相互关系6.3.2 文件名浏览查找系统的设计思路6.3.3 文件名浏览查找系统的功能和实现6.4 文件管理器的实现6.4.1 设计基本思路6.4.2 子窗口的创建、布置和关闭6.4.3 文件控件的联系6.4.4 DriveTabSet的自画风格显示6.4.5 文件管理基本功能的实现6.4.6 其它文件管理功能的实现6.4.7 目录管理功能的实现6.4.8 一些问题的处理6.4.9 小结第七章剪贴板和动态数据交换7.1 剪贴板及其应用7.1.1 使用剪贴板传输文本7.1.2 剪贴板类7.1.3 利用剪贴板传输图像7.1.4 建立自己的剪贴板观察程序7.2 Windows的DDE原理和Dephi的DDE实现机制7.2.1 Windows的DDE原理7.2.2 Delphi的DDE实现机制简介7.3 DDE客户程序的实现7.3.1 联接模式7.3.2 与DDE服务器建立联系7.3.3 数据申请7.3.4 数据发送7.3.5 控制服务器应用程序的执行7.3.6 格式化文本7.3.7 响应DDE事件7.3.8 利用客户程序和Excel交换数据7.3.9 用客户程序控制程序管理器7.4 DDE服务器程序的实现7.4.1 与DDE客户程序建立联接7.4.2 响应DDE事件7.4.3 DDE服务器应用例程7.4.4 小结第八章对象的链接与嵌入8.1 OLE简介8.1.1 OLE1.0和OLE2.08.1.2 链接与嵌入8.1.3 设计状态OLE对象的创建8.1.4 OLE类·文本、项目8.2 设计状态OLE对象的创建8.2.1 TOLEContainer部件8.2.2 OLE对象创建的步骤8.3 OLE应用程序的开发8.3.1 OLE应用程序界面开发8.3.2 插入对象8.3.3 冻结对象8.3.4 粘贴对象8.3.5 释放对象8.3.6 文件中的OLE对象8.4 OLE自动化8.4.1 TAutoObject对象8.4.2 创建OLE自动化服务器8.4.3 自动化另一程序第九章Delphi 拖放(DragDrop)编程9.1 控件的拖放支持9.1.1 拖放属性9.1.2 拖放事件9.1.3 拖放方法9.2 开发拖放功能的一般步骤9.2.1 开始拖动操作9.2.2 接收拖动项目9.2.3 放下拖动项目9.2.4 结束拖动操作9.3 文件管理器的拖放支持第十章动态链接库(DLLs)编程10.1 Windows的动态链接库原理10.1.1 动态链接库的工作原理10.1.2 Windows系统的动态链接库10.2 DLLs的编写和调用10.2.1 DLLs的编写10.2.2 调用DLLs10.2.3 静态调用10.2.4 动态调用10.3 利用DLLs实现数据传输10.3.1 DLL中的全局内存10.3.2 利用DLLs实现应用程序间的数据传输10.4 利用DLLs实现窗体重用10.4.1 利用DLL实现窗体重用的一般步骤10.4.2 窗体重用实例10.4.3 小结第十一章Delphi应用程序的Help应用11.1 Help文件的建立11.1.1 建立Help文件所需的工具和文件11.1.2 Help文件的创建11.2 Delphi应用程序的Help编程11.2.1 定义应用程序的帮助文件11.2.2 通用对话框中使用帮助系统11.3 Delphi帮助提示(Hint)的应用11.3.1 帮助提示的显示11.3.2 OnHint事件11.4 自定义部件的帮助的安装第十二章异常处理与程序调试12.1 Delphi异常处理机制与异常类12.1.1 运行时间库异常类(RTL Exception)12.1.2 对象异常类12.1.3 部件异常类12.1.4 小结12.2 异常保护12.2.1 需要保护的资源12.2.2 产生一个资源保护块12.3 异常响应12.3.1 使用异常实例12.3.2 提供缺省响应12.3.3 响应一族异常12.3.4 异常的重引发和处理嵌套12.3.5 自定义异常类的应用12.3.6 利用异常响应编程12.4 程序调试简介12.4.1 调试的准备和开始12.4.2 程序运行的控制12.4.3 断点的使用12.4.4 监视数据的值12.5 其它调试工具12.5.1 Turbo Debugger12.5.2 WinSight12.5.3 WinSpector12.6 使用Browser12.6.1 设置过滤器12.6.2 使用加速菜单12.6.3 查找按钮12.6.4 Detalls区的显示页12.6.5 使用Browser12.6.6 小结第二部分数据库篇第十三章Delphi开发数据库应用程序概述13.1 数据库系统概述13.1.1 数据库管理系统13.1.2 数据库应用程序13.2 Delphi的数据库特性及功能简介13.2.1 Delphi的数据库特性13.2.2 Delphi可以访问的数据源13.3 Delphi数据库的体系结构13.3.1 数据访问部件13.3.2 数据控制部件13.3.3 数据库窗体专家和数据库操作台(DBD)13.4 Delphi数据库应用程序的开发方法和步骤13.4.1 概述13.4.2 数据库应用程序的开发步骤13.4.3 交付数据库应用程序13.4.4 安装BDE13.4.5 安装SQL Links第十四章简单数据库应用的创建及MASTAPP介绍14.1 简单的单表数据库应用14.1.1 选择相关的部件14.1.2 设置部件的属性14.1.3 运行程序14.2 利用TDBNavigator部件创建存取程序14.2.1 创建应用程序窗体14.2.2 使用TDBNavigator部件移动记录指针14.2.3 定制TDBNavigator部件14.3 创建主要──明细数据库应用14.3.1 一对多关系的主要──明细型数据库应用程序14.3.2 一对多关系的数据库应用14.4 字段对象的使用14.4.1 字段对象的类型14.4.2 创建永久性的字段对象14.4.2 字段对象的属性设置14.4.4 字段对象的访问14.4.5 设定字段对象的显示格式14.4.6 自定义字段以及计算字段对象的创建14.5 查询数据库中的记录14.5.1 使用GotoKey方法查找数据记录14.5.2 使用FindKey方法查找数据库中的记录14.5.3 利用GotoNearest和FindNearest执行不精确查找14.6 修改数据库中的记录14.6.1 Edit和Post方法14.6.2 实现异常保护的try...finally语句14.7 插入和删除记录14.7.1 逐步插入方法14.7.2 调用InsertRecord插入记录14.8 输入数据的有效性验证第十五章数据访问部件的应用及编程15.1 Delphi数据访问部件的层次结构15.2 TSession部件及其应用15.2.1 TSession部件的重要属性及作用15.2.2 TSession部件的方法:15.2.3 TSession部件应用举例15.3 数据集部件TDataSet及其应用15.3.1 数据集部件的几种状态(或称模式)15.3.2 数据集的打开的关闭15.3.3 数据集的导航15.3.4 数据集中的数据维护15.3.5 数据集部件与数据浏览部件的连接15.3.6 数据集部件的事件15.4 TTable部件及应用15.4.1 TTable部件主要的属性15.4.2 TTable部件的方法及应用15.5 TDataSource部件及其应用15.5.1 TDataSource部件的属性15.5.2 TDataSource部件的事件15.6 字段部件和字段编辑器的使用15.6.1 字段部件15.6.2 字段编辑器的使用15.7 TReport部件及其应用15.8 应用举例——多个窗体显示同一个数据库表第十六章数据浏览部件的应用及编程16.1 数据浏览部件的基本特性16.2 使用TDBText部件显示表中的数据16.3 使用TDBEdit部件显示和编辑表中的数据16.4 用TDBGrid部件显示和编辑表中的数据16.4.1 TDBGrid部件的主要属性及应用16.4.2 TDBGrid部件的事件及应用16.5 TDBNavigator部件及其应用16.6 TDBMemo部件及其应用16.7 TDBImage部件及其应用16.8 数据浏览部件中的列表框和组合框16.8.1 TDBComboBox部件16.8.2 TDBListBox部件第十七章SQL编程17.1 SQL语言简介17.1.1 SQL的历史17.1.2 SQL的优点17.2 TQuery部件在SQL编程中的运用17.2.1 TQuery部件的使用17.2.2 在TQuery部件中编写简单的SQL查询命令17.3 SQL语言编程概述17.3.1 SQL命令文本的编写17.3.2 SQL程序的执行17.3.3 通过TQuery部件如何获得活动的数据17.4 动态SQL语句的编程17.4.1 使用Params属性为参数赋值17.4.2 使用ParamByName方法为参数赋值17.4.3 使用Datasource属性为参数赋值17.4.4 Prepare方法的使用17.5 SQL编程实例17.5.1 设计简单的SQL程序编辑器17.5.2 设计一个数据库查询器第三部分高级开发篇第十八章Delphi客户/服务器应用开发18.1 Delphi客户/服务器应用开发原理18.1.1 客户/服务器体系结构18.1.2 关系数据库体系结构与客户/服务器模式18.1.3 各种数据库服务器功能介绍18.1.4 IDAPI结构原理18.2 Delphi客户/服务器应用开发环境的构造18.2.1 Borland SQL Links 的安装18.2.2 配置SQL环境18.3 Delphi 客户/服务器编程18.3.1 使用TDatabase部件联接SQL服务器18.3.2 处理客户/服务器事务控制18.3.3 使用存储过程18.3.4 从开发平台到服务器的向上适化18.4 Delphi客户/服务器应用实例分析18.4.1 数据库环境介绍18.4.2 应用程序分析第十九章Delphi 自定义部件开发19.1 Delphi部件原理19.1.1 什么是部件19.1.2 编写部件的不同之处19.1.3 建立部件过程概略19.2 Delphi部件编程方法19.2.1 Delphi部件编程概述19.2.2 Delphi部件编程19.3 Delphi部件编程实例19.3.1 创建数据库相关的日历控制——TDBCalendar19.3.2 创建图形部件第二十章开发Delphi对象式数据管理功能20.1 流式对象的实现原理和应用20.1.1 TStream对象20.1.2 THandleStream对象20.1.3 TFileStream对象20.1.4 TCustormMemoryStream对象20.1.5 TMemoryStream对象20.1.6 TResourceStream对象20.1.7 TBlobStream对象20.2 读写对象的实现原理和应用20.2.1 TFiler对象20.2.2 TWriter对象20.2.3 TReader对象20.3 Delphi对象式数据管理应用实例20.3.1 Delphi动态DFM文件及部件的存取在超媒体系统中的应用20.3.2 数据库BLOB字段的应用20.3.3 存取嵌入在OleContainer对象中的OLE服务器的数据附录附录A 配置数据库引擎BDE(Borland DataBase Engine)一、数据库引擎(Borland Database Engine)的配置指南1、BDE配置工具概述2、存储配置信息二、配置Microsoft ODBC1、配置Miscrosoft ODBC(Open Database Connectivity)的步骤2、配置ODBC的配置文件3、配置ODBC的BDE配置文件4、ODBC的端口配置入口5 、关于AutoODBC三、BDE配置工具的参数1、数据库引擎配置工具的System页2、数据库引擎配置工具的Date页3、数据库引擎配置工具的Time页4、数据库配置工具的Number页5、数据库引擎配置工具的Driver页6、数据库引擎配置工具的Alias页附录B Report Smith应用概述一、关于报表Reports和Repert Smith 3.0二、Reprort Smith概述三、熟悉Report Smith四、新版本Report Smith的新特点附录C InterBase概述一、Local InterBase二、InterBase Server三、InterBase的特性简介四、InterBase的约束五、语法规则六、数据库对象命名规则七、文件命名规则八、文件说明1、.主文件说明2、次级文件说明附录D 数据库桌面介绍一、数据库桌面(DataBase Desktop)新特点:1、工具条增强功能2、菜单增强功能3、文件处理增强功能4、工具增强功能5、联机帮助的增强功能6、SQL增强功能二、关于数据库桌面对象1、Tables2、Temporary Tables3、Queries4、SQL文件三、数据库桌面对象的文件扩展名四、关于数据库桌面窗口1、查询窗口2、SQL编辑器3、表格窗口4、工具条5、状态条。
delphi教程
delphi教程Delphi是一种基于Object Pascal语言的编程环境和开发工具,由Borland公司开发。
Delphi的设计目的是为了简化软件开发过程,提高开发效率,并且能够快速创建各种Windows应用程序。
Delphi教程是学习和掌握Delphi编程的一种方法和资源,它可以帮助初学者从基础开始,逐步了解Delphi的语法和特性,然后学习如何使用Delphi开发应用程序。
Delphi教程通常包括以下内容:1. Delphi概述:介绍Delphi的起源、特点和应用领域。
2. Delphi环境搭建:介绍如何安装和配置Delphi开发环境,包括安装Delphi IDE,设置编译器和调试器等。
3. Delphi语法:介绍Delphi的语法规则、关键字和数据类型,包括变量声明、函数定义、条件语句、循环语句等。
4. Delphi组件:介绍Delphi的组件库,包括常用组件和自定义组件的使用方法和属性设置。
5. Delphi界面设计:介绍如何使用Delphi的可视化界面设计工具创建用户界面,包括窗体设计、控件布局和事件处理等。
6. Delphi数据库编程:介绍如何使用Delphi连接和操作数据库,包括数据查询、数据更新和事务处理等。
7. Delphi调试和优化:介绍如何使用Delphi的调试工具找出程序中的错误和性能瓶颈,并进行优化。
8. Delphi应用程序发布:介绍如何将Delphi应用程序打包和发布,包括生成可执行文件、安装程序和更新程序等。
通过学习Delphi教程,初学者可以逐步掌握Delphi编程的基本技术和方法,能够使用Delphi开发出简单的Windows应用程序。
随着学习的深入,他们可以进一步学习高级的Delphi 技术和框架,开发出更复杂、功能更强大的应用程序。
此外,Delphi还有丰富的第三方组件和库可供使用,开发者可以根据自己的需求选择合适的扩展工具和资源,提高开发效率和应用程序的质量。
--DELPHI基础教程--第二十章开发Delphi对象式数据管理功能(五)
--DELPHI基础教程--第二十章开发Delphi对象式数据管理功能(五)-->DELPHI基础教程-->第二十章开发Delphi对象式数据管理功能(五)后一页前一页回目录回首页第二十章开发Delphi对象式数据管理功能(五)20.3.1.1写DFM文件的过程:WriteComponentResFie该过程带有两个参数FileName和Instance。
FileName参数指定要写入的DFM文件名,Instance参数是TComponent类型的,它指定要写入的部件名,一般是TForm对象的子类。
该过程将Instance部件和其拥有的所有部件写入DFM文件。
这个过程的意义在于,可以在程序运行过程中产生Delphi的窗体部件和在窗体中插入部件,并由该函数将窗体写入DFM文件,支持了动态DFM文件的重用性。
该过程的程序是这样的:procedure WriteComponentResFile(const FileName: string; Instance:TComponent);varStream: TStream;beginStream := TFileStream.Create(FileName, fmCreate);tryStream.WriteComponentRes(Instance.ClassName, Instance);finallyStream.Free;end;end;函数中,用FileStream创建文件,用Stream对象的WriteComponetRes方法将Instance写入流中。
20.3.1.2 读DFM文件的函数:ReadComponentResFileReadComponentResFile函数带有两个参数FileName和Instance。
FileName参数指定要读DFM文件名,Instance参数指定从DFM文件中要读的部件。
该函数从DFM文件中将Instance和它拥有的所有部件,并返回该部件。
delphi教程
Delphi教程什么是Delphi?Delphi是一种编程语言和集成开发环境(IDE),用于开发跨平台的Windows应用程序。
它是由Embarcadero Technologies公司开发的,首次发布于1995年。
Delphi基于Object Pascal语言,具有强大的开发工具和丰富的类库,使开发人员能够快速构建可靠和强大的应用程序。
Delphi的特点Delphi具有许多令人称赞的特点,这些特点使其成为许多开发人员首选的开发工具。
1. 面向对象编程(OOP)Delphi是一个面向对象的编程语言,支持封装、继承和多态等OOP概念。
面向对象编程使得代码更具可重用性和可维护性,开发人员可以更加高效地编写和组织代码。
2. 可视化开发Delphi使用可视化开发工具,如窗体设计器和组件库,使开发人员能够通过拖放和设置属性的方式创建用户界面。
这种可视化开发方式对于快速原型设计和用户界面调整非常有帮助。
3. 强大的集成开发环境(IDE)Delphi提供了一套强大的集成开发环境,其中包括代码编辑器、调试器、编译器、版本控制和用户界面设计工具等。
这些工具使开发人员能够在一个集成的环境中完成所有开发任务,提高了开发效率。
4. 多平台支持Delphi支持跨平台开发,可以在Windows操作系统上开发应用程序,也可以将应用程序移植到其他平台,如iOS和Android。
这种多平台支持使得开发人员可以更好地达到更广泛的用户群体。
Delphi的应用领域Delphi适用于各种类型的应用程序开发,从桌面应用程序到互联网应用程序,都可以使用Delphi进行开发。
1. 桌面应用程序Delphi可以用于开发各种类型的桌面应用程序,如图形用户界面(GUI)应用程序、数据库应用程序、科学计算应用程序等。
它提供了丰富的组件库和可视化开发工具,使开发人员能够轻松构建功能强大的桌面应用程序。
2. 互联网应用程序Delphi也可以用于开发互联网、Web和移动应用程序。
第二十章 开发Delphi对象式数据管理功能
第二十章开发Delphi对象式数据管理功能(一)面向对象技术是九十年代的主流技术,各类应用软件如果以面向对象的方法构造并且渗透面向对象的风格将使软件具有更高的品质。
在面向对象程序设计中,对象式数据管理占有很重要的地位。
在Delphi中,对对象式数据管理的支持方式是其一大特色。
Delphi是一个面向对象的可视化设计与面向对象的语言相结合的集成开发环境。
Delphi的核心是部件。
部件是对象的一种。
Delphi应用程序完全是由部件来构造的,因此开发高性能的Delphi应用程序必然会涉及对象式数据管理技术。
对象式数据管理包括两方面的内容:●用对象来管理数据●对各类数据对象(包括对象和部件)的管理Delphi在这两方面都做的相当出色。
在Delphi的早期版本Turbo Pascal 中就曾有流(Stream)、群(Collection)和资源(Resource)等专门用于对象式数据管理的类。
在Delphi中,这些功能得到了大大的加强。
Delphi将对象式数据管理类归结为Stream对象(Stream)和Filer对象(Filer),并将它们应用于可视部件类库(VCL)的方方面面。
它们不仅提供了在内存、外存和Windows资源中管理对象的功能,还提供了在数据库BLOB字段中对象的功能。
在本章中将介绍Stream对象和Filer对象的实现原理、应用方法以及在超媒体系统中的应用。
这对于运用Delphi 开发高级应用是很重要的。
20.1 流式对象的实现原理和应用Stream对象,又称流式对象,是TStream、THandleStream、TFileStream、TMemoryStream、TResourceStream和TBlobStream等的统称。
它们分别代表了在各种媒介上存储数据的能力,它们将各种数据类型(包括对象和部件) 在内存、外存和数据库字段中的管理操作抽象为对象方法,并且充分利用了面向对象技术的优点,应用程序可以相当容易地在各种Stream对象中拷贝数据。
--DELPHI基础教程--第二十章 开发Delphi对象式数据管理功能(二)
方法访问和改变域中的内容;用Seek方法,在域中定位;用Truncate方法删除域中当前位置起所有的数据。
20.1.7.1 TBlobStream的属性和方法
UnlockResource(HGlobal);
FreeResource(HResInfo);
inherited Destroy;
end;
回顾Initialize方法,我们不难发现:
● ResourceStream没有额外地给资源重新分配内存,而是直接使用HGlobal句柄所指 的内存域
3. Write方法
TResourceStream的Write方法只完成一件事,就产生这个异常事件,其实现如下:
function TResourceStream.Write(const Buffer; Count: Longint): Longint;
应用程序资源的访问,因此称它为资源流。TResourceSream也是从TCustomMemoryStream
继承的。因此在TCustomMemoryStream对象的基础上,定义了与指定资源模块或资源文件建立连接的构造方法,并且还覆盖了Write,以实现向资源文件中写数据。
Read方法从数据库域的当前位置起复制Count个字节的内容到Buffer中。Buffer也必须至少分配Count个字节。Read方法返回实际传输的字节数,因为传输的字节数可能小于Count,所以需要选择符的边界判断。
2. Write方法
声明:function Write(const Buffer; Count: Longint); override; Longint;
Delphi教程(完整版)
◆Delphi 3对其组件库进行增强 ,完全支持 ActiveX组件及其创建 。
◆Delphi 4提供了Object Pascal语言的扩展 ,但 系统稳定性较差 。
◆1999年推出Delphi 5增强了数据库的功能
◆2001年6月推出Delphi 6 ,增加了大量的新 组件,使组件数目达350多个,以满足网络开 发的需要。
Delphi教程(完整版)
3.对象观察器 利用对象观察器,可以修改窗体或组件的
属性,或者使它们能够响应不同的事件 。
属性(Property)是一些数据,如高度、颜色、 字体等,它们决定了组件在屏幕上的外观。 事件(Event)则是一种消息处理机制,它能够 捕捉某种情况的发生并做出反应,像鼠标单 击和窗口打开就是两种典型的事件。
Delphi教程
Delphi教程(完整版)
课程介绍
▪ Delphi是著名的Borland公司开发的可 视化软件开发环境,自1995年问世以 来,带来了程序设计中的一场重大变 化。Delphi作为第四代编程语言,具 有简单、高效和功能强大等特点,这 些特点使得它为广大程序开发者所青 睐。
Delphi教程(完整版)
第1章 Delphi基础知识
1.1 Delphi简介
Delphi作为一种可视化的编程环境,经 历了7代产品的发展历程: ◆ Borland公司在1995年推出了基于 Windows平台的Delphi 1。 ◆ Delphi 2新增加的主要功能是对32位编 程的支持。还增加了如数据模块等多种高 效的数据重用功能。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, DFelophri教m程s(完,整D版i)alogs;
开发Delphi对象式数据管理功能(五)Delphi教程
开发Delphi对象式数据管理功能(五)Delphi教程20.3.1.1写DFM文件的过程:WriteComponentResFie 该过程带有两个参数FileName和Instance。
FileName参数指定要写入的DFM文件名,Instance参数是TComponent类型的,它指定要写入的部件名,一般是TForm对象的子类。
该过程将Instance部件和其拥有的所有部件写入DFM文件。
这个过程的意义在于,可以在程序运行过程中产生Delphi的窗体部件和在窗体中插入部件,并由该函数将窗体写入DFM文件,支持了动态DFM文件的重用性。
该过程的程序是这样的:procedure WriteComponentResFile(const FileName: string; Instance: TComponent);varStream: TStream;beginStream :=TFileStream.Create(FileName,fmCreate);tryStream.WriteComponentRes(Instance.ClassName, Instance);finallyStream.Free;end;end; 函数中,用FileStream创建文件,用Stream对象的WriteComponetRes方法将Instance写入流中。
20.3.1.2 读DFM文件的函数:ReadComponentResFile ReadComponentResFile 函数带有两个参数FileName和Instance。
FileName参数指定要读DFM文件名,Instance参数指定从DFM文件中要读的部件。
该函数从DFM文件中将Instance和它拥有的所有部件,并返回该部件。
这个函数的意义在于,配合WriteComponentResFile过程的使用支持DFM文件的重用性。
该函数的程序是这样的:function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;varStream: TStream;beginStream := TFileStream.Create(FileName, fmOpenRead);tryResult :=Stream.ReadComponentRes(Instance);finallyStream.Free;end;end; 程序中使用FileStream对象打开由FileName指定的DFM文件,然后用Stream对象的ReadComponentRes方法读出Instance,并将读的结果作为函数的返回值。
DELPHI学习---类和对象(五篇)
DELPHI学习---类和对象(五篇)Classes and objects(类和对象)类(或者类类型)定义了⼀个结构,它包括字段(也称为域)、⽅法和属性;类的实例叫做对象;类的字段、⽅法和属性被称为它的部件(components)或成员。
• 字段在本质上是⼀个对象的变量。
和记录的字段类似,类的字段表⽰⼀个类实例的数据项;• ⽅法是⼀个过程或者函数,它和类相关联。
绝⼤多数⽅法作⽤在对象(也就是类的实例)上,其它⼀些⽅法(称为类⽅法)作⽤在类上⾯。
• 属性被看作是访问对象的数据的接⼝,对象的数据通常⽤字段来存储。
属性有存取设定,它决定数据如何被读取或修改。
从程序的其它地⽅(在对象本⾝以外)来看,属性在很⼤程度上就像⼀个字段(但本质上它相当于⽅法,⽐如在类的实例中并不为它分配内存)。
对象被动态分配⼀个内存块,内存结构由类类型决定。
每个对象拥有类中所定义的每个字段的唯⼀拷贝,但⼀个类的所有实例共享相同的⽅法。
对象分别通过称为构造函数和析构函数的⽅法创建和销毁。
⼀个类变量实际是⼀个指针,它引⽤⼀个对象(称它为对象引⽤),所以,多个变量可以指向同⼀个对象。
像其它指针⼀样,⼀个类变量的值可以是nil。
虽然类变量是⼀个指针,但我们直接⽤它来表⽰⼀个对象,例如,SomeObject.Size := 100 是把对象的Size 属性设为100,你不能⽤下⾯的命令给它赋值:SomeObject^.Size := 100。
Class types(类类型)类类型必须在实例化之前进⾏声明并给定⼀个名称(不能在变量声明中定义⼀个类类型),你只能在程序(program)或单元(unit)的最外层声明类,⽽不能在过程或函数中声明。
⼀个类声明有如下格式type className = class (ancestorClass)memberListend;这⾥,className 是任何有效标志符,(ancestorClass)是可选的,memberList 声明类的各成员,也就是它的字段、⽅法和属性。
第二十章开发Delphi对象式数据管理功能(三)
20.2.1.1 TFiler对象的属性和方法1. Root属性声明:property Root: TComponent;Root 属性给Filer对象指出被读写的对象中哪一个对象是根或主要拥有者。
RootComponent 和WriteRootComponent方法在读和写部件及其拥有的部件前先设置Root的值。
2. Ancestor属性声明:property Ancestor: TPersistent;Ancestor属性用于往继承下来的窗体中写部件,因为当写部件时,Write对象只需要写入与所继承的部件不同的属性,所以在写之前要跟踪每个继承的部件,并且比较它们的属性。
如果Ancestor为nil,就表示没有相应的继承的部件,Writer对象应当将部件完全写入流。
Ancestor一般为nil,只有当调用WriteDescendant和WriteDescendantRes时,才给赋值。
当编写和覆盖DefineProperties时,必须设置Ancestor的值。
3. IgnoreChildren属性声明:property Ignorechildren: Boolean;IgnoreChildren属性使一个Writer对象存储部件时可以不存储该部件拥有的部件。
如果IgnoreChildren属性为True,则Writer对象存储部件不存它拥有的子部件。
否则,Writer对象将所有其拥有的对象写入流。
4. Create方法声明:constructor Create(Stream: TStream; BufSize: Cardinal);Create方法创建一个新的Filer对象,建立它和流Stream的联系;并且给它分配一个缓冲区Buffer。
Buffer的大小由BufSize指定。
5. Defineproperty方法声明:procedure Defineproperty(const Name: String; ReadData: TReaderProc; WriteData: TWriterProc; HasData: Boolean); virtual; abstract;Defineproperty方法定义Filer对象将作为属性存储的数据。
Delphi基础培训
Delphi简介 Delphi IDE介绍 对象的属性和事件 第一个Delphi程序 Delphi中如何访问数据库 怎样使用线程 动态链接库 编写Activex,so easy! 有用的小工具
Delphi简介 Delphi IDE介绍 对象的属性和事件 第一个Delphi程序 Delphi中如何访问数据库 怎样使用线程 动态链接库 编写Activex,so easy! 有用的小工具
IDE主要组成
菜单栏 工具栏 控件页 设计窗口 代码编辑器 对象浏览器 信息窗口
Delphi简介 Delphi IDE介绍 对象的属性和事件 第一个Delphi程序 Delphi中如何访问数据库 怎样使用线程 动态链接库 编写Activex,so easy! 有用的小工具
事件处理程序
事件处理程序是响应事件的过程。当事 件产生时,Windows 或一个程序将得 到通知,这就是事件处理程序与消息相 结合的方式。然后由Windows 生成消 息。消息处理程序接收到该消息,它知 道具有对应的过程类型的事件处理程序 的地址,然后通过其地址利用回调过程 来调用事件处理程序。
Delphi简介 Delphi IDE介绍 对象的属性和事件 第一个Delphi程序 Delphi中如何访问数据库 怎样使用线程 动态链接库 编写Activex,so easy! 有用的小工具
ActivexForm向导
线程模型
Single 整个COM服务器工作于单线程下。客 户端的调用请求排队等待COM对象执行。
技能培训
-Delphi基础 基础
主要内容
Delphi简介 Delphi IDE介绍 对象的属性和事件 第一个Delphi程序 Delphi中如何访问数据库 怎样使用线程 动态链接库 编写Activex,so easy! 有用的小工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Text命令时,就会在编辑器中出现文本形式的信息。我们姑且将这种文本形式称之为窗体设计脚本。Delphi提供的这种脚本编辑功能是对Delphi可视化设计的一大补充。当然这个脚本编辑能力是有限制的,比方说不能在脚本任意地添加和删除部件,因为代码和DFM脚本是紧密相连的,任意添加和修改会导致不一致性。然而在动态生成的DFM文件中,就不存在这一限制,后面会介绍DFM动态生成技术的应用。
该函数的程序是这样的:
function ReadComponentResFile(const FileName: string; Instance:
TComponent):
TComponent;
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
Result := Stream.ReadComponentRes(Instance);
finally
Stream.Free;
ReadComponentResFile函数带有两个参数FileName和Instance。FileName参数指定要读DFM文件名,Instance参数指定从DFM文件中要读的部件。该函数从DFM文件中将Instance和它拥有的所有部件,并返回该部件。
这个函数的意义在于,配合WriteComponentResFile过程的使用支持DFM文件的重用性。
end;
过程中调用的ConvertObject过程是个递归过程,用于将DFM文件中的每一个部件转化为文本形式。因为由于部件的拥有关系,所以部件成嵌套结构,采用递归是最好的方式:
procedure ConvertObject;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
Stream.WriteComponentRes(Instance.ClassName, Instance);
finally
20.3.1.4 DFM文件与标准文本文件(TXT文件)的相互转换
在Delphi可视化设计环境中,允许程序员在代码编辑器中以文本的方式浏览和修改DFM文件内容。当用File/Open命令直接打开DFM文件或者选择窗体设计窗口的弹出式菜单上的View
function InternalReadComponentRes(const ResName: string;
var Instance: TComponent): Boolean;
var
HRsrc: THandle;
begin { 避免“EResNotFound”异常事件的出现 }
begin
WriteStr(#13#10);
WriteIndent;
end;
procedure ConvertHeader;
begin
…
end;
procedure ConvertBinary;
ObjectBinaryToText过程将二进制流中存储的部件转化为基于文本的表现形式,这样就可以用文本处理函数进行处理,还可以用文本编辑器进行查找和替代操作,最后可以将文本再转化成二进制流中的部件。
ObjectBinaryToText过程的主程序是这样的:
该过程带有两个参数FileName和Instance。FileName参数指定要写入的DFM文件名,Instance参数是TComponent类型的,它指定要写入的部件名,一般是TForm对象的子类。该过程将Instance部件和其拥有的所有部件写入DFM文件。
这个过程的意义在于,可以在程序运行过程中产生Delphi的窗体部件和在窗体中插入部件,并由该函数将窗体写入DFM文件,支持了动态DFM文件的重用性。
begin
…
end;
procedure ConvertValue;
begin
…
end;
procedure ConvertProperty;
begin
Result := True;
end;
HInstance是一个Delphi
VCL定义的全局变量,代表当前应用程序的句柄。函数用了资源访问API函数FindResource来测定是否存在ResName所描述资源。因为在TResourceStream的创建过程还有FindResource等操作,所以函数中调用了FreeResource。最后函数调用了Stream对象的ReadComponent方法读出部件。因为函数的Instance是var类型的参数,所以可以访问Instance,得到读出的部件。
Stream.Free;
end;
end;
函数中,用FileStream创建文件,用Stream对象的WriteComponetRes方法将Instance写入流中。
20.3.1.2 读DFM文件的函数:ReadComponentResFile
SaveSeparator := DecimalSeparator;
DecimalSeparator := '.';
try
Writer := TWriter.Create(Output, 4096);
try
Reader.ReadSignature;
begin
ConvertHeader;
Inc(NestingLevel);
while not Reader.EndOfList do ConvertProperty;
Reader.ReadListEnd;
while not Reader.EndOfList do ConvertObject;
-->DELPHI基础教程-->第二十章 开发Delphi对象式数据管理功能(五)后一页
前一页
回目录
回首页
第二十章 开发Delphi对象式数据管理功能(五)
20.3.1.1写DFM文件的过程:WriteComponentResFie
end;
end;
程序中使用FileStream对象打开由FileName指定的DFM文件,然后用Stream对象的ReadComponentRes方法读出Instance,并将读的结果作为函数的返回值。
20.3.1.3 读取Delphi应用程序资源中的部件
Reader.ReadListEnd;
end;
procedure WriteStr(const S: string);
begin
Writer.Write(S[1], Length(S));
end;
procedure NewLine;
HRsrc := FindResource(HInstance, PChar(ResName), RT_RCDATA);
Result := HRsrc <> 0;
if not Result then Exit;
FreeResource(c);
实际上,DFM文件内容是二进制数据,它的脚本是经过Delphi开发环境自动转化的,而且Delphi
VCL中的Classes库单元中提供了在二进制流中的文件DFM和它的脚本之相互转化的过程。它们是ObjectBinaryToText和ObjectTextBinary、ObjectResourceToText和ObjectTextToResource。
函数InternalReadComponentRes可以读取Delphi应用程序资源中的部件。Delphi
的DFM文件在程序经过编译链接后被嵌入应用程序的资源中,而且格式发生了改变,即少了资源文件头。
在第一节中曾经介绍过TResourceStream对象,该对象是操作资源媒介上的数据的。函数InternalReadComponentRes用了TResourceStream。程序是这样的:
…
end;
procedure ConvertObject;
begin
…
end;
begin
NestingLevel := 0;
Reader := TReader.Create(Input, 4096);
with TResourceStream.Create(HInstance, ResName, RT_RCDATA) do
try
Instance := ReadComponent(Instance);
finally
Free;
end;
该过程的程序是这样的:
procedure WriteComponentResFile(const FileName: string; Instance:
TComponent);
var
Stream: TStream;
ConvertObject;
finally
Writer.Free;
end;
finally
DecimalSeparator := SaveSeparator;
Reader.Free;
end;
procedure WriteIndent;
const
Blanks: array[0..1] of Char = ' ';
var
I: Integer;
begin
for I := 1 to NestingLevel do Writer.Write(Blanks, SizeOf(Blanks));
procedure ObjectBinaryToText(Input, Output: TStream);