错误:实际和正式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)中总是出错;
一个简单的问题,为什么?
我知道类型有问题,但是所有类型都是相似的,到处都是字节,很奇怪
对我来说,我无法运行程序。
最佳答案
问题在于doKeyPress
是TForm1
的方法(从TWinControl
继承),因此,当您在doKeyPress
方法内编写TForm1
时,编译器希望使用TForm1.doKeyPress
而不是局部函数。类作用域比局部函数作用域更近。
可能的解决方案包括:
重命名本地函数以避免冲突。
使用完全限定的名称unAutoKeypress.doKeyPress
。
我认为前者是更好的解决方案。
关于delphi - 如何解决命名和范围冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8694710/