当前位置:首页 » 编程软件 » delphi模式编程

delphi模式编程

发布时间: 2023-01-04 05:59:04

⑴ 什么是delphi

1、因人而异,大概要一个月左右。可以从学习简单例程入手。delphi比起C,C++简单多了。
2、Delphi,是Windows平台下着名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为Anders Hejlsberg。经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。
3、由Borland公司推出的Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编译器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。

⑵ Delphi面向对象的编程方法(八)

重载一个方法

您可以重载(Override)一个方法 通过在后代对象中说明一个与祖先对象重名的方法 就可以重载一个方法 如果想使这个方法在后代对象中作和祖先对象中一样的工作但是使用不同的方式时 您就可以重载这个方法 Delphi不推荐您经常重载方法 除非您想建立一个新的部件 重载一个方法 Delphi编译器不会给出错误或警告提示信息

对象公有域和私有域的说明

当使用Delphi的环境来建立应用程序时 您可以在一个TForm的后代对象中加入数据域和方法 也可以通过直接修改对象类型说明的方法来为一个对象加上域和方法 而不是把一个部件加入窗体或事件处理过程中

您可以在对象的Public或Private部分加入新的数据域和方法 Public和Private是Object Pascal的保留字 当您在工程中加入新的窗体时 Delphi开始建立这个新窗体对象 每一个新的对象都包含public和private指示 以便您在代码中加入数据域和方法 在public部分中说明其它库单元中对象的方法也可以访问的数据域或方法 在private部分的说明有访问的限制 如果您在private中说明域和方法 那么它在说明这个对象的库单元外是不透明的 而且不能被访问 private中可以说明只能被本库单元方法访问的数据域和本库单元对象访问的方法 过程或函数的程序代码可以放在库单元的implementation部分

访问对象的域和方法

当您想要改变一个窗体对象的一个域的某个属性 或是调用它的一个方法时 您必须在这个属性名称或调用方法之前加上这个对象的名称 例如 如果您的窗体上有一个编辑框部件 而您需要在运行中改变它的Text属性 需要编写下列的代码

Edit Text := Wele to Delphi ;

同样 清除编辑框部件中选中的文本 可以调用TEdit部件的相应方法

Edit ClearSelection;

如果您想改变一个窗体对象中一个对象域的多个属性或调用多个方法时 使用with语句可以简化您的程序 with语句在对象中可以和在记录中一样方便地使用 下面的事件处理过程在响应OnClick事件时 会对一个列表框作多个调整

procere TForm Button Click(Sender:TObject); beginListBox Clear;ListBox MultiSelect :=True;ListBox Item Add( One );ListBox Item Add( Two );ListBox Item Add( Three );ListBox Sorted :=Ture;ListBox FontStyle :=[fsBold];ListBox Font Color :=clPurple;ListBox Font Name := Times New Roman ;ListBox ScaleBy( );end;

如果使用了With语句 则程序如下

procere TForm Button Click(Sender:TObject); beginwith (ListBox ) dobeginClear;MultiSelect :=True;Item Add( One );Item Add( Two );Item Add( Three );Sorted :=Ture;FontStyle :=[fsBold];Font Color :=clPurple;Font Name := Times New Roman ;ScaleBy( );end;end;

使用with语句 您不必在每一个属性或方法前加上ListBox 标识符 在With语句之内 所有的属性或调用方法对于ListBox这个对象而言都是在它的范围内的

对象变量的赋值

如果两个变量类型相同或兼容 您可以把其中一个对象变量赋给另一个对象变量 例如 对象TForm 和TForm 都是从TForm继承下来的类型 而且Form 和Form 已被说明过 那么您可以把Form 赋给Form :

Form :=Form ;

只要赋值的对象变量是被赋值的对象变量的祖先类型 您就可以将一个对象变量赋给另一个对象变量 例如 下面是一个TDataForm的类型说明 在变量说明部分一共说明了两个变量 AForm和DataForm

typeTDataForm = class(TForm)Button :TButton;Edit :TEdit;DataGrid :TDataGrid;Database :TDatabase;TableSet :TTableSet;VisibleSession :TVisibleSession;private{私有域说明}public{公有域说明} end; varAForm:TForm;DataForm:TDataForm;

因为TDataForm是TForm类型的后代 所以Dataform是AForm的后代 因此下面的赋值语句是合法的

AForm :=DataForm;

这一点在Delphi中是极为重要的 让我们来看一下应用程序调用事件处理过程的过程 下面是一个按钮部件的OnClick事件处理过程

procere TForm Button Click(Sender:TObject);beginend;

您可以看到TObject类在Delphi的Visual Component Library的顶部 这就意味着所有的Delphi对象都是TObject的后代 因为Sender是TObject类型 所以任何对象都可以赋值给它 虽然您没有看见赋值的程序代码 但事实上发生事件的部件或控制部件已经赋给Sender了 这就是说Sender的值是响应发生事件的部件或控制部件的

您可以使用保留字is来测试Sender以便找到调用这个事件处理过程的部件或控制部件的类型 Delphi中的一个显示drag and drop的DRAGDROP DPR工程 加载它 可以查阅到DROPFONT PAS库单元的代码 在Memo DragOver方法中检查了一个对象变量的类型 在这种情形下 参数是Source而不是Sender

procrre TForm Memo DragOver(SenderSource:TObject;X Y:integer;State:TDragState;var Accept:Boolean);beginAccept :=Source is TLabel;end;

Source参数也是TObject类型 Source被赋值为那个被拖曳的对象 用Memo DragOver方法的目的是确保只有标签可以被拖曳 Accept是布尔型参数 如果Accept为True 那么用户选择的部件可以被拖曳 反之当Accept的值为False时 用户就不可以拖曳选择控制部件 is保留字检查Source是否TLabel的类型 所以Accept只有在用户拖曳一个标签时才为真 并作为变参输出到函数之外

下面的drag and drop展示的Memo DragDrop事件处理过程中也使用了Source参数 这个方法是为了把Memo部件的字型改变成和放入这个备注控制部件的标签一样的字型

procere TForm Memo DragDrop(SenderSource:TObject;X Y:Integer);beginMemo Font := (Source as TLabel) Font; end;

当您在这个事件处理过程中编写赋值语句时 开发人员并不知道用户会放入哪一个标签 只有通过参考这个标签的名称(Source as TLabel)用户才能知道 并把标签类型赋给Memo TFont Source包含了用户拖放控制部件的名称 只有当Source是一个标签时 这个事件处理过程才允许这个赋值发生

建立非可视化对象

您在Delphi中使用的大部分对象都是您在设计和运行期间可以看见的部件 例如编辑框 按钮等 一些部件 如通用对话框(Common dialog box)等 在设计时看不见 而在运行时可以看见 另外有些部件 例如计时器(Timer) 数据源(Data Source)部件等 在程序的运行期间没有任何可视化的显示 但您却可以在您的应用程序中使用它们

说明一个非可视化对象

下面 通过一个简单的例子讲述如何建立自己的非可视化对象

您可以用如下的方法 建立一个自己的TEmployee非可视化对象

type Temployee = class(TObject);Name := String[ ];Title := String[ ];HourlyPayRate : Double;function CalculatePayAmount:Double;end;

在这种情况下 TEmployee从TObject继承下来 且包含三个域和一个方法 把您建立的类型说明放在库单元中的说明部分 并和窗体说明放在一起 在这个程序库单元的变量说明部分 说明一个新类型的变量

varEmployee : TEmployee;

用Create方法建立对象实例

TEmployee只是一个对象类型 除非通过一个构造函数的调用从而被实例取代或创建 否则一个对象并不存储在内存中 构造函数是一个方法 它为新对象配置内存并且指向这个新的对象 这个新的对象也被称为这个对象类型的一个实例

建立一个对象的实例 需要调用Create方法 然后构造函数把这个实例赋给一个变量 如果您想说明一个TEmployee类型的实例 在您访问这个对象的任何域之前 您的程序代码必须调用Create

Employee := TEmployee Create;

Create方法并没有在TEmployee类型中说明 它继承自TObject类型 因为TEmployee是TObject的子类 所以它可以调用Create方法而创建一个TEmployee实例 然后把它赋给Employee变量 在创建了一个这样的对象后 您就可以象使用其他的Delphi对象一样访问Employee对象了

撤销对象

当您使用完对象后 您应该及时撤销它 以便把这个对象占用的内存释放出来 您可以通过调用一个注销方法来撤销您的对象 它会释放分配给这个对象的内存

Delphi的注销方法有两个 Destroy和Free Delphi建议使用Free 因为它比Destroy更为安全 同时调用Free会生成效率更高的代码

您可以用下列的语句释放用完的Employee对象

Employee Free;

lishixin/Article/program/Delphi/201311/24951

⑶ Delphi面向对象编程的20条规则

前言

大多数Delphi程序员都像使用Visual Basic 那样使用他们手头上开发工具 而丝毫没有意识到Delphi的强大功能 更谈不上使用这些功能了 (写到这里 编辑惶恐的举起了手 怎么可能呢?)Delphi和Visual Basic不同 Delphi完全建立在面向对象结构上 这不仅影响到VCL的结构 而且影响到使用Delphi开发的每一个程序 在本文中 我不想涉及到面向对象编程(OOP)的所有理论 只是提出一些简单的经验规则 希望这些规则能够帮助改善你的程序结构 无论你开发的是何种类型的程序 这些经验规则都是适用的 你应当把他们当作一些建议 记住他们并把他们应用到你开发的程序中去 关于面向对象编程 我想强调的一个关键原理是封装 我们都希望创建一些灵活而且强健的类 因为这样的类允许我们以后修改他们的实现方法而不影响到程序中的其他部分 这正是封装给我们带来的好处 虽然封装不是创建一个好的面向对象程序的唯一标准 但是它构成了面向对象编程的基础 所以在本文中我也许会过多的强调封装性 请不要感到奇怪 我有足够充分的理由这么做 最后 我想说明这样一个事实 本文将主要集中说明窗体(Forms)的开发(虽然其中的一些规则对于组件的开发同样适用) 因此这些规则对于所有的Delphi程序员都是适用的 那些编写组件的程序员必须把面向对象编程和类(Class)作为核心的元素 但是对于那些使用组件编程的程序员 他们时常会忘记面向对象 对于他们 本文可以当作一个提示 提醒他们始终记住面向对象编程

第一部分 窗体是类(A Form is A Class)(rule rule ) 程序员常常将窗体看作是对象 而事实上窗体是类 两者的差别在于你创建基于相同的窗体类的多个窗体对象 令人感到疑惑的是Delphi为你定义的每一个窗体类创建了一个默认的全局对象 这对于新手来说是相当方便的 但是这同样会使他们形成坏习惯

第二部分 继承(Inheritance)(rule rule ) 在讲述了一系列关于类特别是关于窗体类的规则后 第二部分将是一些关于类的继承性以及可视化窗体继承的建议和技巧

关于代码 如果你想使用这些代码 请注意构造器必要的初始化设置以及私有组件参照 同时有必要设置好窗体的OldCreateOrder属性 否则 带有组件的窗体构造器的初始化代码将在窗体的OnCreate事件之前得到执行

规则一 为每一个类创建一个单元(One Class One Unit) 请始终牢记这一点 类的私有(private)和保护(protected)的部分只对于其他单元中的类和过程(procere)才是隐藏的 因此 如果你想得到有效的封装性 你应该为每一个类使用一个不同的单元 对于一些简单的类 比如那些继承其他类的类 你可以使用一个共享的单元 不过共享同一个单元的类的数目是受到限制的 不要在一个简单的单元里放置超过 个复杂的类 虽然Borland公司的VCL代码曾经这样做过 如果你使用窗体的时候 Delphi会默认的遵循 一个类使用一个单元 的规则 这对于程序员来说也是十分方便的 当你向你的项目中添加一个没有窗体的类时 Delphi也会创建一个新的独立的单元

规则二 为组件命名(Name Components) 为每一个窗体和单元给出一个有意义的名字是十分重要的 窗体和单元的名字必须是不同的 不过我趋向于为他们两者使用相似的名字 如对于关于窗体和单元可以为他们使用AboutForm 和About pas 为组件使用带有描述性的名字同样十分重要 最常见的命名方式是使用类的小写字母开头 再加上组件的功能 如BtnAdd 或者editName 采用这样的命名方式为组件命名可能会有很多相似的名字 而且也没有一个最好的名字 到底应该选择那一个应该依据你的个人爱好而定

规则三 为事件命名(Name Events) 对于事件处理方法给出合适的名字更加重要 如果你对于组件给出了一个合适的名字 那么系统默认的名字ButtonClick将变成BtnAddClick 虽然从这个名字中我们可以猜到这个事件处理程序的功能 但是我认为使用一个能够描述该方法的作用的名字 而不是采用Delphi附加的名字是一种更好的方式 例如 BtnAdd按钮的OnClick事件可以命名成AddToList 这会使得你的程序可读性更强 特别是当你在这个类的其他方法中调用这个事件处理程序时 而且这会帮助程序员为类似的事件或是不同的组件选用相同的方法 不过我必须声明 使用动作(Actions)是目前开发重要的程序时我最喜欢的方法

规则四 使用窗体方法(Use Form Methods) 窗体都是一些类 因此窗体的代码是以方法组织的 你可以向窗体中添加事件处理程序 这些处理程序完成一些特别的功能 而且他们能被其他方法调用 除了事件处理方法外 你还可以向窗体添加完成动作的特别定义的方法以及访问窗体状态的方法 在窗体中添加一些公共的(Public)方法供其他窗体调用要比其他窗体直接操作他的组件要好

规则 添加窗体构造器(Add Form Constructors) 在运行时创建的第二个窗体除了一个默认的构造器(从Tponent 类继承而来)外还会提供其他特殊的构造器 如果你不需要考虑和Delphi 以前的版本的兼容性问题 我建议你重载(Overload)Create方法 添加必要的初始化参数 具体代码可参见下面的代码:

Public Constructor Create(Text:string): reintroce ; overload; Constructor TformDialog Create(Text:string); Begin Inherited Create(Application); Edit Text:=Text; End;

规则 避免全局变量(Avoid Global Variables) 应该避免使用全局变量(就是那些在单元的interface 部分定义的变量) 下面将会有一些建议帮助你如何去做 如果你需要为窗体存储额外的数据 你可以向窗体类中添加一些私有数据 这种情况下 每一个窗体实例都会有自己的数据副本 你可以使用单元变量(在单元的implementation部分定义的变量)声明那些供窗体类的多个实例共享的数据 如果你需要在不同类型的窗体之间共享数据 你可以把他们定义在主窗体里来实现共享 或者使用一个全局变量 使用方法或者是属性来获得数据

规则 永远不要在Tform 类中使用Form (Never Use Form in Tform ) 你应该避免在类的方法中使用一个特定的对象名称 换句话说 你不应该在TForm 类的方法中直接使用Form 如果你确实需要使用当前的对象 你可以使用Self关键字 请牢记 大多数时候你都没有必要直接使用当前对象的方法和数据 如果你不遵循这条规则 当你为一个窗体类创建多个实例的时候 你会陷入麻烦当中

规则 尽量避免在其他的窗体中使用Form (Seldom Use Form In Other Forms ) 即使在其他窗体的代码中 你也应该尽量避免直接使用全局变量 如Form 定义一些局部变量或者私有域供其他窗体使用会比直接调用全局变量要好 例如 程序的主窗体能够为对话框定义一个私有域 很显然 如果你计划为一个派生窗体创建多个实例 这条规则将是十分有用 你可以在主窗体的代码范围内保持一份清单 也可以更简单地使用全局Sreen对象的窗体数组

规则 移除Form (Remove Form ) 事实上 我的建议是在你的程序中移除Delphi自动创建的全局窗体对象 即使你禁止了窗体的自动添加功能 这也有可能是必要的 因为在Delphi随后仍然可能添加这样的窗体 我给你的建议是应该尽量避免使用全局窗体对象 我认为对于Delphi新手而言 移除全局窗体对象是十分有用的 这样他们不至于对类和全局对象两者的关系感到疑惑 事实上 在全局窗体对象被移除后 所有与它有关的代码都会产生错误

规则 添加窗体属性(Add Form Properties) 正如我已经提到过的 当你需要为你的窗体添加数据时 请添加一个私有域 如果你需要访问其他类的数据 可以为你的窗体添加属性 使用这种方法你就能够改变当前窗体的代码和数据(包含在它的用户界面中)而不必改变其他窗体或类的代码 你还应该使用属性或是方法来初始化派生窗体或是对话框 或是访问他们的最终状态 正如我前文所说的 你应该使用构造器来完成初始化工作

规则 显示组件属性(Expose Components Properties) 当你需要访问其他窗体的状态时 你不应该直接访问它的组件 因为这样会将其他窗体或其它类的代码和用户界面结合在一起 而用户界面往往是一个应用程序中最容易发生改变的部分 最好的方法是 为你需要访问的组件属性定义一个窗体属性 要实现这一点 可以通过读取组件状态的Get方法和设置组件状态的Set方法实现 假如你现在需要改变用户界面 用另外一个组件替换现有的组件 那么你只需做的是修改与这个组件属性相关的Get方法和Set方法 而不必查找 修改所有引用这个组件的窗体和类的源码 详细实现方法请参见下面的代码

private function GetText:String; procere SetText(const Value:String); public property Text:String; read GetText write SetText; function TformDialog GetText:String; begin Result:=Edit Text; end; procere TformDialog SetText(const Value:String); begin Edit Text;=Value; end;

规则 属性数组(Array Properties) 如果你需要处理窗体中的一系列变量 你可以定义一个属性数组 如果这些变量是一些对于窗体很重要的信息 你还可以把他们定义成窗体默认的属性数组 这样你就可以直接使用SpecialForm[ ]来访问他们的值了 下面的代码显示了如何将一个listbox组件的项目定义成窗体默认的属性数组

type TformDialog =class(TForm) private listItems:TlistBox; function GetItems(Index:Integer):String; procere SetItems(Index:Integer:const Value:String); public property Items[Index:Integer]:string; end; function TFormDialog GetItems(Index:Integer):string; begin if Index >=ListItems Items Count then raise Exception Create( TformDialog:Out of Range ); Result:=ListItems Items[Index]; end; procere TformDialog SetItems(Index:Integer;const alue:string); begin if Index >=ListItems Items Count then raise Exception Create( TformDialog:Out of Range ); ListItems Items[Index]:=Value; end;

规则 使用属性的附加作用(Use Side Effects In Properties) 请记住 使用属性而不是访问全局变量(参见规则 )的好处之一就是当你设置或者读取属性的值时 你还可能有意想不到的收获 例如 你可以直接在窗体界面上拖拉组件 设置多个属性的值 调用特殊方法 立即改变多个组件的状态 或者撤销一个事件(如果需要的话)等等

规则 隐藏组件(Hide Components) 我经常听见那些面向对象编程的狂热追求者抱怨Delphi窗体中包含一些在published部分声明的组件 这是和面向对象思想的封装性原理不相符合的 他们确实提出了一个重要的议题 但是他们中的大多数人都没有意识到解决方法其实就在他们手边 完全不用重写Delphi代码 也不用转向其他语言 Delphi向窗体中添加的组件参照可以被移到private部分 使得其他窗体不能访问他们 如果你这样做 你就有必要设置一些指向组件的窗体属性(请参见规则 ) 并且使用它们来访问组件的状态 Delphi将所有的这些组件都放在published部分 这是因为使用这种方式能够保证这些域一定是在 DFM文件中创建的组件 当你改变一个组件的名称时 VCL能够自动地将这个组件对象与它在窗体中的参照关联起来 因为delphi使用RTTI和Tobject方法来实现这种功能 所以如果想要使用这种自动实现功能 就必须把参照放置在published部分(这也正是为什么delphi将所有的组件都放在published部分的缘故) 如果你想知道的更详细一点 可以参看下面的代码

procere Tponent SetReference(Enable:Boolean); var Field:^Tponent; begin If Fowner<> nil then begin Field:=Fowner FieldAddress(Fname); If Field<>nil then Field^:=Self else Field^:=nil; end; end;

上面的代码是Tponent类的SetReference方法 这个方法可以被InserComponent RemoveComponent和SetName等方法调用 当你理解了这一点后 你应该不难想到如果你将组件参照从published部分移到了private段 你将失去VCL的自动关联功能 为了解决这个问题 你可以通过在窗体的OnCreate事件中添加如下代码解决 Edit :=FindComponent( Edit ) as Tedit; 你接下来应该做的就是在系统中注册这些组件类 当你为他们注册过后就能使RTTI包含在编译程序中并且能够被系统所使用 当你将这些类型的组件参照移到private部分时 对于每一个组件类 你只需为他们注册一次 即使为他们注册不是一定必要的时候 你也可以这样做 因为对于RegisterClasses的额外调用有益无害 通常你应该在单元中负责生成窗体的初始化部分添加以下的代码 RegisterClass([TEdit]);

规则 面向对象编程的窗体向导(The OOP Form Wizard) 为每一个窗体的每一个组件重复上述两个操作不仅十分的烦人 而且相当的浪费时间 为了避免额外的负担 我已经为此写了一个简单的向导程序 这个程序将会生成一些可以完成以上两步工作的代码 你需要做的仅仅是做几次复制和粘贴就行了 遗憾的是这个向导程序不能自动将代码放置到单元中合适的地方 我目前正在修改这个向导程序 希望能实现这个功能

规则 可视化窗体继承(Visual Form Inheritance) 如果应用得当 这将是一个强大的工具 根据我的经验 你所开发的项目越大 越能体现它的价值 在一个复杂的程序中 你可以使用窗体的不同等级关系来处理一组相关窗体的多态性(polymorphi *** ) 可视化窗体继承允许你共享多个窗体的一些公共的动作 你可以使用共享的方法 公用的属性 甚至是事件处理程序 组件 组件属性 组件事件处理方法等等

规则 限制保护域数据的使用(Limit Protected Data) 当创建一些具有不同分级体系的类时 一些程序员趋向于主要使用保护域 因为私有数据不能被子类访问 我不能说这没有其合理性 但是这肯定是和封装性不相容和的 保护数据的实现能够被所有继承的窗体所共享 而且一旦这些数据的原始定义发生改变 你必须更改所有的相关部分 请注意 如果你遵循隐藏组件这样一条规则(Rule ) 继承窗体就不可能访问基类的私有组件 在一个继承窗体中 类似Edit Text = 的代码就不会被编译 虽然这是相当的不方便 但是至少在理论上这是值得肯定的事情 而不是否定的 如果你感觉到实现封装性是最主要 最需要的 就请将这些组件参照放在基类的私有段

规则 保护域中的访问方法(Protected Access Methods) 在基类中将组件参照放置在私有域中 而为这些组件添加一些访问函数来得到他们的属性 这将是一种更好的方法 如果这些访问函数仅仅在这些类内部使用而且不是类接口的一部分 你应该在保护域声明他们 例如Rule 中描述过的GetText和SetText方法就可以声明成protected 并且我们可以通过调用SetText( )来编辑文本 事实上 当一个方法被镜像到一个属性时 我们可以简单地采用如下代码就可以达到编辑文本的目的 Text:= ;

规则 保护域中的虚拟方法(Protected Virtual Methods) 实现一个灵活的分级制度的另一个关键点是定义一些你可以从外部类调用的虚拟方法来得到多态性 如果这个方法使用得当 将会很少出现其他公共的方法调用保护域中的虚拟方法的情况 这是一个重要的技巧 因为你可以定制派生类的虚拟方法 来修改对象的动作

规则 用于属性的虚拟方法(Virtual Methods For Properties) 即使是访问属性的方法也能定义成virtual 这样派生类就能改变属性的动作而不必重新定义他们 虽然这种方法在VCL中很少使用 但是它确实十分灵活 强大 为了实现这一点 仅仅需要将Rule 当中的Get 和Set 方法定义成Virtual 基类的代码如下所示

type TformDialog = class ( TForm) Procere FormCreate(Sender:Tobject); Private Edit :Tedit; Protected function GetText:String;virtual; procere SetText(const Value:String);virtual; public constructor Create(Text :String):reintroce;overload; property Text:String read GetText write SetText; end;

在继承窗体中 你可以添加一些额外的动作来重载虚拟方法SetText procere TformInherit SetText(const Value:String); begin inherited SetText(Value); if Value= then Button Enabled:=False; end;

lishixin/Article/program/Delphi/201311/8509

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1013
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:114
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:712