委托中 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
------解决方案--------------------
实参不够
------解决方案--------------------
定义如下:
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;