السبت , نوفمبر 23 2024

تصميم شريط القوائم في الاكسيس Ribbon

يشتكى الكثير من صعوبه عمل القوائم الخاصه به فى الاكسس 2007 و 2010 و الاصدارات الاحدث نظرا لانهم اعتمدوا على شئ جديد مختلف عما سبق يعتمد عمل القوائم فى تلك الاصدارات على XML

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

الاول يجب عمل جدول و نسميه USysRibbons يراعى اسم الجدول بنفس الشكل ونفس الحروف و يجب ان يكون بهذا الاسم لانه من جداول النظام و ينظر اليه البرنامج عند البدايه و قبل ان نحفظ هذا الجدول يجب علينا اظهار جداول النظام نفسها بالضغط بزر الماوس الايمن علي All Tables ثم اختيار Navigation Options

كما بالصوره

AutonumberID
TextRibbonName
MemoRibbonXml

و تكون به تلك الحقول بنفس الاسماء

الاول هو مجرد ترقيم تلقائ لعدد القوائم التى سوف تعملها

الثانى هو اسم القائمه

الثالث و هو من نوع ميمو لتخزين كود xml بداخله

عملنا الجدول خلاص

نبتدى نكتب كود xml فى اى مكان حتى لو النوت باد

وممكن نعمل نموذج ياخد بياناته من هذا الجدول لتحرير الكود من خلاله

كود xml مشابه لاكواد html

أول سطر يجب كتابته هو


<customui xmlns="http://schemas.microsoft.com/office/2009/07/customui">
</customui>

و يجب طبعا غلقه



و بعده نكتب داخل نفس الكود و تحت السطر الاول هذا الكود


<ribbon startfromscratch="true">
</ribbon>

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

اما اذا كان الاختيار false فسوف يعرض القوائم الموجوده مسبقا بالاضافه للقوائم المعموله منك

بعد كده نبتدى عمل التاب tabs

و بداخلها اكثر من تاب


<tabs>
<tab id="Tab1" label=" Tab_1">
</tab>
</tabs>

و نلاحظ وجود id & label داخل التاب

id و يجب ان يكون وحيدا unique و لا يتكرر

label و نضع فيها الاسم المراد ظهوره على التاب

ملاحطة التاب المقصود به اسم القائمة مثل Home – insert-Create

طيب نجرب كده و نشوف

و علشان النتيجه تظهر

هانعمل حاجه صغيره

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

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

بعد ذلك نغلق القاعدة ثم نعيد فتحها

و نفتح النموذج فى وضع التصميم

و عند خصائص النموذج فى تاب other او اخرى

سنجد خانه بها ribbon name و نختار منها اسم الريبون الذى صنعناه

طيب هذا التاب هو الذى سنضع بداخله الـ buttons

طيب ما احنا ممكن نريد ان نقسم الازرار الى مجموعات

بمعنى اخر مجموعه خاصه بالنماذج و مجموعه خاصه بالتقارير و هكذا

و هذا يأتى عن طريق تقسيم التاب الى مجموعات groups

و لكى نفعل ذلك نضع الكود التالى بعد سطر <tab>


<group id="group1" label="Group_1">
</group>

و كما سبق id يجب ان يكون متفرد (اى لا نسمى جروب اخر بنفس الاسم)

label هو الكلام الذى سيظهر للتعريف بالجروب

و طبعا نكرر الكود لعمل اكثر من Group

ده الشكل المبدئي للكود


<customui xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startfromscratch="true"> 
<tabs>
<tab id="Tab1" label=" Tab_1">
<group id="group1" label="Group_1">
</group>
</tab>
<tab id="Tab2" label="Tab_2">
<group id="group2" label="Group_2">
</group>
</tab>
</tabs>
</ribbon>
</customui>

 ملاحظ أن:

  1. اي ID بيكون unique
  2. لما بتفتح Tag  لازم تقفله

كده تقريبا ناقصنا ايه بقى

ايوه صح الازرار التى سوف نستعملها لكى نتحكم فى برنامجنا

الكود الخاص بأضافه الـ button سيكون كالتالى

و نضعه بعد تاج الـ group



كما هى العاده

id سيكون اسم لا يتكرر

label هو الكلام الذى سيكون على الزر

و لكن تلاحظون هنا شئ مختلف اننا لم نقفل تاج الbutton بالشكل التالى </button>

و انما وضعنا / فى نهايه التاج

هنا صنعنا button

و طبعا ممكن نكرره مثل ما نريد

نستكمل موضوع الـbutton

لكى يعطينا الbutton تأثير هناط طريقتان لفعل ذلك

الاولى  عن طريق ماكرو Macro

او عن طريق كتابة كود VBA داخل Module

الطريقه الاولى عن طريق الماكرو

بكل بساطه نعمل ماكرو و نسميه myBut1 يفعل اى شئ و ليكن message box تعرض رساله hello this is button 1 click

خلصنا الماكرو و حفظناه

نذهب بعد ذلك الى كود الـ xml الخاص بنا

و الى وسم الـ button فى اخره نكتب

onAction=”اسم الماكرو”

ليصبح كالتالى



هناك شئ زياده فى الكود و هو “size = “large و هذا لاختيار حجم الbutton و جعلناه هنا large

طيب لو نريد الطريقه الاخره و هى عن طريق كتابة الكود

يبقى الاول هانعمل new module و نسميه myrib مثلا

و بداخله نكتب الداله التى سوف تنفذ عندما نضغط على الـ button

و لتكن داله بسيطه تفتح نموذج اخر

ستكون الداله كالتالى

public fuction pressMe()
docmd.openform "myform1"
end function

بعد ذلك نذهب الى تاج الbutton (و ليكن button اخر غير الموجود سابقا)

و نكتب فى اخره


<button id="but2" label="click me(function)" onaction="=pressMe()">
</button>

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

, و بكده يصبح لدينا الكود التالى من اول ما بدأنا


<customui xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startfromscratch="true">
<tabs>
<tab id="tab1" label="tab_1">
<group id="group1" label=" group_1">
<button id="but1" label="click me(macro)" onaction="myBut1" size="large">
</button><button id="but2" label="click me(function)" onaction="=pressMe()">
</button></group>
<group id="group2" label="group_2">
</group>
</tab>
</tabs>
</ribbon>
</customui>

لوضع الصور على الزرار :

فى البدايه نصنع مجلد جديد و نسميه images و نضعه مع بداخل المجلد المحتوى لقاعدة البيانات الخاصه بنا

و نضع به الصور الخاصه بنا

بعد ذلك نذهب لكود الريبون و فى اول سطر خاااالص , فاكرينه نضيف المقطع التالى “loadImage=”OnLoadImage

و هو بكل بساطه يخبر البرنامج ان الصور لكى تظهر يجب ان تنفذ الداله OnLoadImage

يبقى شكل السطر الاول


<customui <customui="" xmlns="http://schemas.microsoft.com/office/2009/07/customui" loadimage="OnLoadImage">  
</customui>

يبقى كده ناقص ايه

تمام كد الداله OnLoadImage

و طبعا سوف نكتبها فى الموديول الذى سبق و صنعناه

و تلك الداله تكون كالتالى

(Public Sub OnLoadImage(strImage As String, ByRef Image
    Dim strPath As String
    ' construct a path
    strPath = CurrentProject.Path & "\images\" & strImage
    ' make sure the file exists
    (Debug.Assert (Len(strPath) > 0
    ' return the image
    (Set Image = LoadPicture(strPath
End Sub

و هى بكل بساطه تخبر البرنامج ان الصوره المطلوبه موجوده مع المشروع فى مجلد اسمه images

كده يبقى ناقص اخر شئ

و هو اختيار الصوره ووضعها

يبقى نروح للسطر الخاص بالـ button

و نضيف التالى ليصبح السطر كاملا كالتالى


<button id="but2" label="click 22" image="bell.bmp" onaction="==">
</button>

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

الف مبروك الريبون الخاص بك

و طبعا مرفق المثال التطبيقى للتحميل