اذهب الي المحتوي
أوفيسنا

مشكلة ازرار اختصارات لوحة المفاتيح الكيبورد


qathi
إذهب إلى أفضل إجابة Solved by M.Abd Allah,

الردود الموصى بها

السلام عليكم اساتذتنا واعضاء منتدانى الرائع
حياكم الله وبعد .....

مشكلة قديمة جديدة مؤرقة ارجو حلها


بعد عدة محاولات واستخدام امثله وجدتها هنا في منتدانا اوفيسنا لم تفلح
ارفع لكم المشكلة وارجو ان اتلقى من خبرائنا الافاضل الحل أن شاء الله

عند استخدام الكود التالي في اي حدث عند مفتاح للأسفل لحقل معين فانه يعمل مثل حقل k3

    If KeyCode = 115 Then 'f2
        Form_Form1.k1.SetFocus

        ElseIf KeyCode = 114 Then 'f3
        Form_Form1.k5.SetFocus
    End If

لكن ليس من المعقول تكرار هذا الكود بكتابته في كل مره عند كل الحقول والكائنات النموذج خاصتاً عندما يكون الكود بة سطور كثيرة لأوامر أكثر
فقمت بعملها في دالة مستقلة واستداعها بكود مختصر مثل حقل k4 وزر Bo1 لكنها لم تعمل

Call AllowKey

فقمت باضافة دالة وجدتها من المنتدى

Public Function AllowKeyCode(KeyCode As Integer, Shift As Integer) As Integer

    If KeyCode = 115 Then 'f4
        Form_Form1.k1.SetFocus

        ElseIf KeyCode = 114 Then 'f3
        Form_Form1.k5.SetFocus
    End If
End Function

واستدعائها بالكود التالي:

KeyCode = AllowKeyCode(KeyCode, Shift)

عند وضعها في حدث عند مفتاح للأسفل اي حقل يودي هذا الكود الى عدم امكانية ادخال بيانات في الحقل وهذه مشكلة كبيرة كما في حقل k2

فقمت بوضع كود الدالة السابقة أو هذه في حدث عند مفتاح للأسفل النموذج

Call AllowKey
أو
KeyCode = AllowKeyCode(KeyCode, Shift)

لكن لا تعمل هذه الاكواد

 

ارجو حل المشكلة

بعمل كود يتم استداعة في جميع الحقول والكائنات النموذج بكود مختصر او اي حل بسيط عند الضغط على المفتاح المطلوب يتم نقلي او تنفيذ امر معين وانا في اي مكان في النموذج ولا يؤثر على عمل النموذج نفسة من ادخال البيانات او يتعارض مع اكواد اخرى

ولكم من كل الشكل والتقدير

مرفق ملف فيه جميع ماذكر

Key1.rar

Key1.accdb

 

رابط هذا التعليق
شارك

  • أفضل إجابة

وعليكم السلام ورحمه الله وبركاته 

تقدر تستخدم الطريقه دي هتعمل الداله دي فى module وتحفظها باي اسم 

بالطريقه دى يبقي حضرتك عملت ا

لكود مره واحده وبتستدعيه كل متحب

Public Function HandleKeyDown(KeyCode As Integer, Shift As Integer) As Integer

    If KeyCode = 115 Then ' F4

        Form_Form1.k1.SetFocus

        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي

    ElseIf KeyCode = 114 Then ' F3

        Form_Form1.k5.SetFocus

        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي

    Else

        HandleKeyDown = KeyCode ' لإعادة KeyCode الأصلي لتمكين إدخال البيانات في الحقل

    End If

End Function

هفترض أن لديك نموذج يحتوى على عده حقول 

k1,k2,k3,k4,k5 وعايز تطبق نفس الكود علي جميع هذه الحقول

هتعمل فى حدث keydown لكل حقل كالاتى 

Private Sub k1_KeyDown(KeyCode As Integer, Shift As Integer)

    KeyCode = HandleKeyDown(KeyCode, Shift)

End Sub



Private Sub k2_KeyDown(KeyCode As Integer, Shift As Integer)

    KeyCode = HandleKeyDown(KeyCode, Shift)

End Sub



Private Sub k3_KeyDown(KeyCode As Integer, Shift As Integer)

    KeyCode = HandleKeyDown(KeyCode, Shift)

End Sub



Private Sub k4_KeyDown(KeyCode As Integer, Shift As Integer)

    KeyCode = HandleKeyDown(KeyCode, Shift)

End Sub



Private Sub k5_KeyDown(KeyCode As Integer, Shift As Integer)

    KeyCode = HandleKeyDown(KeyCode, Shift)

End Sub
 

 

تم تعديل بواسطه ابوخليل
تنسيق الكود
  • Thanks 1
رابط هذا التعليق
شارك

في 14‏/7‏/2024 at 00:54, M.Abd Allah said:

Else

        HandleKeyDown = KeyCode ' لإعادة KeyCode الأصلي لتمكين إدخال البيانات في الحقل

الله عليك استاذنا @M.Abd Allah

فينك من زمااااان :clapping:

جيب لي راسك اقبلها 😘

بارك الله فيك وجزاك الله عني خير

شكرا لردك وكذلك انك خصصت من وقتك الثمين لأعطائي الحل

حفظك الله ورعاك وزادك الله نورا وعلما

  • Thanks 1
  • Haha 1
رابط هذا التعليق
شارك

5 دقائق مضت, qathi said:

الله عليك استاذنا @M.Abd Allah

فينك من زمااااان :clapping:

جيب لي راسك اقبلها 😘

بارك الله فيك وجزاك الله عني خير

شكرا لردك وكذلك انك خصصت من وقتك الثمين لأعطائي الحل

حفظك الله ورعاك وزادك الله نورا وعلما

ميرسي لكلامك ولذوقك تحت امرك احنا كلنا هنا فى خدمه بعض

رابط هذا التعليق
شارك

استاذنا @M.Abd Allah

ملاحظة بسيطة

وجدت عند استعمال هذا الكود انه يبطل عمل زر التاب Tab

فهل يوجد كود عند الضغط على هذا الزر التاب Tab يتم الانتقال الى الكائن او الحقل التالي او السابق بدون الحاجة الى استخدام كود سلكت التحديد

رابط هذا التعليق
شارك

منذ ساعه, qathi said:

استاذنا @M.Abd Allah

ملاحظة بسيطة

وجدت عند استعمال هذا الكود انه يبطل عمل زر التاب Tab

فهل يوجد كود عند الضغط على هذا الزر التاب Tab يتم الانتقال الى الكائن او الحقل التالي او السابق بدون الحاجة الى استخدام كود سلكت التحديد

طيب استخدم التعديل ده وقولي النتيجه

Public Function HandleKeyDown(KeyCode As Integer, Shift As Integer) As Integer
    If KeyCode = vbKeyTab Then ' Tab key
        HandleKeyDown = KeyCode ' احتفظ بالسلوك الافتراضي للتاب
    ElseIf KeyCode = 115 Then ' F4
        Form_Form1.k1.SetFocus
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
    ElseIf KeyCode = 114 Then ' F3
        Form_Form1.k5.SetFocus
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
    Else
        HandleKeyDown = KeyCode ' لإعادة KeyCode الأصلي لتمكين إدخال البيانات في الحقل
    End If
End Function
Private Sub k1_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k2_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k3_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k4_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k5_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub

 

تم تعديل بواسطه M.Abd Allah
رابط هذا التعليق
شارك

للرفع...

ممكن كود الانتقال التالية أو السابق عند الضغط زر التاب Tab الذي رقمه 9

.........


أعتذر استاذنا الغالي

بعد تحديث الصفحة ضهر ردك بعد ماقمت بارسال الرفع

ساقوم بتجربت الكود الجديد واوافيك بالنتيجة

رابط هذا التعليق
شارك

أعتذر استاذنا @M.Abd Allah

تناولت الافطار

قمت بتجربت الكود لا يعمل

54 دقائق مضت, M.Abd Allah said:
If KeyCode = vbKeyTab Then ' Tab key
        HandleKeyDown = KeyCode ' احتفظ بالسلوك الافتراضي للتاب

 

رابط هذا التعليق
شارك

22 دقائق مضت, qathi said:

للرفع...

ممكن كود الانتقال التالية أو السابق عند الضغط زر التاب Tab الذي رقمه 9

طيب جرب الكود ده كده عند الضغط علي تاب ومعاه شيفت هينقلك الحقل السابق وعند الضغط علي تاب فقط هينقلك علي الحقل التالي جرب ووافيني بالنتيجه

Public Function HandleKeyDown(KeyCode As Integer, Shift As Integer) As Integer
    If KeyCode = 9 Then ' Tab key
        If (Shift And acShiftMask) > 0 Then
            ' Shift + Tab (go to previous control)
            SendKeys "+{TAB}"
        Else
            ' Tab (go to next control)
            SendKeys "{TAB}"
        End If
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
    ElseIf KeyCode = 115 Then ' F4
        Form_Form1.k1.SetFocus
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
    ElseIf KeyCode = 114 Then ' F3
        Form_Form1.k5.SetFocus
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
    Else
        HandleKeyDown = KeyCode ' لإعادة KeyCode الأصلي لتمكين إدخال البيانات في الحقل
    End If
End Function
Private Sub k1_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k2_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k3_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k4_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub
Private Sub k5_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = HandleKeyDown(KeyCode, Shift)
End Sub

 

رابط هذا التعليق
شارك

15 دقائق مضت, M.Abd Allah said:
If KeyCode = 9 Then ' Tab key
        If (Shift And acShiftMask) > 0 Then
            ' Shift + Tab (go to previous control)
            SendKeys "+{TAB}"
        Else
            ' Tab (go to next control)
            SendKeys "{TAB}"
        End If
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي

أستاذنا الغالي قمت بتجربت الكود ولا يعمل

رابط هذا التعليق
شارك

16 دقائق مضت, M.Abd Allah said:

واضح اني كده مش فاهم قصد حضرتك 🌹🌹🌹

أستاذنا الغالي بارك الله فيك على مجهودك معايا

قمت بوضع الكود الأخير الذي اعطيتني في ملفي

40 دقائق مضت, M.Abd Allah said:
    If KeyCode = 9 Then ' Tab key
        If (Shift And acShiftMask) > 0 Then
            ' Shift + Tab (go to previous control)
            SendKeys "+{TAB}"
        Else
            ' Tab (go to next control)
            SendKeys "{TAB}"
        End If
        HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي

وقمت بالضغط على الازرار كما اشرت

ويضل المؤشر في مكانه ولا يتم الانتقال نهائيا سواء إلى الحقل التالي أو السابق

هل قمت بتجربت الكود بنفسك ؟؟؟

إذا قمت بتجربته ياريت ارفاق الملف حتى أرى أن كان هناك اختلاف أو أي أمر أخر

 

تم تعديل بواسطه qathi
رابط هذا التعليق
شارك

21 دقائق مضت, qathi said:

أستاذنا الغالي بارك الله فيك على مجهودك معايا

قمت بوضع الكود الأخير الذي اعطيتني في ملفي

وقمت بالضغط على الازرار كما اشرت

ويضل المؤشر في مكانه ولا يتم الانتقال نهائيا سواء إلى الحقل التالي أو السابق

هل قمت بتجربت الكود بنفسك ؟؟؟

إذا قمت بتجربته ياريت ارفاق الملف حتى أرى أن كان هناك اختلاف أو أي أمر أخر

 

بص حضرتك فالصوره كويس انا سبت الماوس خالص وانتقلت للحقول التاليه أو السابقه بالتاب أو بالتاب مع شيفت

QATHI.gif

QATHI-1.accdb

رابط هذا التعليق
شارك

كذلك بال f3 و f4

لكن انا واضح إن حضرتك تقصد حاجه تانيه غير اللي انا فهمته 

بعتذر الغي حضرتك تفعيل اجابه السؤال وإن شاء الله هيجي حد يفهم طلبك ويعمله

رابط هذا التعليق
شارك

 

منذ ساعه, M.Abd Allah said:

بص حضرتك فالصوره كويس انا سبت الماوس خالص وانتقلت للحقول التاليه أو السابقه بالتاب أو بالتاب مع شيفت

أستاذنا الغالي

قمت بتجربت الملف الذي ارسلته ويعمل بشكل طبيعي

لكن عند استخدام نفس الاكواد في ملفي بمديول  من الملف الذي ارسلته فانه يعمل كل شيء ماعد عند الضغط زر التاب TAB  أو زر الشفت والتاب TAB

فما أعرف هل هناك كود يتعارض ويوقف عمل الزرين من النموذج .. بالرغم عارف و متاكد أنه لا يوجد أو قد ربما هناك خيار من خصائص النموذج يسبب هذا .. لا أعلم

تمنيت أن اقتطع جزء من ملفي وارسله لك حتى ترى المشكلة لكن الامر لا ينفع

هل تعرف أستاذنا الغالي ما المشكلة ؟؟

رابط هذا التعليق
شارك

19 دقائق مضت, qathi said:

 

أستاذنا الغالي

قمت بتجربت الملف الذي ارسلته ويعمل بشكل طبيعي

لكن عند استخدام نفس الاكواد في ملفي بمديول  من الملف الذي ارسلته فانه يعمل كل شيء ماعد عند الضغط زر التاب TAB  أو زر الشفت والتاب TAB

فما أعرف هل هناك كود يتعارض ويوقف عمل الزرين من النموذج .. بالرغم عارف و متاكد أنه لا يوجد أو قد ربما هناك خيار من خصائص النموذج يسبب هذا .. لا أعلم

تمنيت أن اقتطع جزء من ملفي وارسله لك حتى ترى المشكلة لكن الامر لا ينفع

هل تعرف أستاذنا الغالي ما المشكلة ؟؟

استاذنا العزيز 

الملف اللي انا قمت بمشاركته هو نفس الملف المرفق من حضرتك فى مشاركتك ولكن انا غيرت اسمه حتي لا يحدث أي خطأ انا مغيرتش اي حاجه منه غير الداله

كون أن حضرتك عندك ملف عمل آخر وشاركت جزء منه فهذا ممن الممكن أن يكون هناك أي مشكله أما فى تطبيق الاكواد علي ملفك أو في خصائص النماذج

لا يستطيع أحد اكتشاف الخلل الا حضرتك لانك من يمتلك الملف

- لكن بشكل عام تقدر حضرتك تنسخ الداله اللي فالموديل فى موديل جديد ربما حضرتك نسخته في موديول قديم عندك في قاعده البيانات وفيه كود يتعارض مع عمل الكود 

- ثانيا تقدر تراجع جمل private sub keydown للحقول اللي حضرتك عايزها ربما في اختلاف في مسمياتها أو أنها مكرره فالنموذج أو ما شبه ذلك وإن شاء الله هتلاقيها اشتغلت معاك 

وارد جدا تلاقي تعارض في الاكواد عشان كده راجعها تاني بدقه 

رابط هذا التعليق
شارك

19 دقائق مضت, M.Abd Allah said:

لكن بشكل عام تقدر حضرتك تنسخ الداله اللي فالموديل فى موديل جديد ربما حضرتك نسخته في موديول قديم عندك في قاعده البيانات وفيه كود يتعارض مع عمل الكود 

- ثانيا تقدر تراجع جمل private sub keydown للحقول اللي حضرتك عايزها ربما في اختلاف في مسمياتها أو أنها مكرره فالنموذج أو ما شبه ذلك وإن شاء الله هتلاقيها اشتغلت معاك 

وارد جدا تلاقي تعارض في الاكواد عشان كده راجعها تاني بدقه

أستاذنا الغالي حفظك الله وزداك علما
أنا عارف أن حضرتك استخدمت الملف الذي قمت أنا بوضعة بالمشاركة

ساقوم بالتأكيد من ماأشرت لي

وأن شاء الله اكتشف حل

واذا لم ينفع سأرجع أن شاء الله اخبرك بالنتائج

اكرر شكري لك

 

 

 

تم تعديل بواسطه qathi
رابط هذا التعليق
شارك

أستاذنا الغالي @M.Abd Allah
اكتشفت المشكلة كانت فين

أمر بسيط لم انتبه له

وهو قمت بنفسي بتغيير عنوان الفانكشن ونسيت ما أقوم بتغييرها في باقي اكواد المديول نفسة مثل  مابعد Else

شكرا لك على سعت صدرك معي

وجزاك الله عني خيرا

HandleKeyDown

وتضل اشارة أفضل اجابة كما هي أفضل اجابه هي اجابتك السابقة

تم تعديل بواسطه qathi
رابط هذا التعليق
شارك

6 ساعات مضت, qathi said:

أستاذنا الغالي @M.Abd Allah
اكتشفت المشكلة كانت فين

أمر بسيط لم انتبه له

وهو قمت بنفسي بتغيير عنوان الفانكشن ونسيت ما أقوم بتغييرها في باقي اكواد المديول نفسة مثل  مابعد Else

شكرا لك على سعت صدرك معي

وجزاك الله عني خيرا

HandleKeyDown

وتضل اشارة أفضل اجابة كما هي أفضل اجابه هي اجابتك السابقة

الحمد لله ان حضرتك اكتشفت الغلط فين 

جل من لا يسهو ( محدش فينا كبني ادمين مبيغلطش )

☺️☺️ اما بالنسبه لسعه صدرى دي كانت عشان انت راجل محترم فكان حقك اني لازم ارد عليك قدام من الاول حاولت اساعد ومش عيب اني لما اوصل لنقطه اني مش فاهم السؤال او المشكله اسيب الطريق لغيري يكمل لأن موجود كتير جدا من هو افضل مني ( انا مجرد هاوي )

🥱🥱🥱 بالنسبه لأفضل اجابه دي 

فدي والله لم تعد تعنيني علي الاطلاق 🤓 

انا بجتهد لنفسي ( بحب اتحدي نفسي في صعوبات الاكسس ) 

تحياتي لشخصك

  • Like 1
رابط هذا التعليق
شارك

أستاذنا الغالي @M.Abd Allah
 

كيف يكون الكود في حالة استخدام زرارين معاً مثل الشفت وحرف ؤ  ( Shaft + C )  أو  ( Ctrl + B )

عند الضغط عليها معاً يقوم بتنفيذ أمر معين

 

رجعت لنفس الموضوع بعد فشل الكثير من المحاولات

وشكرا لك على جهدك الثمين في مساعدتي

تم تعديل بواسطه qathi
  • Like 1
رابط هذا التعليق
شارك

تفضل بالتوفيق

Shift: Shift = 1
Ctrl: Shift = 2
Alt: Shift = 4

If KeyCode = 66 And Shift = 1 Then
or
If KeyCode = vbKeyB And Shift = 1 Then


If KeyCode = 67 And Shift = 2 Then
or
If KeyCode = vbKeyc And Shift = 2 Then

 

  • Like 1
رابط هذا التعليق
شارك

6 ساعات مضت, qathi said:

أستاذنا الغالي @M.Abd Allah
 

كيف يكون الكود في حالة استخدام زرارين معاً مثل الشفت وحرف ؤ  ( Shaft + C )  أو  ( Ctrl + B )

عند الضغط عليها معاً يقوم بتنفيذ أمر معين

 

رجعت لنفس الموضوع بعد فشل الكثير من المحاولات

وشكرا لك على جهدك الثمين في مساعدتي

هتعدل الداله فقط بالشكل التالي 

Public Function HandleKeyDown(KeyCode As Integer, Shift As Integer) As Integer
    If (Shift And acShiftMask) > 0 Then ' إذا كان مفتاح Shift مضغوطًا
        Select Case KeyCode
            Case vbKeyC ' إذا كان المفتاح المضغوط هو C
                MsgBox "Shift + C تم الضغط على"
                HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
                Exit Function
        End Select
    ElseIf (Shift And acCtrlMask) > 0 Then ' إذا كان مفتاح Ctrl مضغوطًا
        Select Case KeyCode
            Case vbKeyB ' إذا كان المفتاح المضغوط هو B
                MsgBox "Ctrl + B تم الضغط على"
                HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
                Exit Function
        End Select
    Else
        Select Case KeyCode
            Case 115 ' F4
                Form_Form1.k1.SetFocus
                HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
            Case 114 ' F3
                Form_Form1.k5.SetFocus
                HandleKeyDown = 0 ' لمنع إدخال بيانات في الحقل الحالي
            Case Else
                HandleKeyDown = KeyCode ' لإعادة KeyCode الأصلي لتمكين إدخال البيانات في الحقل
        End Select
    End If
End Function

بقيت التكست بوكس كما هي 

  • Like 2
رابط هذا التعليق
شارك

شكرا لك اخي واستاذي @محمد احمد لطفى
 وشكرا لك أستاذي الغالي @M.Abd Allah
 

اشكركما على المساعدة

تنوع في الكود و أكثر من طريقة .. رائع جدا تسلم اياديكم اساتذتنا

بارك الله فيكما وجزاكم الله عنا خيرا

 

ساقوم بتجربتهما

تم تعديل بواسطه qathi
  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information