أحبائي
السلام عليكم ورحمة الله وبركاتة
أقدم لكم اليوم درس بسيط في تغيير العبارات التي تظهر على الزر لجعل العبارة تعبر عن شيء ما . فبدلا من ظهور كلمة نعم تظهر اطبع أو بدلا من لا ؛ تظهر لا تطبع أو احذف أو أي كلمة تراها مناسبة للسياق أكثر من ثوابت الأكسس طبعا الشرح والمثال مقدم من موقع استاذنا الجليل ومشرف منتدانا السابق ابو حمود موقع ابو حمود لتعليم الأكسيس العربي على هذا الرابط التحكم في العبارة الظاهرة على أزرار رسالة 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- بقية الأزرار إذا رغبت في تغيير عباراتها كالتالي :

مرفق مثال




