请先看描述:
我想实现这样的效果,执行一个函数之前,把鼠标指针变忙碌,执行完这个函数之后,鼠标指针变普通。伪代码:
procedure ExecProc(函数A);
begin
  Screen.Cursor := crHourGlass;
  try
    这里执行函数A;
  finally
    Screen.Cursor := crDefault;
  end;
end;函数A的定义事先是不知道的,也就是函数A可以是任意的函数。

解决方案 »

  1.   

    function DoCommand2(const CommandName: string;id: integer): Integer;
    var
     CommandProc: function(id: interger): Integer of object;
    begin
      TMethod(CommandProc).Code := TMyObj.MethodAddress(CommandName);
      if Assigned(TMethod(CommandProc).Code) then Result := CommandProc(id);  //注意参数
    end;
      

  2.   

    要求你的 function 的参数要一致,当然可以动态的,但那个就比较麻烦了
      

  3.   

    ari这个的前提是必须知道定义啊。如果定义也是未知的好像不太容易吧。想想....
      

  4.   

    以前做过个类似的
    声明:
      TCalObj = class
      private  published
        function MgeUps(s: string): string;
        function Stulz(s: string): string;
        function JBus(s: string): string;
        function Syris(s: string): string;
        function TOP9500(s: string): string;
        function Lovato(s: string): string;
        function ImvSitePro(s: string): string;
        function Led204MB(s: string): string;
        function JBC116(s: string): string;
        ....
      end;
    function TCalObj.MgeUps(s: string): string;
    begin
      Result := s + crc16(s);
    end;function ExecuteRoutine(Obj: TObject; Name: string; Param: string): string;
    var
      PMethod: TMethod;
      AProcedure: TFunciton;
    begin
      result := '-1';
      PMethod.Data := Pointer(Obj);
      PMethod.Code := Obj.MethodAddress(Name);
      if Assigned(PMethod.Code) then
      begin
        AProcedure := TFunciton(PMethod);
        result := AProcedure(Param);
      end;
    end;
    调用:
    procedure TComTest.sbtnCalCrcClick(Sender: TObject);
    var
      CalObj: TCalObj;
    begin
      CalObj := TCalObj.Create;
      edtDest.Text := ExecuteRoutine(CalObj, 函数名, 参数);
      FreeAndNil(CalObj);
    end;
      

  5.   

    >>如果定义也是未知的好像不太容易吧。定义未知的,实现比较麻烦,虽然可以,
      

  6.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1289838