التحكم في العبارة الظاهرة على أزرار رسالة Msgbox

يمكن تغيير العبارات التي تظهر على الزر لجعل العبارة تعبر عن شيء ما . فبدلا من ظهور كلمة نعم تظهر اطبع أو بدلا من لا ؛ تظهر لا تطبع أو احذف أو أي كلمة تراها مناسبة للسياق أكثر من ثوابت الأكسس . أنظر الصورة :

أنشئ وحدة نمطية عامة ثم فيها اكتب التالي :

Public Ok, Cancel, ABORT
Public RETRY, IGNORE, YES, NO

Private m_hHook As Long

Private Const IDOK = 1
Private Const IDCANCEL = 2
Private Const IDABORT = 3
Private Const IDRETRY = 4
Private Const IDIGNORE = 5
Private Const IDYES = 6
Private Const IDNO = 7

Private Const WH_CBT = 5
Private Const GWL_HINSTANCE = (-6)
Private Const HCBT_ACTIVATE = 5

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                  (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" _
                  (ByVal hDlg As Long, ByVal nIDDlgItem As Long, _
                  ByVal lpString As String) As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
     (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _
     ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _
                  (ByVal hHook As Long) As Long


Public Sub MessageBoxH(hwndThreadOwner As Long)

   Dim hInstance As Long
   Dim hThreadId As Long
  
   hInstance = GetWindowLong(hwndThreadOwner, GWL_HINSTANCE)
   hThreadId = GetCurrentThreadId()

   m_hHook = SetWindowsHookEx(WH_CBT, AddressOf _
   MsgBoxHookProc, hInstance, hThreadId)

End Sub

Private Function MsgBoxHookProc(ByVal uMsg As Long, ByVal _
wParam As Long, ByVal lParam As Long) As Long
     
   If uMsg = HCBT_ACTIVATE Then
      SetDlgItemText wParam, IDOK, Ok
      SetDlgItemText wParam, IDCANCEL, Cancel
      SetDlgItemText wParam, IDABORT, ABORT
      SetDlgItemText wParam, IDRETRY, ABORT
      SetDlgItemText wParam, IDIGNORE, ABORT
      SetDlgItemText wParam, IDYES, YES
      SetDlgItemText wParam, IDNO, YES
    
       UnhookWindowsHookEx m_hHook
   End If
   MsgBoxHookProc = False

End Function

ولاستدعاء الدالة اكتب في حدث نقر زر أمر مثلا :

Ok = "أطبع"
Cancel = "لا ماله داعي"

MessageBoxH Me.hwnd
If MsgBox("رسالة .......", vbOKCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "عنوان") = vbOK Then
' ثم بقية الأمر .

End If


ملاحظات هامة :
1- أطول عبارة ممكن إظهارها على الزر هي ما يقارب 22 حرف مثل بسم الله الرحمن الرحيم .
2- القيم العائدة من الرسالة حسب الزر الذي وضعت له العبارة ففي المثال السابق القيم العائدة هي VbOk أو vbCancel أو ما يقابلها في الأرقام .
3- بقية الأزرار إذا رغبت في تغيير عباراتها كالتالي :

الزر الثابت القيمة الراجعة رقما
Ok vbOK 1
Cancel vbCancel 2
ABORT vbAbort 3
RETRY vbRetry 4
IGNORE vbIgnore 5
YES vbYes 6
NO vbNo 7

لاحظ أن الأرقام الراجعة تعتمد على الأسطر السبعة ابتداء من السطر الرابع في كود الوحدة النمطية الأولى .

مثال بالأكسس 97

الأمثلة مضغوطة

تحتاج إلى برنامج فك الضغط

انقر هنا لتحميل البرنامج

مثال بالأكسس 2000