دلفي: كيف يمكنني التوقف عن مفاتيح اختصار التواء التلقائي؟

StackOverflow https://stackoverflow.com/questions/503538

سؤال

أنا أستخدم قائمة TacedList Delphi ، مع مفاتيح الاختصار لبعض الإجراءات.

أرغب في منع تشغيل بعض الإجراءات عدة مرات عن طريق التكرار التلقائي للوحة المفاتيح ، لكنني أفعل ليس تريد التأثير على عملية التكرار التلقائي على مستوى العالم. ما هي أفضل طريقة للقيام بذلك؟

توضيح: ما زلت بحاجة إلى التعامل مع العديد من المفاتيح السريعة - إنه فقط keypresses الناتجة عن التكرار التلقائي الذي أريد تجاهله.

هل كانت مفيدة؟

المحلول

اعتراض wm_keydown الرسائل ، وانظر إلى Bit 30 لمعرفة ما إذا كان التكرار تلقائيًا. إذا كان الأمر كذلك ، فلا تمرر الرسالة كالمعتاد ولن يتم رؤيتها.

قد تحتاج إلى تمكين Form Key-Preview لجعل هذا العمل.

نصائح أخرى

يمكنك إسقاط TTIMER ، تعيين timer.interval على القيمة التي تريدها (1000 = 1SEC) ، ثم في قائمة TaceList تفعل شيئًا مثل:

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/TACETING.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top