Delphi: كيفية تعيين اختصار لوحة مفاتيح UP إلى Action/Menuitem ، والحفاظ عليه فعليًا للتنقل في القائمة (Listbox/VTV)؟

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

سؤال

الرجاء مساعدتي: كيفية تعيين اختصار لوحة مفاتيح UP إلى عنصر أو عنصر القائمة ، والاحتفاظ به فعليًا للتنقل في القائمة عن التحكم (على سبيل المثال Listbox/Virtual TreeView/آخر) في نفس الوقت؟

شكرًا!

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

المحلول

تعلق:

وماذا عن لاعب Winamp؟ يحتوي على ميزات رفع مستوى الصوت/مستوى الصوت المعين لمفتاح APSER ARROW ومفتاح السهم لأسفل في المقابل .. حسنًا ، إذا كان ذلك مستحيلًا في دلفي ، ثم ...

لكن من الممكن بالتأكيد ، ليس من الجيد القيام بذلك ، وخلاف إرشادات التفاعل عن تجربة مستخدم Windows.

ولكن إذا كنت قد تم تعيينها على تنفيذها ، فإليك كيف. تجاوز الطريقة التالية في فئة النماذج التي تحتوي على مكونات الإجراء:

function IsShortCut(var Message: TWMKey): Boolean; override;

وفيه يمكنك منع المفتاح لأعلى ولأسفل من إطلاق الإجراءات التي يتم اختصاراتها لـ:

function TWeirdForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if (Message.CharCode in [VK_UP, VK_DOWN])
    // insert test whether message needs to go to the focused control instead
    and (...)
  then begin
    // insert calls to code that should be executed instead
    Result := False;
    exit;
  end;
  inherited;
end;

لاحظ أنه يجب عليك اختبار حالة التحول الصحيحة أيضًا ، وتحقق من أن الكود لا يكسر أي سلوك آخر يتوقعه المستخدمون ، مثل نقل النافذة باستخدام مفاتيح الأسهم.

نصائح أخرى

على مجموعة خصائص النموذج KeyPreview := true

ثم في حدث keyup لحدث كتابة النموذج للتحقق مما إذا كنت قد تم الضغط على مفتاح UP وجعله يتصل بعنصر القائمة (في عنصر قائمة الحالة هذا يسمى Action1):

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_UP) and (ActiveControl = ListBox1)then
    Action11.Click;
end;

procedure TForm1.Action11Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >=0  then
    ShowMessage(ListBox1.Items[ListBox1.ItemIndex]);
end;

إذا كنت بحاجة إلى تنفيذ Action1 حتى لو لم يكن التحكم الحالي هو صندوق القائمة ، فقم بإزالة ملف and جزء من IF بيان

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