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

شرح : القائمة المختصرة Shortcut Menu المستوى المتقدم قوائم متعددة المستويات وربطها بصلاحيات المستخدمين


Amr Ashraf

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

السلام عليكم .. الاخوة الأعزاء 

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

1565955392_.gif.d67fa5b00f781253e39c1d2bfb1c0d19.gif

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

ويمكنك ايضا استعراض هذا الموضوع لتطبيقات مختلفة على القائمة المختصرة

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

التطبيق الاول : كيف يتم ربط القائمة المختصرة بالكائنات Objects الموجودة بقاعدتك ( نماذج - تقارير- استعلامات - ماكروهات )

مثال :

1216347175_AllObjects.gif.1d84ed698cbfebc795f65e31da14b541.gif

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

المثال الخاص بها مرفق بإسم Amr Multi Level Menu-All Objects .

عيوب الطريقة : انها ستعرض لك الكثير من الكائنات التى لن تحتاجها فى القاعدة مثل النماذج الفرعية و ماكروهات الالحاق والتحديث والحذف Append,Update,Delete , مما يأخذنا للتطبيق الثاني .

3dlat.net_16_16_ffd5_e26b3f1529b51.gif.b6fc416f2dc339750e78da6446fa1b7f.gif

التطبيق الثانى :

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

مثال:

709678358_SomeObjects.thumb.gif.a961e08c9eb8ce77e0a95f03e8f44334.gif

المثال الخاص بها مرفق بإسم Amr Multi Level Menu-Some Objects .

3dlat.net_16_16_ffd5_e26b3f1529b51.gif.b6fc416f2dc339750e78da6446fa1b7f.gif

التطبيق الثالث : يعتمد هذا التطبيق بربط التطبيق الثانى بصلاحيات المستخدمين, افترضت فى المثال ان عندى 3 مجموعات رئيسية للمستخدمين اول مجموعة Admins او المدراء ولهم كافة الصلاحيات , المجموعة الثانية المستخدم العادى ولهم بعض الصلاحيات , المجموعة الثالثة الضيوف ولهم صلاحية واحدة فقط وهو عرض الشاشة الرئيسية او نموذج واحد مثلا , ويتم تحديد المجموعات التى لها صلاحية استعراض الكائنات فى سجل بجانب اسم الكائن ونوعه فى الجدول TblConditions .

مثال :

Users.thumb.gif.2fc30bab44b2d9866d7076c8003d4b0d.gif

 

ملاحظة : القائمة الأخيرة " صنعت خصيصاً " جعلتها حصراً على الAdmins فقط وبالتالى لن تظهر لباقى المجموعات .

ستجد المثال الخاص بهذا التطبيق باسم  Amr Multi Level Menu-Some Objects - Users - V2.0 .

وبهذا انتهى الموضوع .

ملاحظات عامة :

  • استوحيت فكرة القائمة المتعددة المستويات من شخص اجنبى اسمه MaJip وقمت ببناء افكارى عليها .
  • يمكن استدعاء القائمة عند فتح النموذج او عند النقر على الصورة الموجودة فى الامثلة ومرفق الطريقتين استخدم ما يناسبك .
  • القوائم التى تنحدر منها قوائم اخرى لا يمكن تخصيص ايقونة لها ولكن القوائم الفرعية يمكن تخصيص ايقونة لها سواء عن طريق خاصية Face ID او عن طريقة خاصية Picture لارفاق صورة خارجية .
  • فكرة صلاحيات المستخدمين طلبها الأخ @عمر ضاحى وبالتالى صممتها وارفقتها للموضوع .

أستاذنا @jjafferr يرجى مراجعة الموضوع وتصحيح ما أخطأت به ان وجد 😅 جزاكم الله خير :fff:

الأخ العزيز @ابو جودي اعتذر عن استخدام مثالك لأنى كنت قد جهزت الامثلة المستخدمة بالفعل .. جزاك الله خير :fff:

دمتم بخير

3dlat.com_16_19_47c2_2fd4917c83c72.gif.861edf914433d40fef02620113b73684.gif

 

Amr Multi Level Menu -All Objects.accdb Amr Multi Level Menu-Some Objects - Users - V2.0.accdb Amr Multi Level Menu-Some Objects.accdb

تم تعديل بواسطه Amr Ashraf
توضيح بالعنوان
  • Like 2
  • Thanks 4
رابط هذا التعليق
شارك

سؤال لولبي كده

With cbMenu1.Controls.Add(Type:=msoControlPopup)
.Caption = "About"
Set menultems1 = .Controls.Add(Type:=msoControlButton): menultems1.Caption = "عن البرنامج1": menultems1.OnAction = "TestAbout1"
Set menultems1 = .Controls.Add(Type:=msoControlButton): menultems1.Caption = "عن البرنامج2": menultems1.OnAction = "TestAbout1"
End With

كيف يمكن ادارج هذا السطر التالى 

(msoControlButton, 2188, , , True)

فى الكود الاول 

علشان اظهر ايكونه لهم

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

15 دقائق مضت, عمر ضاحى said:
Set menultems1 = .Controls.Add(Type:=msoControlButton): menultems1.Caption = "عن البرنامج1": menultems1.OnAction = "TestAbout1"

قصدك الطريقة دى ؟

ممكن كده جرب

Set menultems1 = .Controls.Add(Type:=msoControlButton): menultems1.Caption = "عن البرنامج1": menultems1.OnAction = "TestAbout1": menultems1.FaceID=2188

 

7 دقائق مضت, Amr Ashraf said:

علشان اظهر ايكونه لهم

وركز فى موضوع الاستاذ جعفر فيه كل المعلومات بس محتاج تركيز وتشغيل دماغ شوية 😅

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

4 دقائق مضت, Amr Ashraf said:

قصدك الطريقة دى ؟

ممكن كده جرب

Set menultems1 = .Controls.Add(Type:=msoControlButton): menultems1.Caption = "عن البرنامج1": menultems1.OnAction = "TestAbout1": menultems1.FaceID=2188

 

وركز فى موضوع الاستاذ جعفر فيه كل المعلومات بس محتاج تركيز وتشغيل دماغ شوية 😅

انا بالفعل عملت كل حاجه بالاكواد وفعلت نظام الصلاحيات لكن كنت عاوز اعرف كيف اجعل القوائم دينماكيه 

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

 

 

والحمد لله اشتغل الكود كده على اكمل وجه 

باقى ان اشوف كيف ممكن استفيد من القائمه التلقائيه دي ^_^

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

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

 

 

Amr Multi Level Menu-Some Objects - Users - V3.0.accdb

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

53 دقائق مضت, عمر ضاحى said:

(اضافة ايقونه من خارج الاكسيس)

فى الموديول اضف الكود التالى :

  Dim picPicture As IPictureDisp
  Set picPicture = stdole.StdFunctions.LoadPicture("D:\1.bmp")

وفى القائمة اللى انتا عاوز ليها الايقونة الكود هيكون بالشكل التالى ...

      With cbObjectCtrl
       
       .Caption = rsForms!Name
       .Tag = rsForms!Name
       .OnAction = "OpenForm"
       .Picture = picPicture ' هذه هى الصورة الخارجية

ومرفق الصورة المستخدمة فى المثال نزلها و عدل المسار فى الكود .

ملاحظات :

يجب ان تكون الصورة امتداد Bmp وحجمها مقارب للصورة المرفقة .

1.bmp 1783766372_AmrMultiLevelMenu-AllObjects.accdb

تم تعديل بواسطه Amr Ashraf
توضيح
  • Thanks 1
رابط هذا التعليق
شارك

6 ساعات مضت, Amr Ashraf said:

فى الموديول اضف الكود التالى :

  Dim picPicture As IPictureDisp
  Set picPicture = stdole.StdFunctions.LoadPicture("D:\1.bmp")

وفى القائمة اللى انتا عاوز ليها الايقونة الكود هيكون بالشكل التالى ...

      With cbObjectCtrl
       
       .Caption = rsForms!Name
       .Tag = rsForms!Name
       .OnAction = "OpenForm"
       .Picture = picPicture ' هذه هى الصورة الخارجية

ومرفق الصورة المستخدمة فى المثال نزلها و عدل المسار فى الكود .

ملاحظات :

يجب ان تكون الصورة امتداد Bmp وحجمها مقارب للصورة المرفقة .

1.bmp 5.02 kB · 4 downloads 1783766372_AmrMultiLevelMenu-AllObjects.accdb 2.36 \u0645\u064a\u062c\u0627 \u0628\u0627\u064a\u062a · 5 downloads

 

اولا باشكر حضرتك 

وفهمت فكرتك 

لكن لما حبيت اعملها بطريقتي شويه ظهر معي خطا 

انا عملت مجلد اسمه ICONS جنب ملف البرنامج 

ووضعت فيه الصورة التى فى الموضوع 

وعملت متغير 

Dim cbMenu1 As CommandBar
Dim menultems1 As CommandBarControl

Dim picPicture As IPictureDisp
Dim FPath, SFileName10 As String

FPath = CurrentProject.Path
SFileName10 = FPath & "\ICONS\10.bmp"
Set picPicture = stdole.StdFunctions.LoadPicture(SFileName10)
'Debug.Print FPath
'Debug.Print SFileName10
Debug.Print picPicture

Set menultems1 = cbMenu1.Controls.Add(msoControlButton, picPicture, , , True): menultems1.BeginGroup = True: menultems1.Caption = "تغير المستخدم": menultems1.OnAction = "cmdChangeUser"

 

كما هو موضح 

وبالنسبه لل picPicture

حبيت اعرف ايه ال بيحصل فيها 

وكانت ان هناك قيمه متغيره فى كل مره يتم تحميل الصوره (طلبها)

uoBMWxf.png

لكن الصوره لم يتم تحميلها 

ووجدة ان اصلا القائمة اختفت 

 

هنا استنتج ان انا عكيت الدينا 

بس حابب اعرف ايه الغلط هنا 

ام انى وضعت الكود غلط

 

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

Set menultems1 = cbMenu1.Controls.Add(msoControlButton).Picture = picPicture10: menultems1.BeginGroup = True: menultems1.Caption = "تغير المستخدم": menultems1.OnAction = "cmdChangeUser"

hi8cTZk.png

ظهر مكان الزرار 

لكن لا توجد اى شئ مكتوب او حتى الاكشن الخاص به لا يعمل

كانه لم يكن

 

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

تم حل المشكله وعرفت اين خطئى

حيث انى نسيت ان اضيف اسم عنصر التحكم (المعرف او مدري شنو اسمه) ^_^

المهم الصحيح هكذا

Set menultems1 = cbMenu1.Controls.Add.Picture = picPicture10: menultems1.BeginGroup = True: menultems1.Caption = "تغير المستخدم": menultems1.OnAction = "cmdChangeUser": menultems1.Picture = picPicture10

 

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

في 19‏/2‏/2022 at 16:08, Amr Ashraf said:

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

طبعاً موضوع رائع مشكور اخوي

وكان عندي طلب حابب استغل هالطريقة بية

انا بستخدم cascading combo box وبتوصل ل 3 مستويات .. طبعاً 3 مستويات يعني 3 جداول مابينهم علاقه one to many

هل اقدر استخدم طريقة ال context menu مع ال 3 جداول؟ 

مثل الصورة المرفقة ..

image.png.e097c6078339943d04e90bacc9a07b81.png

 

ولو ينفع، هل في امكانية ايضاً ان الاختيار الى اختارتة كل level يتحط في textbox كل مستوي 

مرفق نسخة من قاعدة البيانات للتجربة

officena-example.accdb

 

شكراً مرة ثانية وفي انتظار ردكم

 

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

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