导航:首页 > 编程语言 > delphi编程入门教程

delphi编程入门教程

发布时间:2025-02-25 15:45:54

① DELPHI基础教程:Delphi自定义部件开发(三)[3]

控制Delphi是否存储属性的方法是在属性声明后面加stored指令 后跟True或False 或者是布尔方法名 你可以给任何属性的声明或重声明加stored表达式 下面的代码显示了部件声明三种新属性 一个属性是总是要存储 一个是不存 第三个则决定于布尔方法的值

type

TSampleCompiment = class(TComponent)

protected

function storeIt: Boolean;

public { 正常情况下在不存 }

property Important: Integer stored True; { 总是存储 }

published { 正常情况下保存 }

property UnImportant: Integer stored False; { 不存 }

property Sometimes: Integer stored StoreIt; { 存储依赖于函数值 }

end;

④ 载入后的初始化

在部件从存储的描述中读取所有的属性后 它调用名为Loaded的虚方法 这提供了按需要执行任何初始化的机会 调用Loaded是在窗体和它的控制显示之前 因此 不需要担心初始化会带来屏幕闪烁

在部件载入属性时初始化它 要覆盖Loaded方法

在Loaded方法中 要做的第一件事是调用继承的Loaded方法 这使得在你的部件执行初始化之前 任何继承的属性都已初始化

下面的代码来自于TDatabase部件 在装入后 TDatabase试图重建在它存储时已打开的连接 并描述在连接发生异常时如何处理

procere TDatabase Loaded

begin

inherited Loaded; { 总是先调用继承的方法 }

Modified; { 设置内部标志 }

try

if FStreamedConnected then Open; { 重建联接 }

except

if csDesigning in ComponentState then { 在设计时 }

Application HandleException(self) { 让Delphi处理异常 }

else raise; { 否 则 }

end;

end;

Delphi部件编程实例

创建数据库相关的日历控制 TDBCalendar

当处理数据库联接时 将控制和数据直接相联是很重要的 就是说 应用程序可以建立控制与数据库之间的链 Delphi包括了数据相关的标签 编辑框 列表框和栅格 用户可以使自己的控制与数据相关

数据相关有若干等级 最简单的是只读数据相关或数据浏览 以及反映数据库当前状态的能力 比较复杂的是数据相关的编辑 也即用户可以在控制上操作数据库中的数据

在本部分中将示例最简单的情况 即创建联接数据库的单个字段的只读控制 本例中将使用Component Palette的Samples页中的TCalendar部件

创建数据相关的日历控制包括下列几步

● 创建和注册部件

● 使控制只读

● 增加数据联接(Data Link)

● 响应数据改变

创建和注册部件

每个部件的创建都从相同的方式开始 在本例中将遵循下列过程

● 将部件库单元命名为DBCal

● 从TCalendar继承一个新部件 名为TDBCalendar

● 在Component Palette的Samples页中注册TDBCalendar

下面就是创建的代码

unit DBCal;

interface

uses SysUtils WinTypes WinProc Messages Classes Graphics Controls

Forms Grids Calendar;

type

TDBCalendar=class(TCalendar)

end;

procere Register;

implementation

procere Register;

begin

RegisterComponents(Samples [TDBabendar])

end;

end

使控制只读

因为这个数据日历以只读方式响应数据 所以用户不能在控制中改变数据并指望它们反映到数据库中

使日历只读包含下列两步

● 增加只读属性

● 允许所需的更新

增加只读属性

给日历控制增加只读选项是直接过程 通过增加属性 可以提供在设计时使控制只读的方法 当属性值被设为True 将使控制中所有元素不可被选

⑴ 增加属性声明和保存值的private域

type

TDBCalendar=class(TClendar)

private

FReadOnly: Boolean;

public

constructor Create (Aowner: TComponent) override;

published

property ReadOnly: Boolean read FReadOnly write FReadOnly default True;

end;

constructor TDBCalendar Create(Aowner: TComponent)

begin

inherited Create(AOwner)

FReadOnly := True;

end;

⑵ 覆盖SelectCell方法 使得当控制是只读时 不允许选择

function TDBCalendar SelectCell(ACol Arow: Longint) Boolean;

begin

if FReadOnly then

Result := False

else

Result := inherited SelectCell(Acol ARow)

end;

还要在TDBcalendar的声明中声明SelectCell

如果现在将Calendar加入窗体 会发现部件完全忽略鼠标和击键事件 而且当改变日期时 也不能改变选择的位置 下面将使控制响应更新

允许所需的更新

只读日历使用SelectCell方法实现各种改变 包括设置Row和Col的值 当日期改变时 UpdateCalendar方法设置Row和Col的值 但因为SelectCell不允许你改变 即使日期改变了 选择仍留在原处

可以给日历增加一个Boolean标志 当标志为True时允许改变

type

TDBCalendar=class(TCalendar)

private

Fupdating: Boolean;

protected

function SelectCell(Acol Arow: Longint) Boolean; override;

public

procere UpdateCalendar; override;

end;

function TDBCalendar SelectCell(ACol ARow: Longint) Boolean;

begin

if (not FUpdating) and FReadOnly then

Result := False { 如果更新则允许选择 }

else

Result := inherited SelectCell(ACol ARow) { 否则调用继承的方法 }

end;

procere UpdateCalendar;

begin

FUpdating := True; { 将标志设为允许更新 }

try

inherited UpdateCalendar; { 象通常一样更新 }

finally

FUpdating := False; { 总是清除标志 }

end;

end;

现在日历仍旧不允许用户修改 但当改变日期属性时能正确反映改变 目前已有了一个真正只读控制 下一步是增加数据浏览能力

增加数据联接

控制和数据库的联接是由一个名为DataLink的对象处理 Delphi提供了几种类型的Datalink 将控制与数据库单个域相联的DataLink对象是TFieldDatalink Delphi也提供了与整个表相联的DataLink

一个数据相关控制拥有DataLink对象 就是说 控制负责创建和析构DataLink

要建立作为拥有对象的Datalink 要执行下列三步

● 声明对象域

● 声明访问属性

● 初始化DataLink

⑴ 声明对象域

每个部件要为其拥有对象声明一个对象域 因此 日历对象DataLink 声明TFieldDataLink类型的域

日历部件中DataLink的声明如下

type

TDBCalendar = class(TSampleCalendar)

private

FDataLink: TFieldDataLink;

end;

⑵ 声明访问属性

每一个数据相关控制有一个DataSource属性 该属性描述应用程序给控制提供数据的数据源 而且 访问单个域的数据库还需要一个DataField 属性描述数据源中的域

lishixin/Article/program/Delphi/201311/25115

② Delphi基础教程图文版之数组

数组是 Delphi 中一种应用时间最长、范围最大的容器类型,了解其定义格式、应用实例、注意事项、特殊用法及一维、多维数组等概念对掌握 Delphi 编程至关重要。

数组定义时,方括号中填入子界类型的值或常量来指定可能的下标值。例如,定义一个包含 24 个整数的数组:

数组定义如下,其中子界类型指定了有效索引范围,简化了下标值的使用,Delphi 可以对它们进行范围检查,防止编译或运行时错误。

定义定长数组时,长度在声明时确定,下标不必从零开始,如定义一个起始序号为 2、步长为 1 的数组。

定长数组的起始序号并非必须为零,如定义一个起始序号为 2 的数组,但步长不能改变。

使用有序数类型作为数组序号,但使用时必须与声明类型一致。例如,定义一个变量并使用错误序号赋值。

注意数组定义方式需要使用 const 关键字修饰,并了解与枚举类似的概念。

动态数组是在运行时动态分配内存改变大小的数组,声明时没有指定长度。在使用之前必须明确声明其长度。

动态数组的长度可以通过 Length() 函数获取,返回值为 Integer 类型。

在使用动态数组时,使用 Low() 和 High() 函数检测数组边界,这些函数返回数组序号类型的下界和上界,确保代码与数组范围无关,便于维护和更新。

低开销系统函数如 Low()、High() 和 Length() 在编译时转换为常数表达式,不会增加运行时开销。

总之,理解数组的概念、定义、应用和注意事项是 Delphi 编程的基础。正确使用数组,尤其是在循环中结合 Low() 和 High() 操作,能够提高代码的可维护性和稳定性。

阅读全文

与delphi编程入门教程相关的资料

热点内容
惠州程序员名单 浏览:164
java可移植性 浏览:735
加密卡写卡工具 浏览:390
德善缘app是干什么的 浏览:815
中山云存储服务器 浏览:684
google蜂鸟算法 浏览:940
为什么程序员这么受人诟病 浏览:99
linuxgtk编程 浏览:253
迪拜用什么app打车 浏览:632
java字符串不转义 浏览:308
ug编程页面教学 浏览:552
mvccmsphp 浏览:178
闲置电脑如何自己搭建服务器 浏览:123
安卓本机内核编译环境 浏览:631
巴克球解压汽车 浏览:466
androidsdk无法启动 浏览:208
产品经理设计师程序员 浏览:264
ug编程模板下载 浏览:945
安卓手机的相册自拍怎么拍 浏览:781
怎么把pds转换成文件夹 浏览:306