设为首页收藏本站

Delphi乐园 开发者的家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2506|回复: 2

delphi 函数过程类型 委托 [复制链接]

Rank: 4

  • TA的每日心情
    慵懒
    2013-8-10 13:48:45
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    金钱
    60935
    12142
    0
    在线时间
    6 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    10
    发表于 2012-7-6 10:40:31 |显示全部楼层
    分享到:
    View Code
    unit Unit5;

    interface

    uses System.Classes, System.SysUtils, Vcl.Dialogs;

    type
       // 声明过程类型
       TObjFuns = procedure(const str1, str2: string) of object;

       IFormattedNumber = interface
         ['{19AE4E57-A022-45B1-AA42-43FF5142D685}']
         function FormattedString: string;
         function GetName: string;
       end;

       TFormattedInteger = class(TInterfacedObject, IFormattedNumber)
       private
         FValue: Integer;
       public
         // 声明过程变量
         FPro: TObjFuns;
         constructor Create(AValue: Integer);
         destructor Destroy; override;
         function FormattedString: string;
         function GetName: string;
         procedure DoDelegate(str1, str2: string);
       end;

       TFormattedHexInteger = class(TFormattedInteger, IFormattedNumber)
         destructor Destroy; override;
         function FormattedString: string;
         function GetName: string;
       end;

    implementation

    { TFormattedInteger }

    constructor TFormattedInteger.Create(AValue: Integer);
    begin
       inherited Create;
       DoDelegate('TFormattedInteger', 'Destroy');
       FValue := AValue;
    end;

    destructor TFormattedInteger.Destroy;
    begin
       DoDelegate('TFormattedInteger', 'Destroy');
       inherited Destroy;
    end;

    procedure TFormattedInteger.DoDelegate(str1, str2: string);
    begin
       // 使用过程变量
       if Assigned(FPro) then
         FPro(str1, str2);
    end;

    function TFormattedInteger.FormattedString: string;
    begin
       Result := 'This integer is' + IntToStr(FValue);
    end;

    function TFormattedInteger.GetName: string;
    begin
       Result := 'TFormattedInteger.GetName';
    end;

    { TFormattedHexInteger }

    destructor TFormattedHexInteger.Destroy;
    begin
       DoDelegate('TFormattedHexInteger', 'Destroy');
       inherited Destroy;
    end;

    function TFormattedHexInteger.FormattedString: string;
    begin
       Result := 'The hex integer is $' + IntToHex(FValue, 4);
    end;

    function TFormattedHexInteger.GetName: string;
    begin
       Result := 'TFormattedHexInteger.GetName';
    end;

    end.






    View Code
    unit Unit4;

    interface

    uses
       Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
       System.Classes, Vcl.Graphics,
       Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
       Unit5;

    type
       TForm4 = class(TForm)
         btn1: TButton;
         mmo1: TMemo;
         procedure btn1Click(Sender: TObject);
       private
         procedure PrintfStr(const str1, str2: string);
         { Private declarations }
       public
         { Public declarations }
       end;

    var
       Form4: TForm4;

    implementation

    {$R *.dfm}

    procedure TForm4.btn1Click(Sender: TObject);
    var
       MyInt: TFormattedInteger;
    begin
       MyInt := TFormattedInteger.Create(123);
       // 给过程变量赋值
       MyInt.FPro := PrintfStr;
       mmo1.Lines.Add(MyInt.FormattedString);
       MyInt.Free;
       mmo1.Lines.Add('End of Procedure  ' + #13);

    end;

    procedure TForm4.PrintfStr(const str1, str2: string);
    begin
       mmo1.Lines.Add(str1 + '->' + str2);
    end;

    end.
    曾经拥有 该用户已被删除
    发表于 2014-5-14 09:54:33 |显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    delphi乐园微信公众号

    手机版|Delphi乐园 ( 冀ICP备11023363号-7 )    

    GMT+8, 2016-10-23 02:15

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    公网安备 14090202000504号

    回顶部