没有合适的资源?快使用搜索试试~ 我知道了~
delphi 知识点小结
需积分: 10 14 下载量 186 浏览量
2010-04-05
14:56:54
上传
评论
收藏 62KB DOC 举报
温馨提示
试读
13页
该文档是我在做Delphi工程时,自己随手记下的,里面有面向对象技术在Delphi中的使用、VarArrayHighBound 函数的使用、TClientDataSet 控件的使用、枚举类型的使用,还有在Delphi中打印出中间数据的范例,希望能对诸位有所帮助,谢谢!
资源推荐
资源详情
资源评论
DELPHI 知识点
VarArrayHighBound 的使用
VarArrayOf 是一种快速(写代码快而不是运行快)的方法生成一个一维 Variant 数据的
方法,它接受一个 Variant 类型的 Open array,用这个数据生成一个一维的 Variant
Array of Variant(类型为 Variant)。由于 Delphi 对 Open Array 类型参数的支持,
使你可以用一行语句生成一个数组。不过它有两个缺陷:只能生成一维数组;只能生成元
素类型是 Variant 的数组。其它的数组只能用 VarArrayCreate 去创建,并用循环给元素
赋值。
VarArrayHighBound 和 VarArrayLowBound 是取 Variant Array 指定维(从 1 开
始)的上、下界。
如:
var
a, b: Variant;
I, J, K, M: Integer;
begin
a := VarArrayOf([1234, 'abc', Null]);//a 是个一维 Variant 数组,元素类型
是 Variant,元素个数是 3,上界是 2,下界是 0。
b := VarArrayCreate[0, 3, 1, 16], varOleStr)//b 是一个 16 行 4 列的二
维数组(注意,Variant 数组下标是列在前,行在后),元素类型是 PWideChar,最大列
号是 3,最小列号是 0,最大行号是 16,最小行号是 1。
I := VarArrayHighBound(b, 1)//I 是 b 的最大列号:3;
J := VarArrayLowBound(b, 1)//J 是 b 的最小列号:0;
K := VarArrayHighBound(b, 2)//K 是 b 的最大行号:16;
M := VarArrayLowBound(b, 2)//M 是 b 的最小行号:1。
面向对象策略在 DELPHI 中的体现
1、override overload reintroduce 的中文叫法是什么?
override:覆盖;overload:重载;Reintroduce:重定义
2、在子类中 override 或 overload 父类中的动态或虚拟方法后是否会改变父类中的相应
方法?
不会
3、self 是怎么回事,怎么使用?
Self 因为这这个对象本身,例如,在 TForm1 的 OnCreate 事件中写 Self 指的是
TForm1 实 例 化 后 的 对 象 , 如 果 TForm1 上 有 一 个 TButton 叫 做 Button1 , 那 么
OnButton1Click 中写的 Self 也是 TForm1 实例化后的对象,
4、reintroduce 与 override overload 有何区别,怎么使用?
在子孙类中要声明一个与祖先类中参数不同的方法的时候用 Reintroduce,
但需要重新定义一个祖先类总的虚拟的或者动态的方法的时候,要用到 Override;如
果祖先类中的方法不是虚拟的或者动态的(定义的时候有 virtual;就是虚拟的,有
dynamic;就是动态的);那么是没有办法 override 的
至于 Overload,一般适用于定义一组不同参数的函数,这些函数也可以不是 Of
Objects(中文该怎么说?)。
reintroduce 引入是为了屏蔽父类的一个虚方法,而在子类中生成一个新的方法;overload
是为了处理同名的方法有不同的参数而设计的;
其实你不使用 reintroduce 也会覆盖屏蔽父类的方法的但是会产生一个警告,
使用了这个关键字,表明你要屏蔽这样不会产生警告的!
如果类不从别的类继承(实际上也就是从 TObject 继承),
constructor Create; virtual; //virtual 表示虚函数,表示可以被子类 override;
destructor Destory: virtual;
如果从其它类继承,如:TForm
constructor Create(AOwner: TComponent); override;
destructor Destory: override;
如果子类想再 overload 一个函数,则必须加上 reintroduce 和 overload
constructor Create(AOwner: TComponent); overload; override; // 这 里 的
overload 必面在 override 之前.
constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce;
overload;
例子
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Ta = class(TObject)
public
constructor Create; virtual;
destructor Destory; virtual;
procedure aaa; virtual;
end;
tb = class(ta)
public
constructor Create; overload; override;
constructor Create(a: String); reintroduce; overload;
destructor Destory; override;
procedure aaa; overload; override;
procedure aaa(a: string); reintroduce; overload;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
c: tb;
public
{ Public declarations }
end;
TClientDataSet 的使用
与 TTable、TQuery 一样,TClientDataSet 也是从 TDataSet 继承下来的,它通常用于
多 层 体 系 结 构 的 客 户 端 。 TClientDataSet 最 大 的 特 点 是 它 不 依 赖 于 BDE(Borland
Database Engine) , 但 它 需 要 一 个 动 态 链 接 库 的 支 持 , 这 个 动 态 链 接 库 叫
DBCLIENT.DLL。在客户端,也不需要用 TDatabase 构件,因为客户端并不直接连接数据
库。
由于 TClientDataSet 是从 TDataSet 继承下来的,所以,它支持诸如编辑、搜索、浏
览、纠错、过滤等功能。由于 TClientDataSet 在内存中建立了数据的本地副本,上述操作
的执行速度很快。也正是由于 TClientDataSet 并不直接连接数据库,因此,客户程序必须
提供获取数据的机制。在 Delphi 4 中,TClientDataSet 有三种途径获取数据:
.从文件中存取数据。
.从本地的另一个数据集中获取数据。
.通过 IProvider 接口从远程数据库服务器获取数据。
在一个客户程序中,可以同时运用上述三种机制获取数据。
11.1 浏览和编辑数据
和其他数据集构件一样,可以用标准的数据控件显示由 TClientDataSet 引入的数据集,
剩余12页未读,继续阅读
资源评论
transmission2002
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功