質問

を使用しているデTActionList、ショートカットキーの一部行動します。

たいの防止、一定の行為からトリガされるまでに複数回のキーボードオートリピートしない ない い影響を自動リピート動作です。何の?

解明:まだまだ取り扱う必要があり複数の高速keypressesで のみ のkeypressesの発生によるオートリピートしていきたいは無視します。

役に立ちましたか?

解決

WM_KEYDOWN のメッセージインターセプト、と見てそれは自動繰り返している場合はビット30で確認してください。もしそうであれば、いつものように、メッセージに合格しないと、それは表示されません。

あなたはこの仕事をするために、フォームのキー・プレビューを有効にする必要があります。

他のヒント

立ち寄ることのできるTTimer、TTimer.間隔に値す(1000=1sec)、そしてTActionListのように:

procedure TfrmMain.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
  if Timer1.Enabled then 
  begin
    Handled := True;
    Exit;
  end;

  Handled := false; 
  Timer1.Enabled := true;     
end;

も忘れずに無効にするインターバルタイマーは、 タイマー.OnTimer.

あなたは、アクションが使用されている最後の時間を節約し、その間の時間が短すぎる場合は、それを無視することができます。 単一のアクションのために、あなたは次のように行うことができます:

procedure TForm.FormCreate(const Sender: TObject);
begin
  // ...

  FLastActionTime := Now; // 
end;

proceudure TForm.Action1Execute(const Sender: TObject);
const
  cThreshold = 1/(24*60*60*10); // 0.1 sec
begin
  if Now-FLastActionTime<cThreshold then
    Exit; // Ignore two actions within 0.1 sec
  FLastActionTime := Now;
end;

あなたはより一般的なaproachを取得するためにdmajkicのソリューションと組み合わせることができます。あなたが本当に野心的であればそして、あなたて、TAction / TActionlistの新しいバージョンを作成することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top