错误:实际和正式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)中总是出错;
一个简单的问题,为什么?

我知道类型有问题,但是所有类型都是相似的,到处都是字节,很奇怪
对我来说,我无法运行程序。

最佳答案

问题在于doKeyPressTForm1的方法(从TWinControl继承),因此,当您在doKeyPress方法内编写TForm1时,编译器希望使用TForm1.doKeyPress而不是局部函数。类作用域比局部函数作用域更近。

可能的解决方案包括:


重命名本地函数以避免冲突。
使用完全限定的名称unAutoKeypress.doKeyPress


我认为前者是更好的解决方案。

关于delphi - 如何解决命名和范围冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8694710/

10-13 07:14