TEditのKeyDownイベントを実行させるには?

解決


Yukibow  2018-08-20 23:05:21  No: 49379

TEdiTのKeyDownイベントにあるコードを、他のコンポーネントのイベントから、実行させたいと思っています。
具体的には、同じフォームのTButtonの押下時に

 Edit1KeyDown(Sender : TObject; var Key: Word; Shift: TShiftState);にて、
「リターンキー」を押した場合の内容を実行させたいのですが、その呼び出し時のパラメータがわかりません。
 Edit1KeyDown(Sender, VK_RETURN, 0)  だとエラーになります。

ご教授いただけませんでしょうか。
よろしくお願いします。


Mr.XRAY  2018-08-20 23:51:41  No: 49380

僭越ではありますが,そういう時のすごい技をお教え致します. 

それは「新規にプロジェクトを作成」して,その動作,機能だけをテストするプログラムを書いてテストするのです. 
この方法は,私が長年 Delphi を使っていて苦労の末に編み出した「技」です. 
今回,特別に愛する貴方だけに公開するものです. 
例えば以下のようにします. 

こうすると,以下のコードをコピペして,他の方もテスト可能になり,
もしかしたら他の方がテストして修正方法等を教えてくれるかも知れない,
というスゴイ「技」なのです. 
もちろん Windows のバージョンや Delphi のバージョンを書いておきます.

//=============================================================================
//  動作確認 Windows 7 U64(SP1) + Delphi XE5(UP2) Pro
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LKey : Word;
begin
   LKey := VK_RETURN;
   Edit1KeyDown(Sender, LKey, []);
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then begin
    ShowMessage('AAA');
  end;
end;


Yukibow  2018-08-21 00:44:07  No: 49381

Mr.XRAY様
早速のご回答ありがとうございます。いつも貴殿のサイトにお世話になっています。

Word型の変数を定義することは目からうろこでした。
また、TShiftState がsetだというのは、よく調べればわかることなのに、お恥ずかしい限りでした。
そもそも、エラーの原因が特定できてなかったですし。。。

スゴイ「技」(というか質問の仕方)まで、ご伝授頂いて、恐縮です。
Delphi7から使い始めて、数年になりますが、中途半端な理解の仕方しかできていないことを思い知らされ、反省しきりです。

今回質問してよかったです。本当に助かりました。


Mr.XRAY  2018-08-21 04:34:30  No: 49382

>スゴイ「技」(というか質問の仕方)まで、ご伝授頂いて、恐縮です。

これは質問の仕方というより,問題解決への 1 つの方法ですね.
アプリを開発していると, 1 つのユニットだけでも数百,数千,
場合によっては万を超えるコードになることがあります.

そんな長いコードの中でいじくり回しても気づかないことも,
短いコードにすると気づくことがあります.
そういうことです.


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加