Delphi:い止めTActionショートカットキー autorepeating?
-
20-08-2019 - |
質問
を使用しているデ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の新しいバージョンを作成することができます。
所属していません StackOverflow