شاطر
اذهب الى الأسفل
عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
معاينة صفحة البيانات الشخصي للعضو

كتابة الأرقام العربية ( الهندية ) دون الحاجة لتغيير إعدادات الويندوز

في الإثنين أكتوبر 15, 2012 10:17 am
--------------------------------------------------------------------------------

بسم الله الرحمن الرحيم
موضوعنا هو الحاجة لكتابة الأرقام العربية دون الحاجة لجعل المستخدم يقوم بتغيير إعدادات الويندوز لتغيير شكل الأرقام .
فمثلا عند عمل برامج للأطفال مثلا فليس من المنطقى ان يقوم الطفل بتغيير إعدادات الوينوز لتغيير شكل الأرقام ( إن كان الطفل يعرف أن يقوم بهذا أصلا)
المهم : ملخص الموضوع فى الدالة ChrW
تقوم هذه الدالة بعرض الحرف الموافق لكود معين مثلا:

الكود:

ChrW(&H660)========= 0
ChrW(&H661)========= 1
ChrW(&H662)========= 2
ChrW(&H663)========= 3
ChrW(&H664)========= 4
ChrW(&H665)========= 5
ChrW(&H666)========= 6
ChrW(&H667)========= 7
ChrW(&H668)========= 8
ChrW(&H669)========= 9
بمعنى أنك اذا اردت أن تظهر رقم (9) بالعربى فى تكست بوكس مثلا أكتب الأمر التالى :

الكود:

TextBox1.Text = ChrW(&H669)
ملحوظة : فى المرفقات يوجد ملف مضغوط به أربع ملفات PDF تحتوى على بقية أكواد الحروف و العلامات العربية

ملحوظة هامة جدا : عند تحويل الأرقام للعربية بهذا الشكل ( العربى / الهندى) لن يمكنك إجراء أية عمليات حسابية عليها كما سنرى فى المثال :


الكود:

TextBox1.Text = ChrW(&H669) 

Msgbox ( Val ( TextBox1.Text ) )                        ========= 0
Msgbox ( Integer . Parse ( TextBox1.Text ) )      ========= 0

كما تلاحظ بالرغم من أن التكست بوكس بها رقم (9) إلا الفيجوال ستوديو لن يرى إلا لأن قيمتها هى (صفر) فما الحل ؟؟؟؟
قد قمت بعمل دالتين :
الأولى اسمها ArText و هى تستخدم فى التحويل من الأرقام بالشكل العربى إلى الأرقام بالشكل الإنجليزى


الكود:

Public Function ArText(ByVal texto As String) As String
        'Dim lang As InputLanguage
        Dim i As Integer
        Dim LongText As String = ""
        For i = 1 To texto.Length
            'If lang.CurrentInputLanguage.Culture.TwoLetterISOLanguageName = "ar" Then
            If Mid$(texto, i, 1) = "0" Then LongText = LongText & ChrW(&H660)
            If Mid$(texto, i, 1) = "1" Then LongText = LongText & ChrW(&H661)
            If Mid$(texto, i, 1) = "2" Then LongText = LongText & ChrW(&H662)
            If Mid$(texto, i, 1) = "3" Then LongText = LongText & ChrW(&H663)
            If Mid$(texto, i, 1) = "4" Then LongText = LongText & ChrW(&H664)
            If Mid$(texto, i, 1) = "5" Then LongText = LongText & ChrW(&H665)
            If Mid$(texto, i, 1) = "6" Then LongText = LongText & ChrW(&H666)
            If Mid$(texto, i, 1) = "7" Then LongText = LongText & ChrW(&H667)
            If Mid$(texto, i, 1) = "8" Then LongText = LongText & ChrW(&H668)
            If Mid$(texto, i, 1) = "9" Then LongText = LongText & ChrW(&H669)
        Next
        Return LongText
        'End If
   
End Function

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


الكود:

Public Function EnText(ByVal texto As String) As String
        Dim i As Integer
        Dim LongText As String = ""
        For i = 1 To texto.Length
            If Mid$(texto, i, 1) = ChrW(&H660) Then LongText = LongText & "0"
            If Mid$(texto, i, 1) = ChrW(&H661) Then LongText = LongText & "1"
            If Mid$(texto, i, 1) = ChrW(&H662) Then LongText = LongText & "2"
            If Mid$(texto, i, 1) = ChrW(&H663) Then LongText = LongText & "3"
            If Mid$(texto, i, 1) = ChrW(&H664) Then LongText = LongText & "4"
            If Mid$(texto, i, 1) = ChrW(&H665) Then LongText = LongText & "5"
            If Mid$(texto, i, 1) = ChrW(&H666) Then LongText = LongText & "6"
            If Mid$(texto, i, 1) = ChrW(&H667) Then LongText = LongText & "7"
            If Mid$(texto, i, 1) = ChrW(&H668) Then LongText = LongText & "8"
            If Mid$(texto, i, 1) = ChrW(&H669) Then LongText = LongText & "9"
        Next
        Return LongText
    End Function

يمكنك وضع هاتين الدالتين فى موديول وقم بإستدعائهم عندما تريد كما فى المثال التالى

الكود:


Textbox1.Text=ArText("5")  ========= 5

أما إذا أردنا أن نضرب الرقم 9 × 5 مثلا و نريد إظهار الناتج بالشكل العربى فى التكست بوكس وان فنكتب المعادلة بالشكل التالى :

الكود:

Textbox1.Text= ArText ( EnText ( TextBox1.Text )  *  5
)فقد قمنا أولا بتحويل الرقم المكتوب فى التكست بوكس إلى الشكل الانجليزى ثم قمنا بضرب الرقم فى 5 ثم قمنا بتحويل الناتج الى الشكل العربى
================================================== =============
ماذا لو أردنا أن يقوم البرنامج بتحويل الأرقام الى العربية مباشرة عندما يقوم المستخدم بالكتابة ؟
ضع الجمل التالية فى حدث KeyPress

الكود:

      Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        'Dim lang As InputLanguage
        'If lang.CurrentInputLanguage.Culture.TwoLetterISOLanguageName = "ar" Then
        TextBox1.TextAlign = HorizontalAlignment.Right
        If e.KeyChar = "0" Then e.KeyChar = ChrW(&H660)
        If e.KeyChar = "1" Then e.KeyChar = ChrW(&H661)
        If e.KeyChar = "2" Then e.KeyChar = ChrW(&H662)
        If e.KeyChar = "3" Then e.KeyChar = ChrW(&H663)
        If e.KeyChar = "4" Then e.KeyChar = ChrW(&H664)
        If e.KeyChar = "5" Then e.KeyChar = ChrW(&H665)
        If e.KeyChar = "6" Then e.KeyChar = ChrW(&H666)
        If e.KeyChar = "7" Then e.KeyChar = ChrW(&H667)
        If e.KeyChar = "8" Then e.KeyChar = ChrW(&H668)
        If e.KeyChar = "9" Then e.KeyChar = ChrW(&H669)
        'End If
   
End Sub

ستقوم هذه الجمل تلقائيا بتحويل جميع الأرقام التى سيكتبها المستخدم إلى العربية . أما إذا أردت ان تحول الأرقام فى حالة اذا كانت اللغة الحالية هى العربية قم بحذف التعليقات
أرجو الفائدة للجميع ، و لا تنسنونا بالدعاء
أللهم اغفر لى و لوالدى وللمؤمنين يوم يقوم الحساب
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى