读书人

委托中 Not enough actual parameters

发布时间: 2012-02-21 16:26:23 作者: rapoo

委托中 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;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;
[解决办法]
用两种方法都可以.
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; 

读书人网 >.NET

热点推荐