2012-01-01 8 views
2

エラー:実際の正式のvarパラメータの種類は、関数doKeyPress(メートル)で常にエラー命名とスコープ競合を修正するにはどうすればいいですか?

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. 

同一である必要があります。 簡単な質問、なぜですか?

私はタイプに間違っていることを知っていますが、すべてのタイプは似ています。どこでもバイト、奇妙です。私にとっては と私はプログラムを実行できません。

答えて

5

問題はdoKeyPressは(TWinControlから継承)TForm1の方法であり、あなたがTForm1メソッド内doKeyPressを書くときに、コンパイラはローカル関数ではなくTForm1.doKeyPressを使用したいということです。クラススコープは、ローカル関数スコープよりも近い。

考えられる解決策は次のとおりです。

  • は、衝突を避けるために、ローカル関数の名前を変更します。
  • 完全修飾名を使用して、unAutoKeypress.doKeyPress

私の意見では前者が優れた解決策です。

+0

ありがとうございます。すべて今よく! –

7

TFormTWinControlから継承されButtonClickイベント内部コンパイラの現在のスコープ内にあるTWinControlで宣言さDoKeyPressと呼ばれる方法があります。

+0

私はイベントのために何ができるのですか、それらをどのように分離するのですか? –

関連する問題