اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

القائمة المختصرة - Shortcut menu


jjafferr

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

السلام عليكم 🙂

 

هناك الكثير من الميزات/الاوامر التي يعطينا برنامج الاكسس ، والتي يمكن ان نعمل لها بديل ، ولكن يكون هناك فرق في سرعة تنفيذ كودنا مقارنة مع الكود الاصل من الاكسس !!

مثل القائمة المختصرة التي تظهر لنا بالنقر على زر الفأرة الايمن ، والتي بها يمكننا ان نستغني عن الكثير الاوامر ، مثل الفرز والتصفية بأنواعه ،

ولكن وللأسف الشديد ، فأنا ارى ان 99.99% من البرامج ، يتم حذف هذه القائمة وعدم تفعيلها ، والسبب ان المستخدم يستطيع ان يدخل في تصميم النموذج من خلال هذه الاوامر(في الدائرة الحمراء) :

 

 image.png.30c9131ee4df6299009a1fb9cc5739db.png  و  image.png.88f47eb9f596b9330dbcf9e272ff9d7b.png    

.

ويضطر المبرمج ان يعوض بقية الاوامر في القائمة ، بمجموعة من الازرار ، او بطرق مختلفة !!

-----------------------------------------------------------------------------------------------

 

الاكسس يسمح لنا ان نعمل قوائم مختصرة Shortcut Menu والتابعة لمجموعة  CommandBars ، حسب احتياجنا ، ونختار ما نضعه فيها 🙂

هناك 3 انواع من هذه القوائم :

الثابته ، والمؤقته ، والمؤقته التي تحتاج الى كود.

الثابته:

وهي التي عندما نعملها ، تصبح مستقله عن الكود ، وتُحفظ وتبقى في قاعدة البيانات بعد إغلاقها ، ويمكننا ان نستوردها في قاعدة بيانات اخرى عندما نستورد احد/جميع كائنات قاعدة البيانات الآخرى ، بإستخدام :

image.png.f0046b41187da5f52f55380345bec2d0.png

.

ونختارها في النموذج :

image.png.8d5036f08914654a91bad6666c90c0da.png

.

او التقرير :

image.png.bb976cdf3daebb0d5f3f73ad3b12b6a3.png

.

هذا مثال لعمل الكود الاساس لعمل قائمة قطع/نسخ/لصق :  image.png.ce24b55a15afad7be06ecd1ec3c5145a.png

Option Compare Database
Option Explicit

    Dim cmb As Object
    Dim cmbCtrl As Object
    Dim cmbName As String
'

'
' to use:
' Dim cbr As Commandbar
' Dim cbrButton as CommandbarControl
'
' we have to select in the References:
' Microsoft Office xx.x Object Library
'


Public Function SCM_Copy(Optional DeleteMe As Boolean = False)
    
    On Error Resume Next 'If menu with same name exists delete
    cmbName = "cmb_Copy"
    CommandBars(cmbName).Delete
    If DeleteMe = True Then Exit Function
    If Err.Number <> 0 Then Err.Clear
    
    Set cmb = CommandBars.Add(cmbName, msoBarPopup, False, False)
    
        With cmb
          .Controls.Add msoControlButton, 21, , , False   ' Cut
          .Controls.Add msoControlButton, 19, , , False   ' Copy
          .Controls.Add msoControlButton, 22, , , False   ' Paste
      End With
      
  Set cmb = Nothing
    
End Function

.

وشرح الكود :

1. اسم القائمة المختصرة ، والتي سوف نختارها في النموذج او التقرير ،

2. هذه المجموعة الاساس منبثقة Popup ،

3. بينما هذه المجموعات عبارة عن ازرار Buttons ، وقد تكون قائمة منسدلة Combobox ، او نص Edit نُدخل فيه قيمة معينة للتصفية مثلا ،

4. هل هذه القائمة مؤقته ؟ False معناها ثابته وتُحفظ في قاعدة البيانات ، بينما True معناها انها مؤقته وتعمل لما ننادي الوحدة النمطية/الكود ،

5. هذه ارقام كل امر ، وملف الاكسل المرفق من مايكروسوفت فيه جدول يضم جميع ارقام الاوامر للاكسس 2010 () ،

6. اذا اردنا ان نحذف هذه القائمة ، فننادي الوحدة النمطية بضم True في امر المناداة

image.png.50645596f9d8e4a18dde56ab520b2284.png

 

 

 

المؤقته: ونستعمل True في مكان الرقم 4 اعلاه.

وهي التي عندما نعملها ، لا تصبح مستقله عن الكود ، ولا تبقى في قاعدة البيانات بعد إغلاقها ، ولا يمكننا ان نستوردها في قاعدة بيانات اخرى عندما نستورد احد/جميع كائنات قاعدة البيانات الآخرى (كما هو الحال مع القائمة الثابته) ، ويجب ان نستخدم "حدث فتح" النموذج/التقرير لعملها واستخدامها في النموذج/التقرير ، و "حدث اغلاق" النموذج/التقرير لحذفها ،

 

طيب ، خلونا نعمل هذه القائمة image.png.70983566e7670ae04e62755d42c6bfe7.png

Public Function SCM_Copy_Sort(Optional DeleteMe As Boolean = False)

    On Error Resume Next 'If menu with same name exists delete
    cmbName = "cmb_Copy_Sort"
    CommandBars(cmbName).Delete
    If Err.Number <> 0 Then Err.Clear
    
    Set cmb = CommandBars.Add(cmbName, msoBarPopup, False, False)
    
        With cmb
            Set cmbCtrl = .Controls.Add(msoControlButton, 21, , , False)    ' Cut
                cmbCtrl.Caption = "Cut..."
                cmbCtrl.FaceId = 21
            
            Set cmbCtrl = .Controls.Add(msoControlButton, 19, , , False)    ' Copy
                cmbCtrl.Caption = "Copy..."
                cmbCtrl.FaceId = 19
            
            Set cmbCtrl = .Controls.Add(msoControlButton, 22, , , False)    ' Paste
                cmbCtrl.Caption = "Paste..."
                cmbCtrl.FaceId = 22
                
                
            Set cmbCtrl = .Controls.Add(msoControlButton, 210, , , False)  'Sort Ascending
                cmbCtrl.BeginGroup = True
                cmbCtrl.Caption = "فرز تصاعدي..."
                cmbCtrl.FaceId = 210
                
            Set cmbCtrl = .Controls.Add(msoControlButton, 211, , , False)  'Sort Decending
                cmbCtrl.Caption = "فرز تنازلي..."
                cmbCtrl.FaceId = 211

      End With
  Set cmb = Nothing
    
End Function

.

وشرح الكود:

احنا توسعنا في الكود الاساسي ، واضفنا له :

1. تسمية اختيارية غير الافتراضية ، لاحظ في الصورة اعلاه اني استعملت الانجليزي والعربي ،

3. وهو لعمل خط فاصل في الصورة بين مجموعة قطع/نسخ/لصق ومجموعة فرز تصاعدي/تنازلي ،

image.png.5e21855688fbc4833f4cc9112b173d2f.png

.

2. ممكن ان نبدل الصورة الافتراضية التي تيجي مع الرقم ، بتبديل هذا الرقم (لاحظ صورة الاسهم للتصاعدي/التنازلي) : image.png.34b0108440bd60b0132636a0922b0943.png

image.png.ba37749ac14acab9e891430af341e770.png

.

ومرفق ارقام جميع الصور الموجودة في الاكسس :

FaceID_01.jpg.dca5ba2ebbc2778ac774996878abc551.jpg

.

FaceID_02.jpg.e10f8dceaa35f0f6471903f1b8225bbb.jpg

.FaceID_03.jpg.53f3661fea229f5cf1f26f1ace39cf68.jpg

.FaceID_04.jpg.463be04cd9d166dae8b87da60a6eff16.jpg

.FaceID_05.jpg.565647f4493560daf0453a40313238c0.jpg

.FaceID_06.jpg.6c27411b7fb69ffde24c24f6fcef3e1c.jpg

.FaceID_07.jpg.3fe8cfd5fbf68ad3e6ab3935d1d1d99c.jpg

.FaceID_08.jpg.ecc7750506787a8929525bf59ef4be6a.jpg

.FaceID_09.jpg.cd51cf59942be230a01f0d0226820d2c.jpg

.FaceID_10.jpg.1a78194464f0aafa5b1920ae3d9678d2.jpg

.FaceID_11.jpg.88c898ad7610cf815267e2e02eb88362.jpg

.

 

في قاعدة البيانات المرفقة myRight_Click.mdb ، بالاضافة الى القوائم الثابته اعلاه ، تم اضافة هذه القائمة ايضا :

image.png.fda938e17c7c7d3bab669534fb8c5191.png

.

والتقرير يحتوي على القائمة المؤقته التالية :

image.png.dbc1ebcfe5f24758e5f8acf4702ae98b.png

.

- ملف الاكسل myList.xlsx ، اخترت فيه اهم القوائم في وجهة نظري ، 

- ملف الاكسل AccessControls_2010.xlsx ، من مايكروسوفت ، يحتوي على جميع الاوامر 🙂

 

جعفر

 

المصادر:

http://dev-soln.com/access-shortcut-right-click-tool/

https://www.experts-exchange.com/articles/12904/Understanding-and-using-CommandBars-Part-II-Creating-your-own.html

https://filedb.experts-exchange.com/incoming/2014/02_w06/833359/CommandBars-II.mdb

https://www.experts-exchange.com/articles/18341/CommandBars-Part-III-Using-Built-in-Shortcut-Menus.html

http://www.skrol29.com/us/vtools.php

 

 

 

AccessControls_2010.xlsx

myList.xlsx

myRight_Click.zip

  • Like 20
  • Thanks 10
رابط هذا التعليق
شارك

جزاك الله خيرا استانا الفاضل

الحقيقة كنت اصمم القوائم المحتصرة التي احتاجها في اكسيس 2003 ثم استوردها للبرنامج

الآن بعد أن وفرت لنا هذا الكود الاكثر من رائع لتصميم القوائم بسلاسة فلست في حاجة الى الطريقة القديمة

فجزاك الله خيرا استانا الفاضل

تحياتي

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

شكرا لك أستاذنا

ماذا عن القوائم المنسدلة مثل قائمة ملف و تعديل و ...

كيف يمكن عمل قوائم تتنقل بالمستخدم بين عناصر قاعدة البيانات كالنماذج و التقارير؟ و تكون بجوار القوائم الموجودة تحت مسمى وظائف إضافية

جزيل الشكر

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

السلام عليكم

أستاذ جعفر موضوع في قمة الروعة

ملاحظة صغيرة في الكود الموضوع بالأعلى :

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

Public Const msoBarPopup = 5
Public Const msoControlButton = 1
Public Const msoControlEdit = 2
Public Const msoControlComboBox = 4
Public Const msoButtonUp = 0
Public Const msoButtonDown = -1

أخيرا لي الشرف العظيم أن أقوم بتثبيت هذا الموضوع

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

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

جزاكم الله عنا كل خير اخوانى واساتذتى

تقبلوا تحياتى وتمنياتى لكم بالتوفيق

طبتم واهتديتم

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

  • 2 weeks later...

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

وأمدكم بالصحة والعافية أعواما عديدة وأزمنة مديدة.

 

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

  • 2 weeks later...
  • 1 month later...
  • 2 years later...
في 1‏/7‏/2022 at 23:23, RaDwAn00 said:

اخي @jjafferr السلام عليكم

عند تغيير الكلمات cut,copy,paste الى اللغه العربيه تبقى الكلمات نفسها في النموذج بالرغم من تغييرها في المودل

هل هنالك مشكلة ؟

ارجو مساعدتكم اخوتي 

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

  • 1 month later...
في 2‏/7‏/2022 at 00:23, RaDwAn00 said:

هل هنالك مشكلة ؟

وعليكم السلام 🙂

لا توجد مشكلة ، فمثالي اعلاه يحتوي على كلمات عربية ايضا ،

اعمل مثالك ، واحفظ البرنامج ، ثم افتح برنامج الآخر واستورد منه هذه القائمة ، وستكون باللغة العربية 🙂

 

وحتى اذا اردت استعماله نفس قاعدة البيانات ، فترى من الملاحظة في الكود بأنه سيحذف القائمة السابقة والتي هي بنفس الاسم، ويستبدلها بالقائمة الجديدة :

في 1‏/1‏/2020 at 23:56, jjafferr said:
On Error Resume Next 'If menu with same name exists delete

 

جعفر

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

  • 7 months later...
في 13‏/8‏/2022 at 07:13, jjafferr said:

وعليكم السلام 🙂

لا توجد مشكلة ، فمثالي اعلاه يحتوي على كلمات عربية ايضا ،

اعمل مثالك ، واحفظ البرنامج ، ثم افتح برنامج الآخر واستورد منه هذه القائمة ، وستكون باللغة العربية 🙂

 

وحتى اذا اردت استعماله نفس قاعدة البيانات ، فترى من الملاحظة في الكود بأنه سيحذف القائمة السابقة والتي هي بنفس الاسم، ويستبدلها بالقائمة الجديدة :

 

جعفر

استاذ جعفر اريد تطبيق الفكرة علي قاعدة البيانات الخاصة بي وانا كتبت الاكود التي احتاج اليه هيا تعمل معي فقط عند استدعاء الكود باضافة كود عند الفتح 

لاكن انا اريد انا تستدعي عند شريط القوائم المختصرة  مثل الصورة ---

وارجو ان تعرفني الطريقة لو امكن

image.png.bb976cdf3daebb0d5f3f73ad3b12b6a3.png

تجريبي.accdb

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

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.

×
×
  • اضف...

Important Information