delphi 中的函数指针 回调函数(传递函数指针,以及它需要的函数参数)

以下代码仅仅是测试代码:delphi XE7 UP1

[delphi] view plain copy
 
  1. interface  
  2.   
  3. uses  
  4.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,  
  5.   System.Classes, Vcl.Graphics,  
  6.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;  
  7.   
  8. type  
  9.   TForm1 = class(TForm)  
  10.     btn1: TButton;  
  11.     btn2: TButton;  
  12.     edt1: TEdit;  
  13.     procedure btn1Click(Sender: TObject);  
  14.     procedure FormCreate(Sender: TObject);  
  15.     procedure FormShow(Sender: TObject);  
  16.     procedure FormDestroy(Sender: TObject);  
  17.   private  
  18.     { Private declarations }  
  19.   
  20.   public  
  21.     { Public declarations }  
  22.   end;  
  23.   
  24.   TMethod = procedure(v:string);  
  25. var  
  26.   Form1: TForm1;  
  27.   FList: TList;  
  28.   
  29. implementation  
  30.   
  31. {$R *.dfm}  
  32.   
  33. procedure p1(v:string);  
  34. begin  
  35.   ShowMessage('p1'+v);  
  36. end;  
  37.   
  38. procedure p2(v:string);  
  39. begin  
  40.   ShowMessage('p2'+v);  
  41. end;  
  42.   
  43.   
  44.   
  45. procedure callt(my:TMethod;v:string);  
  46. begin  
  47.   my(v);  
  48. end;  
  49.   
  50.   
  51.   
  52. procedure TForm1.btn1Click(Sender: TObject);  
  53. var  
  54.   v_s:string;  
  55. begin  
  56.   v_s:= edt1.Text;  
  57.   callt(FList.Items[StrToInt(v_s)],v_s);  
  58. end;  
  59.   
  60. procedure TForm1.FormCreate(Sender: TObject);  
  61. begin  
  62.    FList := TList.Create;  
  63. end;  
  64.   
  65. procedure TForm1.FormShow(Sender: TObject);  
  66. begin  
  67.   FList.Add(@p1);  
  68.   FList.Add(@p2);  
  69.   edt1.Clear;  
  70. end;  
  71.   
  72. procedure TForm1.FormDestroy(Sender: TObject);  
  73. begin  
  74.   FreeAndNil(FList);  
  75. end;  
  76.   
  77. end.  

http://blog.csdn.net/rznice/article/details/43190537

原文地址:https://www.cnblogs.com/findumars/p/8206779.html