PDA

View Full Version : MsgBox فارسی



vadood
یک شنبه 16 شهریور 1382, 17:32 عصر
نمی دونم آیا راهی هست که MsgBox در .Net رو جوری تغییر داد که از راست به چپ بشه و دکمه های دارای caption فارسی بشن یا نه. احتمالا این کار رو برنامه نویس های وی بی قبلا یه جا انجام دادن و چیزی دارند.

اگه کسی کاری کرده لطفا به ما هم نتیجه اش را بده یا بگه چیکار کرده، اگه هم نه که خوب درست می کنیم!

<span dir=ltr>
--------------------------------------------
and the earth becomes my throne
</span>

Abbas Arizi
یک شنبه 16 شهریور 1382, 21:10 عصر
هر دو نسخه مربوط به VB6.0 و VB.NET رو میتونید از این سایت در پیت برداشت کنید
http://abbas.europe.webmatrixhosting.net/

vadood
یک شنبه 16 شهریور 1382, 23:17 عصر
آقا خیلی ممنون.

Abbas Arizi
یک شنبه 16 شهریور 1382, 23:31 عصر
خواهش می کنم.

vadood
دوشنبه 17 شهریور 1382, 14:37 عصر
چرا شما فرم ها را یونیکد ذخیره نکردین؟

Abbas Arizi
دوشنبه 17 شهریور 1382, 15:33 عصر
یعنی الان مشکلی داره؟ چون توی ویندوز فارسی فکر نمیکنم فرقی داشته باشه؟

مرتضی منافپور
سه شنبه 18 شهریور 1382, 12:52 عصر
msgbox " paygam",vbmsgboxright,"onvan

vadood
یک شنبه 23 شهریور 1382, 15:39 عصر
عباس جان،

تصور می کنم شما نسخه جدیدی از msg box را درست کردین و یونیکد save اش کردین چون دوباره گرفتمش و این بار فارسی را درست نشون میده. من خیلی کم وقت کردم تا نگاهی به کد بندازم. ممکنه توضیح بدی که برنامه ات چیکار می کنه؟

Abbas Arizi
یک شنبه 23 شهریور 1382, 15:44 عصر
توی این برنامه دوتا تابع CallBack وجود داره. اولی برای به دست آوردن Handle پنجره MessageBox بوسیله تابع SetWindowsHookEx استفاده میشه و دومی برای شمارش و به دست آوردن Handle کنترلهای فرزند که روی اون قرار دارند. بوسیله تابع GetClassName نوع اون کنترل فرزند تست میشه اگر یک Button بود بوسیله SetWindowText متن اون تغییر داده میشه.

Abbas Arizi
یک شنبه 23 شهریور 1382, 17:13 عصر
ضمنا من نسخه مربوط به #C این برنامه رو هم امروز آپلود کردم.
منتها کدش یه مقدار ناقصه. به خاطر این که #C پارامتر اختیاری نداره و به جای اون باید از توابع Overload استفاده کرد و اگر کسی احتمالا خواست از این برنامه استفاده کنه نوشتن این توابع به عهده خودشه.

sh
دوشنبه 24 شهریور 1382, 15:14 عصر
با اخذ اجازه از اساتید محترم می خواستم چند جمله ای راجب کادرهای مکالمه سفارشی توضیح بدم

ابتدا از منوی add windows form یک فرم جدید وارد پروژه نمائید بعد هر دکمه ای را روی فرم بگذارید و متن آن دکمه را فارسی نمائید مثل دکمه بلی یا انصراف و غیره و این کار با تنظیم خاصیت dialogresult هر دکمه صورت می گیرد و شما بر اساس جواب ارسالی از طرف دکمه تصمیم میگیرید
مثلا
[dim customfrm as new from
if customfrm .shodialog = dialogresult.ok then
msgbox(You Clicked Ok
)
Else
000000
End If

با تشکر شهریار

Abbas Arizi
دوشنبه 24 شهریور 1382, 15:54 عصر
بله. شهریار جان. با این روشی که شما گفتی میشه به سادگی یک MessageBox فارسی ساخت. حتی توی VB6.0 هم با یه کم کد بیشتر به راحتی این کار امکان پذیره. حتی با این روش میتونیم پیغامهای سفارشی قشنگی هم بسازیم.
اما هدف من از نوشتن این کد نسبتا پیچیده این بوده که خود MessageBox های استاندارد ویندوز رو فارسی کنیم تا وقتی یک کاربر این پیغام رو میبینه براش هیچ فرقی با سایر پیغامهایی که توی برنامه های دیگه میبینه نداشته باشه.

vadood
پنج شنبه 27 شهریور 1382, 07:46 صبح
عباس جان، کد فعلی شما با یونیکد کار نمی کنه، با تغییر اعلان زیر میشه از رشته های یونیکد هم استفاده کرد،



Declare Function SetWindowText Lib "user32" Alias "SetWindowTextW" _
&#40;ByVal hwnd As Integer, &lt;MarshalAs&#40;UnmanagedType.LPWStr&#41;> ByVal lpString As String&#41; As Integer


و یه چیز دیگه اینه که من می خواهم مثلا تو یه MsgBox با vbYesNo دکمه سمت راستی رو بلی کنم و سمت چپی را خیر. اما چون تو MsxBox اصلی قضیه بر عکس هست، اینجا نتیجه کلیک کردن "بلی" میشه vbNo , ...

vadood
پنج شنبه 27 شهریور 1382, 08:05 صبح
تازه، AcceptButton فرم هم همون قبلیه،

نمی شه با API اینو عوض کرد؟

Abbas Arizi
پنج شنبه 27 شهریور 1382, 20:12 عصر
توی این کد ما فقط متن Button ها رو تغییر میدیم و تغییر DialogResult فکر نمیکنم امکان داشته باشه. ولی شما یه کار ساده فکر میکنم بتونید به جای اون انجام بدید اگه نتیجه VbYes بود، کد NO رو بنویسید و بر عکس.
در مورد AcceptButton هم اگه دقیقا متوجه منظورتون شده باشم منظورتون DefaultButton هست. چون فکر نکنم MessageBox دارای AcceptButton باشه. :?:
اگر منظورتون همینه که فقط کافیه به آرگومان Style این فلگ رو اضافه کنید: MsgBoxStyle.DefaultButton2

habedijoo
چهارشنبه 04 خرداد 1384, 17:53 عصر
http://abbas.europe.webmatrixhosting.net/

با سلام به همه دوستان

من نمی توانم لینکی را که دوست عزیز گذاشتن باز کنم. اگر کسی این کار رو کرده فایلها رو برای دانلود

اینجا بزاره . با تشکر فراوان .

linux
چهارشنبه 04 خرداد 1384, 20:43 عصر
این یک کلاس هست که اینکار را انجام میده اگر کسی مشکلی داشت بگه!




Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports System.Text

Public Class FarsiMessageBox
Private Delegate Function CallBack_WinProc&#40;ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer&#41; As Integer
Private Delegate Function CallBack_EnumWinProc&#40;ByVal hWnd As Integer, ByVal lParam As Integer&#41; As Integer

&lt;DllImport&#40;"user32.dll"&#41;> _
Private Shared Function GetWindowLong&#40;ByVal hwnd As Integer, ByVal nIndex As Integer&#41; As Integer
End Function
&lt;DllImport&#40;"kernel32.dll"&#41;> _
Private Shared Function GetCurrentThreadId&#40;&#41; As Integer
End Function
&lt;DllImport&#40;"user32.dll"&#41;> _
Private Shared Function SetWindowsHookEx&#40;ByVal idHook As Integer, ByVal lpfn As CallBack_WinProc, ByVal hmod As Integer, ByVal dwThreadId As Integer&#41; As Integer
End Function
&lt;DllImport&#40;"user32.dll"&#41;> _
Private Shared Function UnhookWindowsHookEx&#40;ByVal hHook As Integer&#41; As Integer
End Function
&lt;DllImport&#40;"user32.dll", CharSet&#58;=CharSet.Auto&#41;> _
Private Shared Function SetWindowText&#40;ByVal hwnd As Integer, ByVal lpString As String&#41; As Integer
End Function
&lt;DllImport&#40;"user32.dll"&#41;> _
Private Shared Function EnumChildWindows&#40;ByVal hWndParent As Integer, ByVal lpEnumFunc As CallBack_EnumWinProc, ByVal lParam As Integer&#41; As Integer
End Function
&lt;DllImport&#40;"user32.dll"&#41;> _
Private Shared Function GetClassName&#40;ByVal hwnd As Integer, ByVal lpClassName As StringBuilder, ByVal nMaxCount As Integer&#41; As Integer
End Function
Shared TopCount As Integer
Shared ButtonCount As Integer

Private Const GWL_HINSTANCE As Integer = &#40;-6&#41;
Private Const HCBT_ACTIVATE As Integer = 5
Private Const WH_CBT As Integer = 5

Private Shared hHook As Integer

Shared strCaption1 As String = ""
Shared strCaption2 As String = ""
Shared strCaption3 As String = ""

Shared Function ShowMessage&#40;ByVal hParent As Integer, ByVal Prompt As String, Optional ByVal Title As String = "", Optional ByVal buttons As MessageBoxButtons = MessageBoxButtons.OK, _
Optional ByVal icon As MessageBoxIcon = MessageBoxIcon.None, Optional ByVal DefaultButton As MessageBoxDefaultButton = MessageBoxDefaultButton.Button1, _
Optional ByVal options As MessageBoxOptions = MessageBoxOptions.RtlReading, Optional ByVal m As MsgBoxStyle = MsgBoxStyle.ApplicationModal&#41; As DialogResult
'

Dim hInst As Integer
Dim Thread As Integer
TopCount = 0
ButtonCount = 0
Select Case buttons
Case MessageBoxButtons.AbortRetryIgnore
strCaption1 = "رها کردن"
strCaption2 = "کوشش مجدد"
strCaption3 = "چشم پوشی"
Case MessageBoxButtons.OK
strCaption1 = "تایید"
Case MessageBoxButtons.OKCancel
strCaption1 = "تایید"
strCaption2 = "لغو"
Case MessageBoxButtons.RetryCancel
strCaption1 = "کوشش مجدد"
strCaption2 = "لغو"
Case MessageBoxButtons.YesNo
strCaption1 = "بله"
strCaption2 = "خیر"
Case MessageBoxButtons.YesNoCancel
strCaption1 = "بله"
strCaption2 = "خیر"
strCaption3 = "لغو"
Case MessageBoxButtons.OK
strCaption1 = "تایید"
End Select

If Title = "" Then Title = Application.ProductName

Dim myWndProc As CallBack_WinProc = New CallBack_WinProc&#40;AddressOf WinProc&#41;

hInst = GetWindowLong&#40;hParent, GWL_HINSTANCE&#41;
Thread = GetCurrentThreadId&#40;&#41;
hHook = SetWindowsHookEx&#40;WH_CBT, myWndProc, hInst, Thread&#41;

'Return MessageBox.Show&#40;Prompt, Title, buttons, icon, DefaultButton, options &#41;
Return MsgBox&#40;Prompt, buttons + icon + DefaultButton + MsgBoxStyle.MsgBoxRight + options + m, Title&#41;
End Function

Private Shared Function WinProc&#40;ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer&#41; As Integer
Dim myEnumProc As CallBack_EnumWinProc = New CallBack_EnumWinProc&#40;AddressOf EnumWinProc&#41;
If uMsg = HCBT_ACTIVATE Then
EnumChildWindows&#40;wParam, myEnumProc, 0&#41;
UnhookWindowsHookEx&#40;hHook&#41;
End If
Return 0
End Function

Private Shared Function EnumWinProc&#40;ByVal hWnd As Integer, ByVal lParam As Integer&#41; As Integer
Dim strBuffer As StringBuilder = New StringBuilder&#40;256&#41;
TopCount += 1
GetClassName&#40;hWnd, strBuffer, strBuffer.Capacity&#41;
Dim ss As String = strBuffer.ToString&#40;&#41;
If &#40;ss.ToUpper&#40;&#41;.StartsWith&#40;"BUTTON"&#41;&#41; Then
ButtonCount += 1
Select Case ButtonCount
Case 1
SetWindowText&#40;hWnd, strCaption1&#41;
Exit Select
Case 2
SetWindowText&#40;hWnd, strCaption2&#41;
Exit Select
Case 3
SetWindowText&#40;hWnd, strCaption3&#41;
Exit Select
End Select
End If
Return 1
End Function
End Class

Amir Taghavi
پنج شنبه 28 مهر 1384, 13:39 عصر
باسلام این کد را امتحان کردم ولی در خطوطی که &lt;DllImport("user32.dll") نوشته شده خطای سینتاکس می گیرد
لطفا مرا راهنمایی کنید
با تشکر - امیر

vbapr2005
جمعه 29 مهر 1384, 10:25 صبح
با سلام به دوستان عزیز
اولا من هم مثل هابدی جو نمیتونم توی http://abbas.europe.webmatrixhosting.net/ برم
ثانیا من اگه باشم از روش شهریار استفاده می کنم، خیالم هم راحت. خب، البته سعیم رو می کنم که بیشترین تشابه رو بین Msgbox خودم و استاندارد بوجود بیارم
آخه میدونید چیه بچه ها؟
مشکل اینه که کادر های پیغامی هم که برنامه های خیلی معروف استفاده میشه هم بعضیاشون استاندارد نیستن

مثل همین Internet Explorer که من دارم استفاده می کنم. که اولاش میاد میگه اطلاعاتی که داری استفاده می کنی ممکنه که دیده بشن و از این حرفا... . تو همین MessageBox ما یه Check Box هم میبینیم

یا مثلا تو اکسس ما مسج باکس هایی می بینیم که در اونها از 2 تا خط متفاوت استفاده شده

به علاوه به نظر من که اگه ما خودمون یه قرم مسج باکس بسازیم که از MessageBox استاندارد قشنگ تر و کاملتر باشه بهتره

habedijoo
یک شنبه 01 آبان 1384, 10:49 صبح
سلام

من هدایت عابدی جو هستم نه هابدی جو .. اشتباه کردم و از ابتدا h , و abedijoo را سرهم نوشتم .

راستی راهی داره که نام user رو عوض کرد .

vbapr2005
دوشنبه 02 آبان 1384, 12:45 عصر
خیلی شرمندم :ناراحت:
راستش رو بخوای برای من هم خیلی عجیب بودش که یکی فامیلش «هابدیجو» باشه، اما آخه میدونی؟ انقدر فامیل عجیب آدم میبینه که دیگه فکر می کنه یکی ممکنه هر فامیلی یی داشته باشه. آخه تو هم که دقیقا User name ت همین بود دیگه منم گفتم حتما فامیلیش همینه دیگه...خلاصه معذرت میخوام.

habedijoo
دوشنبه 02 آبان 1384, 15:05 عصر
سلام

من هم نظرم اینه که خودمون یه کنترل برای Msgbox فارسی بنویسیم . چه نیازی هست که حتما زبان Msgbox موجود رو عوض کنیم .
من قبلا یه چیزی نوشته بودم که گذاشتمش توی سایت . اگر همه موافقن این کار رو ادامه بدیم تا یه چیزه مناسب از توش در بیاد .

amin_programmer
چهارشنبه 04 آبان 1384, 16:38 عصر
سلام و با اجازه از اساتید سایت

من قبلا این کار رو برای برنامه های خودم کرده بودم و تو برنامه هام استفاده می کردم حالا هم یه فایل مثال همراه با کنترل خودم اینجا می زارم امیدوارد خوشتون بیاد و استفاده بکنید

اگه هم مشکی چیزی داشت یا تغییری باید انجام شود بگید درست کنم

http://my.opera.com/amin.programmer/homes/blog/aMin.MessageBox.GIF

لینک دانلود (http://my.opera.com/amin.programmer/homes/blog/aMin.MessageBox.rar)

habedijoo
چهارشنبه 04 آبان 1384, 17:26 عصر
دوست عزیز amin_programmer سلام

دستت درد نکنه . خیلی هم جالب و عالی بود .
اگر چیزی نیاز داشت تا کامل بشه حتما نظراتمون رو می گیم تا به یه نتیجه خوب برسیم .

یه چیزی که بهش اضافه بشه بهتر میشه اینه که موقع انتخاب آیکون و دکمه ها دقیقا شبیه Msgbox منوی کشویی باز شود و ما از آن انتخاب کنیم . اگر خودتون این کار رو بلیدن به کدتون اضافه کنید وگر نه بگید تا یه مثال کوچولو براتون بزارم .


(باز هم متشکر از اینکه دست رنج خودت را در اختیار بقیه قرار دادی . :تشویق: )

amin_programmer
چهارشنبه 04 آبان 1384, 17:42 عصر
یه چیزی که بهش اضافه بشه بهتر میشه اینه که موقع انتخاب آیکون و دکمه ها دقیقا شبیه Msgbox منوی کشویی باز شود و ما از آن انتخاب کنیم . اگر خودتون این کار رو بلیدن به کدتون اضافه کنید وگر نه بگید تا یه مثال کوچولو براتون بزارم .
اگه بزاید که ممنون میشم