DELPHI : Taction Shortcut Keys AutorePeating을 어떻게 중지합니까?
-
20-08-2019 - |
문제
일부 동작을 위해 바로 가기 키가있는 Delphi TactionList를 사용하고 있습니다.
키보드 자동 반복에 의해 특정 동작이 여러 번 트리거되는 것을 방지하고 싶지만 ~ 아니다 전 세계적으로 자동 반입 작업에 영향을 미치기를 원합니다. 이것을하는 가장 좋은 방법은 무엇입니까?
설명: 나는 여전히 여러 개의 빠른 키 프레스를 처리해야합니다. 뿐 내가 무시하고 싶은 자동 레피에 의해 생성 된 키 프레스.
해결책
가로 채기 wm_keydown 메시지를 보내고 비트 30을보고 자동 반환인지 확인하십시오. 그것이 있다면, 메시지를 평소처럼 전달하지 않으면 보이지 않을 것입니다.
이 작업을 수행하려면 양식 키 예약을 활성화해야 할 수도 있습니다.
다른 팁
ttimer를 떨어 뜨리고 ttimer.interval을 원하는 가치로 설정할 수 있습니다 (1000 = 1sec).
procedure TfrmMain.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
if Timer1.Enabled then
begin
Handled := True;
Exit;
end;
Handled := false;
Timer1.Enabled := true;
end;
또한 타이머를 비활성화하는 것을 잊지 마십시오 TIMER.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;
이것을 dmajkic의 솔루션과 결합하여보다 일반적인 aproach를 얻을 수 있습니다. 그리고 당신이 정말로 야심적이라면, 당신은 새로운 버전의 taction/tactionlist를 만들 수 있습니다.
제휴하지 않습니다 StackOverflow