سلام مخصوص خدمت جناب Mani_rf
از راهنمايي خوبتون در پست 7 متشكرم
بعد از اين كه دوباره سعي كردم، توانستم برنامهاي بنويسم كه اين كار را انجام بده، ولي حالا به مشكلات ديگري برخورد كردم.
سورس كد (VB6) را با مقداري توضيح برايتان ميگذارم، لطفاً راهنمايي كنيد.
روال GetChar
اين روال از TextBox جاري، و از محل جاري مكاننما يك حرف را انتخاب ميكند، در صورتي كه حرف مساوي با يكي از حروف زير بود، بدون انجام هيچ عملي و بدون تغيير زبان، از روال خارج ميشود.
حروف ممنوع: ".:!@#$%^&*()_+-=<>/\|" و حرف فاصله يا Space " " (جمعاً 22 حرف)
توضيح: چون اين حروف به صورت پيشفرض در VB6 به صورت لاتين شناخته ميشوند، به همين دليل به محض تشخيص آنها، دستور Exit را قرار دادم. اگر كسي پيشنهاد يا راه حل بهتري دارد، لطفاً ارائه نمايد.
در صورتي كه حرف انتخاب شده، ممنوع نبود، آن حرف به روال FindCharAsciiCode ارسال ميشود.
در ضمن به جاي lblCursorPosition.Caption عبارت txtText.SelStart را وارد نماييد.
Public Sub GetChar()
Dim lngStart As Long
Dim lngEnd As Long
Dim strChar As String
If txtText(intID).Text = "" Then
Exit Sub
End If
lngStart = CLng(Val(lblCursorPosition.Caption))
lngEnd = Len(txtText(intID).Text)
If lngStart >= lngEnd Then
lngStart = lngEnd - 1
End If
strChar = Mid(txtText(intID).Text, lngStart + 1, 1)
If strChar = " " Or strChar = "." _
Or strChar = ":" Or strChar = "!" _
Or strChar = "@" Or strChar = "#" _
Or strChar = "$" Or strChar = "%" _
Or strChar = "^" Or strChar = "&" _
Or strChar = "*" Or strChar = "(" _
Or strChar = ")" Or strChar = "_" _
Or strChar = "+" Or strChar = "-" _
Or strChar = "=" Or strChar = "<" _
Or strChar = ">" Or strChar = "/" _
Or strChar = "\" Or strChar = "|" Then
Exit Sub
End If
FindCharAsciiCode strChar
End Sub
روال FindCharAsciiCode
اين روال حرف دريافت شده را در دو حلقة For بررسي مينمايد. اگر كد اسكي اين حرف، با عدد شمارندة حلقه (يعني lngLatin يا lngFarsi) برابر بود، متغير بولين كه قبلاً در قسمت Declaration مربوط به Form تعريف شده، متناسب با كد حرف و زبان مورد نظر True يا False ميشود.
در اين برنامه نام اين متغير بولين blnFarsi است. اگر حرف مورد نظر لاتين بود، اين متغير False و اگر فارسي بود، True ميشود.
سپس روال Language اجرا ميشود.
Public Sub FindCharAsciiCode(ByVal Char As String)
On Error Resume Next
Dim lngLatin As Long
Dim lngFarsi As Long
For lngLatin = 32 To 128
If Asc(Char) = lngLatin Then
blnFarsi = False
End If
Next lngLatin
For lngFarsi = 129 To 254
If Asc(Char) = lngFarsi Then
blnFarsi = True
End If
Next lngFarsi
Language
End Sub
روال Language
اين روال با يك حلقة شرطي IF غلط (False) يا درست (True) بودن متغير blnFarsi را بررسي مينمايد.
اگر متغير blnFarsi برابر False باشد، زبان صفحه كليد با استفاده از تابع API با نام LoadKeyboardLayout لاتين ميشود و اگر True باشد زبان صفحه كليد فارسي ميشود.
Public Sub Language()
If blnFarsi = False Then
lblLanguage.Caption = strEn
LoadKeyboardLayout "00000409", 1
ElseIf blnFarsi = True Then
lblLanguage.Caption = strFa
LoadKeyboardLayout "00000429", 1
End If
End Sub
راستي، كامپيوترم ويروسيه، وگرنه Source ميگذاشتم.
از كمك و راهنماييهاي همة شما سپاسگزارم.