高人请帮看下-为什么小弟我无法调用这个回调函数

高人请帮看下------------为什么我无法调用这个回调函数
我想使用一个代码,找出大图里的所有子图,但碰到了两个问题:
1.如果用Compare函数的方式,总是只能找到第一个图,找不到所有的子图,是什么原因?
2.但如果用了回调函数,是不是可以实现这个功能?但为什么我调用回调函数时提示出错?
文件1,main.pas
unit Main;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ExtDlgs;
type
  TMainForm = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Memo1: TMemo;
    Button1: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    OpenPictureDialog2: TOpenPictureDialog;
    Label1: TLabel;
    Button2: TButton;
    Memo2: TMemo;
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    LibDir, LibName: string; //位置和名称
  end;
var
  MainForm: TMainForm;
  strTmp: string;

implementation
uses Math, BitmapData;
{$R *.dfm}
procedure TMainForm.Image1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TMainForm.Image2Click(Sender: TObject);
begin
  if OpenPictureDialog2.Execute then
    Image2.Picture.LoadFromFile(OpenPictureDialog2.FileName);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  Image1.Picture.Bitmap.PixelFormat := pf24bit;
  Image2.Picture.Bitmap.PixelFormat := pf24bit;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  bd1, bd2: TBDBitmapData;
  i, j, k, x, y: Integer;
  b: Boolean;
  tmp1: string;
  MyEnumImageProc:TBDEnumImageProc;//定义回调函数
begin

  try
    bd1 := TBDBitmapData.Create;
    bd2 := TBDBitmapData.Create;
    bd1.LoadFromBitmap(Image1.Picture.Bitmap);

      Application.ProcessMessages;
      LibName := 'c:\s.bmp';//读取子图片
      if not FileExists(LibName) then
        Continue;
      Image2.Picture.LoadFromFile(LibName); // 加载库模版图片
      bd2.LoadFromBitmap(Image2.Picture.Bitmap); //加截要匹配的图片
      for y := 0 to bd1.Height - 1 do //从上到下   表示的是图1,也就是要搜索的大图
      begin
        for x := 0 to bd1.Width - 1 do //从左到右
        begin
            //再扫小图的每个点
          //if bd1.Compare(bd2, x, y) then //****将每一个像索点位置的图片进行对比,但这个代码只能找出第一个图,没办法找出最后一个图????*****
          if bd1.EnumImage(bd2,MyEnumImageProc) then  //这个调用回调函数,想把所有的子图找出座标点出来,但却报错了????????
          begin
            Memo2.Lines.Add('Found:' + IntToStr(x)+ IntToStr(y));//找出子图在大图上的座标点
          end;
        end;
      end;

    end;

  finally
    bd1.Free;
    bd2.Free;
  end;
end;
end.


------解决方案--------------------
主调函数里面的MyEnumImageProc变量没有初始化
------解决方案--------------------
TBDEnumImageProc = function(Left, Top: Integer; Bmp: TBDBitmapData; lParam:    Integer): Boolean
这是一个函数指针的定义,所以LZ需要定义一个独立的函数--注意,不是在类里面定义,而是一个单独的函数作为句柄来传入
譬如
function aTest(Left, Top: Integer; Bmp: TBDBitmapData; lParam:    Integer): Boolean
begin
showMessage("this is a test");
end;

然后调用的地方加上
MyEnumImageProc:= aTest;