委托中 Not enough actual parameters 的有关问题

委托中 Not enough actual parameters 的问题
定义如下:
TMouseMoveProc = procedure(Shift: TShiftState; X, Y: Integer) of object; 
procedure OnMouseMove(Shift: TShiftState; X, Y: Integer); 
FMouseMoveProc: TMouseMoveProc; 
出错代码如下:
FMouseMoveProc := FDrawService.OnMouseMove 
出错信息:
[Error] HisView.pas(111): Not enough actual parameters

------解决方案--------------------
sf
------解决方案--------------------
实参不够
------解决方案--------------------
Delphi(Pascal) code
unit Unit1;

interface

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

type
  TMouseMoveProc = procedure(Shift: TShiftState; X, Y: Integer) of object;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FMouseMoveProc: TMouseMoveProc;
    procedure OnMouseMove(Shift: TShiftState; X, Y: Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.OnMouseMove(Shift: TShiftState; X, Y: Integer);
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FMouseMoveProc := OnMouseMove;
end;

end.

------解决方案--------------------
FDrawService.OnMouseMove 是哪里来的?
------解决方案--------------------
可能你的OnMouseMove有问题,建议改个名字试试。

unit Unit3;

interface

uses
Classes;

type
TMyProcedure=Procedure() of Object;
testThread = class(TThread)
private
F_ProcFuncMemoryAddress:TMyProcedure;
F_para:String;

Procedure SetThreadFunction(_MyProcedure:TMyProcedure);
Procedure SetPara(_Para:String);
protected
procedure Execute; override;
published
property ThreadFunction:TMyProcedure write SetThreadFunction;
property ThreadPara:String Write SetPara;
end;

implementation

{ testThread }

procedure testThread.Execute;
begin
FreeOnTerminate:=true;
Synchronize(F_ProcFuncMemoryAddress);
//F_ProcFuncMemoryAddress(F_para);
end;

procedure testThread.SetPara(_Para: String);
begin
F_Para:=_Para;
end;

procedure testThread.SetThreadFunction(_MyProcedure:TMyProcedure);
begin
F_ProcFuncMemoryAddress:=_MyProcedure;
end;

end.

------解决方案--------------------
应该这样吧

FMouseMoveProc := 接口实现 as FDrawService.OnMouseMove;
------解决方案--------------------
用两种方法都可以.
Delphi(Pascal) code


TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FMouseMoveProc: TMouseMoveProc;
  public
    { Public declarations }
    property MouseMoveProc: TMouseMoveProc read FMouseMoveProc write FMouseMoveProccode;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //第一种方法
  MouseMoveProc := FDrawService.OnMouseMove;
  
  //第二种方法
  FMouseMoveProc(FDrawService.OnMouseMove);
end;