错误:实际和正式var参数的类型必须相同
unit unAutoKeypress;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure SimulateKeyDown(Key:byte);
begin
keybd_event(Key,0,0,0);
end;
procedure SimulateKeyUp(Key:byte);
begin
keybd_event(Key,0,KEYEVENTF_KEYUP,0);
end;
procedure doKeyPress(var KeyValue:byte);
begin
SimulateKeyDown(KeyValue);
SimulateKeyUp(KeyValue);
end;
procedure TForm1.Button1Click(Sender: TObject);
const test = 'merry Christmas!';
var m: byte;
begin
Memo2.SetFocus();
m:=$13;
doKeyPress(m); // THIS IS WHERE ERROR
end;
end.
函数doKeyPress(m)中总是出错; 一个简单的问题,为什么?
我知道类型有问题,但所有类型都相似,到处都是字节,很奇怪 对我来说,我不能运行一个程序。
答案 0 :(得分:7)
TForm
继承自TWinControl
,在DoKeyPress
中声明了一个名为TWinControl
的方法,该方法位于ButtonClick
内编译器的当前范围内事件。
答案 1 :(得分:5)
问题是doKeyPress
是TForm1
(继承自TWinControl
)的方法,因此当您在doKeyPress
方法中编写TForm1
编译器时想要使用TForm1.doKeyPress
而不是本地函数。类范围比本地函数范围更近。
可能的解决方案包括:
unAutoKeypress.doKeyPress
。在我看来,前者是更好的解决方案。