请问回调函数的意义是什么呢? 为什么要设定回调函数这种函数?
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
     可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]

解决方案 »

  1.   

    你看一下有关TreeView的定制排序的原理,那是一个典型的回调函数应用例子。打个比方吧:你要定做一套西服,那么你可以请设计师为来设计(这相当于调用),而你只需要设计的结果。但作为设计师,他不知道你的具体要求,因此可能请你填写一张格式化的表格(这相当于回调函数的首部约定)。所以,你要让设计师接活并得到满意的设计(相当于成功调用),那么你就必须提供正确的表格(相当于提供有效的回调函数)。这样,你就能够得到满意的服装设计了。
      

  2.   

    某些程序运行启动后并不出现在任务条中,而是缩小为任务条右下角的一个小图标,当鼠标移到这个小图标上时会出现一些提示信息、单击该小图标会执行一些特定的操作。便如任务条右下角的小喇叭图标,单击它会弹出一个简单的音量控制条,双击会启动另一个更大的音量控制程序。
      在Shell32.DLL动态链接库中包括一个函数Shell_NotifyIconA()可通知Windows在任务条右下角加入一个小图标,可惜该函数的详细说明未收入Delphi的帮助文档中,下面以一个简单的实例来说明如果使用该函数。unit Unit1;interface{ 记住在uses部分中包括 ShellAPI}uses
      Windows, Messages, SysUtils, Classes,
      Graphics, Controls, Forms, Dialogs,
      ShellAPI, StdCtrls;{自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}
    const MY_MESSAGE = WM_USER + 100;type
      TForm1 = class(TForm)
      procedure FormCreate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure FormPaint(Sender: TObject);
      private
        procedure OnIconNotify(var Message: TMessage);
          message MY_MESSAGE;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{当小图标捕捉到鼠标事件时进入此过程}
    procedure TForm1.OnIconNotify(var Message: TMessage);
    const
      Busy: Boolean = false;
    begin
      if not Busy then begin    Busy := true;
        if Message.LParam=WM_LBUTTONDOWN then
          if Application.MessageBox('Are you sure',
             'Exit', MB_YESNO)=IDYES then Close;
        Busy := false;
      end;
    end;{当主Form建立时通知Windows加入小图标}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      nid: TNotifyIconData;
    begin
      nid.cbSize := sizeof(nid); // nid变量的字节数
      nid.Wnd := Handle; // 主窗口句柄
      nid.uID := -1; // 内部标识,可设为任意数
      nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指定
      nid.szTip := 'This is a test application'; // 提示字符串
      nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息  nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有效
      if not Shell_NotifyIcon(NIM_ADD, @nid) then begin
        ShowMessage('Failed!');
        Application.Terminate;
      end;
      {将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;{程序被关闭时通知Windows去掉小图标}
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      nid: TNotifyIconData;
    begin
      nid.cbSize := sizeof(nid); // nid变量的字节数
      nid.uID := -1; //内部标识,与加入小图标时的数一致
      nid.Wnd := Handle; //主窗口句柄
      Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标end;{主窗口初始化完毕并显示时将激活Paint重画事件,此时将主窗口隐藏}
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      Hide;
    end;end.
       上例中将程序的图标放在任务条右下角,然后隐藏自身,当用户移动鼠标至该图标上时会看到提示字符串,如果单击该图标会出现一个对话框,选择Yes退出程序并清除小图标