السلام عليكم ورحمة الله وبركاته
هل فكرت يوما أن تستغني عن شريط أوامر الأكسيس ؟
هل فكرت أن تخصص شرائط أدواتك وتجعلها مباشرة على النموذج ؟
هل فكرت أن تجعل برنامجك أشبه بما يبرمج بالفيجوال بيزك ؟
في الحقيقة الأكسيس لا يدعم شرائط الأدوات مباشرة على النموذج , وما سأقدمه لك إنما هو حيلة مبتكرة لجعل النموذج في الأكسيس شبيه بنظيره في الفيجوال بيزك , بحيث يمكنه أن يتضمن شريط قوائم الأوامر .
وما عليك إلا اتباع الخطوات التالية خطوة خطوة :
في البداية سنحتاج إلى نموذج منبثق نجعل منه خلفية التطبيق وعليه سنضع شرائط الأدوات
1- إنشاء النموذج :
• أنشئ نموذجا بسيطا , واختر له الخصائص التالية :
- مصدر السجل : لاشيء
- أشرطة التمرير : لاهذا ولا ذاك
- محددات السجلات : لا
- أزرار التنقل : لا
- الخطوط المقسمة : لا
- منبثق : نعم
سنحتاج إخفاء الأكسيس و تكبير النموذج ليملأ الشاشة , ولذلك :
• أدرج الكود التالي في وحدة النموذج النمطية :
كود
Option Compare Database
Option Explicit
Private Const SW_HIDE = 0 'تصريح ثوابت النظام
Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Sub Form_Load()
' دوال لإخفاء الأكسيس
fSetAccessWindow (SW_SHOWMINIMIZED)
fSetAccessWindow (SW_HIDE)
End Sub
'إجراء عند الضغط للزر إغلاق
Private Sub Bt_quit_Click()
DoCmd.Quit
End Sub
ولكوننا استدعينا دالة إخفاء الأكسيس والتي مرجعها API فإنه توجب إضافة الكود التالي إلى وحدة نمطية ولتكن mduAPI
كود
Option Compare Database
Private Const SW_HIDE = 0
Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Declare Function apiShowWindow Lib "user32" _
Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Function fSetAccessWindow(nCmdShow As Long)
Dim WaX As Long
Dim Waform As Form
On Error Resume Next
Set Waform = Screen.ActiveForm
If err <> 0 Then
If nCmdShow = SW_HIDE Then
Else
WaX = apiShowWindow(hWndAccessApp, nCmdShow)
err.Clear
End If
Else
If nCmdShow = SW_SHOWMINIMIZED And Waform.Modal = True Then
ElseIf nCmdShow = SW_HIDE And Waform.PopUp <> True Then
Else
WaX = apiShowWindow(hWndAccessApp, nCmdShow)
End If
End If
fSetAccessWindow = (WaX <> 0)
End Function
• كما سنحتاج إلى كائن تسمية ليحمل القائمة المنسدلة , لذلك أنشئ هذا الكائن باختياره من مربع الأدوات وخصصه ليظهر بالشكل الذي يروقك

ولإدراج قوائم الأوامر سنحتاج لاستثمار الإمكانية التي يوفرها الأكسيس :
2- إنشاء قائمة الأوامر المخصصة :
اضغط بالزر الأيمن على شرائط الأدوات الأكسيس واختر تخصيص كما يتضح من الصورة التالية
ستظهر لك مربع حوار التخصيص حيث ستختار جديد لإنشاء قائمة جديدة :

واختر اسما للقائمة الجديدة ولتكن مثلا Pers1

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

ويمكنك إضافة ما شئت من الأدوات باختيارها من مربع حوار التخصيص وذلك عن طريق السحب والإفلات

بالطبع نحن سنحتاج إلى تخصيص أوامرنا بعيدا عما يقترحه الأكسيس من أوامر نمطية , لذلك سحبت الأمر مخصص لأنه غير مجهز بأي أمر مسبق وسنحتاج إلى تغيير خصائصه ليناسب مطالبنا :
3- تخصيص الأوامر :
في البداية نغير الإسم :
- اضغط بزر الماوس الأيمن فوق الأمر الجديد فتظهر لك قائمة منسدلة من الأوامر اختر الإسم وغيره إلى " الحافظة "

سنحاج لإضافة إجراء إلى الأمر الجديد :

وهذا يعني أنه توجب علينا إنشاء الدالة LanceBN() التي ستستدعي الحافظة التي يدعمها نظام الوندوز :"Notepad.exe
4- إنشاء وحدة نمطية خاصة بالدوال التي ستنفذ عند إجراء النقر على الأوامر المخصصة :
في وحدة نمطية نسميها مثلا : mduFunct
نكتب الكود التالي للدالة LanceBN()
كود
Public Function LanceBN()
Shell "notepad.exe"
End Function
ويمكن أن نضيف ما شئنا من الأوامر إلى الشريط بتكرار نفس الخطوات السابقة .ولضيف مثلا أمرا لاستدعاء الآلة الحاسبة التي يدعمها النظام بالدالة ()LanceClc بإضافة الكود التالي إلى الوحدة النمطية
كود
Public Function LanceClc()
Shell "Calc.exe"
End Function
والآن سنحتاج إلى تحويل الشريط إلى قائمة , وبالطبع سنحتال للأمر بأن نجعل الشريط قائمة مختصرة Menu Contextuel..
5- جعل الشريط منبثق
اختر خصائص ليظهر المربع التالي :

ااختر منبثق فيختفي شريط الأدوات وهذا يعني أنه تحول إلى قائمة مختصرة يمكن إظهارها بالطريقة Methode
كود
CommandBars("pers1").ShowPopup x,y
حيث تحسب الإحداثيات x,y على الشاشة بالبيكسل .
لكن مع الأسف الأكسيس لايدعم هذا النوع من الوحدات .
والإحداثيات بالأكسيس تحسب بالتويب twips . وهنا ستسعفنا دوال Windows application programming interface (API) على اعتبار أن
كود
1twips = 1/1400 pouces
لذلك سنحتاج إلى التصريح بالدوال التالية قي وحدة نمطية , ولنسمها مثلا mduAPI
كود
Public Type pointapi
X As Long
Y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" (lpPoint As pointapi) As Long
Public Declare Function setCursorPos Lib "user32" (lpPoint As pointapi) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
كما سنحتاج إلى إضافة الكود التالي إلى إجراء الضغط بزر الماوس على كائن التسمية
كود
Private Sub تسمية2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim PT As pointapi
Dim NbPointParPouceX As Long, NbPointParPouceY As Long
GetCursorPos PT 'دالة استدعاء موقع تأثير الماوس
NbPointParPouceX = GetDeviceCaps(GetDC(0), 88)
NbPointParPouceY = GetDeviceCaps(GetDC(0), 90)
'دالة استدعاء قائمة الأوامر المنسدلة عند موقع تأثير زر الماوس
CommandBars("pers1").ShowPopup PT.X - (X / (1440 / NbPointParPouceX) - 50), PT.Y + (تسمية2.Height / (1440 / NbPointParPouceY)) - Y / (1440 / NbPointParPouceY)
End Sub
وهكذا بالضغط بزر الماوس على كائن التسمية تظهر القائمة المختصرة ويصبح الناتج كشريط أدوات مخصص مرتبط بالنموذج وقد غيبنا الأكسيس وشرائطه تماما
وفي المرفقات مثال للتفحص مع التوفيق
مع تحيات أخيكم أبو تماضر
الملفات المرفقة
MBarOnFRM.rar ( 34.2ك )
عدد مرات التنزيل: 3170