委托中 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
[解决办法]
实参不够
[解决办法]
unit Unit1;interfaceuses 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);beginend;procedure TForm1.Button1Click(Sender: TObject);beginFMouseMoveProc := 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;
[解决办法]
用两种方法都可以.
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;