delphi 回调函数例子 用函数过程作为参数

原创 2015年07月08日 23:28:14

今天有个朋友问我怎么用函数或者过程作为函数的参数呢,我说网上有挺多的,然而他告诉我很多例子运行不起来,我搜了几个测试了下,不知道是不是我自己的软件版本的问题,运行不了,所以自己研究了下,把自己能运行的贴出来,和大家分享分享。


先说说回调函数需要注意的几个步骤吧,

首先要声明一个类型;

        type  TProc = procedure(str:string) of object;     //这里的of object 一定要,不然会出错,也可能是有些方法自己不知道吧,希望知道的可以告诉一声;


第二步:定义一个过程

      

procedure test(str:string);                      //注意这个作为参数的函数内部的参数必须和TProc 的参数一样;
begin
    showmessage(str);
end


      

第三步 定义一个调用test 这个函数的函数

   

procedure  dotest(F:TProc);
begin
   F('这是回调函数的测试');
end

第四步 就可以使用了


procedure show();
begin
     dotest(test);
end

如果还是不明白就来电简单的完整的例子吧


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ComCtrls, StdCtrls;

type
  TFunc = procedure() of object;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
   function myTest(f:TFunc):string;
   procedure abc();
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.abc;
begin
  showmessage('这是回调函数测试');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   myTest(abc);
end;

function TForm1.myTest(f:TFunc):string;
begin
   f();
end;

end.


测试结果是这样的





       

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

delphi冒泡算法

for i:=9 downto 0 do     for j:=0 to i do     begin       times := times + 1;       if LArray[j]...

delphi 动态控制窗口置顶且界面不闪

procedure TForm1.CheckBox1Click(Sender: TObject);begin if CheckBox1.Checked then SetWindowPos(Ha...
  • s11ss
  • s11ss
  • 2009-11-17 11:45
  • 1296

Delphi中对时间操作大全

看一看在delphi中用于描述时间的几种数据结构,对时间的操作,其实就是对这些结构的操作。  TDateTime类型:  Delphi中最常用的表示日期时间的数据类型TDateTime类型,和...

代码最简短的 delphi 程序

建立 Console Application,修改代码为:end. Windows XP SP2 + Delphi7 测试通过。以后有时间分析一下:) ——ps: 其实这程序没有任何功能,没有任何实际...
  • s11ss
  • s11ss
  • 2009-11-13 00:11
  • 641

[delphi] 让AllocateHwnd接受一般函数地址作参数

Classes单元的AllocateHWnd函数是需要传入一个处理消息的类的方法的作为参数的,原型: Delphi(Pascal) code function AllocateHWnd(Meth...
  • s11ss
  • s11ss
  • 2012-04-05 22:19
  • 1477

Delphi 函数传递参数的不同方式

在Delphi过程、函数中传递参数几个修饰符为Const、Var、Out。另一种不加修饰符的为默认按值传递参数。 一、默认方式以值方式传递参数 procedure TForm1.ProcN...

Asp.net服务器控件编程(1) 开篇、基础

有朋友给我说:Asp.net之所以方便和强大,关键是它有一组强大的Asp.net服务器控件,在Asp.net中我们经常会遇到Html标注,Html服务器控件、Web控件和Asp.net服务器控件等等,...

将函数或过程作为参数进行传递实例

又名:将事件作为参数进行传递实例 首先要明白DELPHI中的事件是指针来的。 1 声明一个事件: type     TChangeEvent = procedure (ASelectType,...

遍历某盘所有目录生成树

GetRightStr //取右边字符串 EnumFileInRecursion遍历生成目录树procedure EnumFileInRecursion(ATree :TTreeView; APare...

借助TreeView控件遍历本地磁盘并生成目录树

下面是实现的具体方法,逻辑很简单,就没有给说明了:......            DriveInfo[] drivers = DriveInfo.GetDrives(); &#...
  • top_wo
  • top_wo
  • 2010-10-14 17:00
  • 1505
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)