PDA

View Full Version : يك اشكال در MSGBOx فارسي



سيد محمد علي رحيمي
چهارشنبه 08 آبان 1387, 12:02 عصر
باسلام
من از يك اسكين در فرمو خودم استفاده كنم وقتي مسج بوكس فعال مي شه اسكين فرم نيز بر روي آن اعمال مي گردد ولي وقتي از مسيج بوكس فارسي استفاده مي كنم فرم مسيجبكس ساده نمايش داده مي شه يعني بدون اسكين نمي دونم
مشكل از كجاست لطفا راهنماييم كنيد
ممنون
راستي اينم كدها كه در يك ماژول نوشته شده


Option Explicit

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

'UDT for passing data through the hook
Private Type MSGBOX_HOOK_PARAMS
hwndOwner As Long
hHook As Long
End Type

'need this declared at module level as
'it is used in the call and the hook proc
Private MSGHOOK As MSGBOX_HOOK_PARAMS

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Public Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function MessageBox Lib "user32" _
Alias "MessageBoxA" _
(ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType 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 SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long

Public Function MsgBox(Prompt, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Tiltle = "", Optional HelpFile, Optional Context) As Long

'Wrapper function for the MessageBox API
Dim hwndThreadOwner As Long
Dim frmCurrentForm As Form
Set frmCurrentForm = Screen.ActiveForm

hwndThreadOwner = frmCurrentForm.hwnd
Dim hInstance As Long

Dim hThreadId As Long
Dim hwndOwner As Long
hwndOwner = GetDesktopWindow()
hInstance = GetWindowLong(hwndThreadOwner, GWL_HINSTANCE)
hThreadId = GetCurrentThreadId()
'
With MSGHOOK
.hwndOwner = hwndOwner
.hHook = SetWindowsHookEx(WH_CBT, _
AddressOf MsgBoxHookProc, _
hInstance, hThreadId)
End With



MsgBox = MessageBox(hwndThreadOwner, Prompt, Tiltle, Buttons)

End Function


Public Function MsgBoxHookProc(ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

If uMsg = HCBT_ACTIVATE Then

SetDlgItemText wParam, vbYes, "بله"
SetDlgItemText wParam, vbNo, "خير"
SetDlgItemText wParam, vbIgnore, "ناديده گرفتن"
SetDlgItemText wParam, vbOK, "تاييدÏ"
SetDlgItemText wParam, vbCancel, "لغو"
SetDlgItemText wParam, vbRetry, "تكرار مجدد"
SetDlgItemText wParam, vbAbort, " حذف كردن "
UnhookWindowsHookEx MSGHOOK.hHook

End If

MsgBoxHookProc = False

End Function




نمي دونم چه كاري بايد انجامداد تا مسيج بوكس فارسي نيز اسكين رو قبول كنه :متفکر:

Dr.Bronx
چهارشنبه 08 آبان 1387, 18:33 عصر
شما چرا خودتون رو اذيت مي كنيد
با اين ابزار خيلي راحت مي تونين msgbox فارسي داشته باشين
من خودم به شخصه استفاده كردم و مي كنم خيلي عاليه
كار جناب mbt925

http://mbt925.googlepages.com/MBMsgbox120ScrShot.jpg

لينك دانلود (http://mbt925.googlepages.com/MBMsgbox120Sample.rar)

saeedmontazer
چهارشنبه 08 آبان 1387, 19:22 عصر
بعضی وقت ها هم حرف "ک" مشکل درست میکنه!




شما چرا خودتون رو اذيت مي كنيد
با اين ابزار خيلي راحت مي تونين msgbox فارسي داشته باشين
من خودم به شخصه استفاده كردم و مي كنم خيلي عاليه
كار جناب mbt925




ببخشید یه توضیح کامل درباره استفاده از این ocx میدین؟؟؟

من هرگز نتونستم از ocx های msgbox استفاده کنم...با همه جور ocx میتونم کار کنم ولی چند نمونه msgbox دانلود کردم ولی نتونستم استفاده کنم!

منظورم اینه که چطور میتونم برای دکمه های msgbox (بله,خیر) متغیر تعریف کرد؟؟؟!

کمــــــــک

Dr.Bronx
چهارشنبه 08 آبان 1387, 19:41 عصر
اگه بدونين كار با اين چقدر راحته ولش نمي كنين
منم فكر مي كردم اين خيلي بايد پيچيده باشه
ولي ديدم نه خيلي راحت تر از اين حرفاست
تازه مثله msgbox خود وي بي نمي خواد براي نتيجه متغير تعريف كنيم

يك كنترل رو روي فرمتون قرار بديد به طور پيشفرض MsgBoxX1 ايجاد ميشه

به طور مثال مي خواين از كار بپرسين كه آيا اطلاعاتي كه وارد كرده صحيح هست و مي خواد كه در ديتابيس ذخيره بشه اينطور عمل مي كنيم


MsgBoxX1.button = balekhair
MsgBoxX1.icon = InformationX
MsgBoxX1.text = "آيا مي خوايد تغييرات را ذخيره كنيد ؟"
MsgBoxX1.title = "سوال"
MsgBoxX1.show

من فكر مي كردم اينكه خيلي مسخره است هي خط خط بشه بعد ديدم نه اتفاقا اينجوري بهتره
خودمون مي فهميم چي داريم ميزنيم مثله اون يكي وي بي نيست
حالا براي اين كه نتيجه رو ببينيم
كه آيا كاربر بر روي بله كليك كرده يا روي خير اينطور عمل مي كنيم - البته نسبت به مثالي كه من گفتم
توي همه حالات مي شه استاده كرد


if MsgBoxX1.result = Bale then
............
.................
...........................
...........
else
...................
.
..........
.
end if

saeedmontazer
چهارشنبه 08 آبان 1387, 20:54 عصر
ممنون..بالاخره تونستم استفاده کنم..

هوراااا

سيد محمد علي رحيمي
پنج شنبه 09 آبان 1387, 08:10 صبح
با تشكر از جناب mbt925 بخاطر راهنمايي ارزندشون
فقط اين ocx يك مشكل داره اونم اينكه نميشه براش مثل مسيج بوكس اصلي صدا گذاشت
راه حله شو برام لطفا بزارين

Black_Strom
پنج شنبه 09 آبان 1387, 11:59 صبح
ممنون . اما بر خی کار ها را بزارین واسه فروش حیفه منظورم این تاپیک نیست کلا می گم

Dr.Bronx
پنج شنبه 09 آبان 1387, 15:53 عصر
ممنون . اما بر خی کار ها را بزارین واسه فروش حیفه منظورم این تاپیک نیست کلا می گم

شما چه علاقه اي به خريد و فروش داريد !!!
اسم اينجا رو گذاشتن
مرجع تخصصي برنامه نويسان
خوب اينجوري بود مي ذاشتن
مرجع خريد و فروش برنامه نويسان