문제

일부 동작을 위해 바로 가기 키가있는 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를 만들 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top