摘要:
因为使用方法参数的不同, 所以有了调用约定.譬如 Delphi 默认的是从左到右读取参数; Window API 是从右到左读取参数.如果没有调用约定, Delphi 就无法使用由 C 语言编写的 Window API;如果没有调用约定, 别的语言也无法使用由 Delphi 编写的 DLL 文件中的 阅读全文
摘要:
//一个前导示例: {创建一 Win32 工程, 给窗体添加 OnKeyDown 事件} procedure Tbu.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Self.Text := Char(Ke 阅读全文
摘要:
在方法的类别中, 应该还有一种事件方法;事件是一种特殊的属性, 使用事件, 就是使用属性; 然后属性再调用事件方法.到属性里面再深入学习吧. 阅读全文
摘要:
//构造方法就是对象建立时调用的方法; 析构方法就是对象销毁时调用的方法. 如: TMyClass = class(TObject) public constructor Create; {构造方法} destructor Destroy; override; {析构方法} end; {几个要点: 阅读全文
摘要:
{ 抽象类是一定要被继承才可以使用的; 抽象方法是一定要被覆盖才可以使用的. 现在说的是不能被覆盖的方法, 与不能被继承的类. } //譬如: TA = class procedure Proc; virtual; {TA 中的虚方法, 将要被覆盖} end; TB = class(TA) proc 阅读全文
摘要:
//抽象方法类似与接口; 在没有接口的年代 Delphi 是用抽象方法来模拟接口的; 我想它最终会被接口替代. {下面就定义了两个抽象方法} TMyClass = class(TObject) procedure Proc1; virtual; abstract; {抽象方法首先应该是一个虚方法或动 阅读全文
摘要:
// inherited 就是调用父类方法的一个特殊命令; 举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCt 阅读全文
摘要:
//类中的方法重载首先具备前面说过的重载相关的所有特点, 如: TMyClass = class(TObject) function Fun(s: string): string; overload; function Fun(i: Integer): Integer; overload; func 阅读全文
摘要:
//静态方法是默认的, 如果不是虚方法或纯虚方法, 那它就是一个静态方法. //类方法就是通过类名就可以访问的方法 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Control 阅读全文
摘要:
//下面说的数据成员不仅仅指方法 TMyClass = class(TObject) function Fun1: string; {公共区域的数据成员在默认状态下会归于 published 区} //所谓默认状态就是编译指令为{$M+}, 如果是{$M-}这些数据成员会归于 public 区 pr 阅读全文
摘要:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) en 阅读全文
摘要:
//标准的覆盖是这样的 TBass = class procedure Proc; virtual; {或用 dynamic} end; TChild = class(TBass) procedure Proc; override; end; //以下几种情况属于重定义, 其中例 3-5 还会有编译 阅读全文
摘要:
方法来到类中, 以前的特点基本都在;因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖;也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法.先从虚方法与动态方法开始吧 //下面的类中就定义了两个虚方法(virtual)、两个动态方法(dyn 阅读全文
摘要:
关于属性的话题还有很多, 譬如: 数组属性、默认属性、class 属性等等.先总结一下前面提到过的属性吧. TMyClass = class(TObject) private FName: string; procedure SetName(const Value: string); publish 阅读全文
摘要:
{给这个函数可以赋常数变量} function Fun1(x,y: Integer): Integer; begin Result := x + y; end; {这个函数不能赋予常数变量} function Fun2(var x,y: Integer): Integer; begin Result 阅读全文
摘要:
//上面一个例子不能说明递归函数的本质, 直接来个实用的函数吧, 刚好要用. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, 阅读全文
摘要:
//所谓递归函数, 就是自己调用自己的函数, 先来个简单的例子: {递归调用的简单示例} procedure alert(i: Integer = 1); begin ShowMessage(IntToStr(i)); {这是方法的功能} Inc(i); if i<10 then alert(i); 阅读全文
摘要:
//把一个方法当作另一个方法的参数, 就是回调方法, 大家习惯称作回调函数 type TFunType = function(i: Integer): Integer; {声明一个方法类型} function MyFun(i: Integer): Integer; {建立类型兼容的函数} begin 阅读全文
摘要:
//弄明白这一点, 才好使用回调函数 {定义方法类型} type TFunType = function(x: Integer): Integer; {函数类型} TProcType = procedure(name: string); {过程类型} {定义一个符合 TFunType 类型的函数} 阅读全文
摘要:
{自定义过程} procedure MyProc; begin ShowMessage('ok'); end; {自定义函数} function MyFun: string; begin Result := 'ok'; end; {读取它们的指针} procedure TForm1.Button1C 阅读全文