หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

กระดานข่าวสาร เว็บบอร์ด - www.g2gnet.com
ดาวน์โหลดฟรีโปรแกรม และ Free Souce Code ได้ที่นี่ ...
รู้จักกับเว็บมาสเตอร์ - www.g2gnet.com
::: โปรแกรมมาใหม่ :::
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ (iPayPost Software)
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ
โปรแกรมจุดรับชำระค่าบริการ (iPayLite Software)
โปรแกรมจุดรับชำระค่าบริการ
::: BarcodeSoft :::
::: Printing :::
โปรแกรมพิมพ์รหัสบาร์โค้ด - BarcodeSoft Printing
โปรแกรมรหัสไปรษณีย์ทั่วไทย
::: G2GNet PostCode :::
!!!!! แจกฟรี !!!!!
ดาวน์โหลดโปรแกรมรหัสไปรษณีย์ทั่วไทย G2GNet PostCode Thailand
Visitors - Session views
 3 4 4 1 2 7 8

7 ธันวาคม พ.ศ.2549
153 Users On-Line.
Visitors - Page views
 6 0 7 3 6 4 2
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  
    ดาวน์โหลด และ แนะนำวิธีการติดตั้ง Active Report Professional 2.0
    แจกฟรี Source Code โปรแกรมขายสินค้า - Point Of Sale (โดย เว็บมาสเตอร์-ทองก้อน
    แจกฟรี Source Code การพิมพ์ใบกำกับภาษี - Active Report 2.0 (โดย ctx-9000@hotmail.com)
    SourceCode การดึงข้อมูลมาแสดงผลลงใน SharpGrid (โดย dos_network@hotmail.com)
    แจกฟรี Source Code VB6+Access โปรแกรมฐานข้อมูลครุภัณฑ์
    แจกโปรแกรมดูทีวี ดูหนัง ฟังวิทยุ ฟังเพลงออนไลน์ - G2GnetTV On Line ... ฟรีๆๆๆๆ
          ข้อมูลสถานี/รายการ (XML)  ข้อมูลสถานี/รายการ (HTML)
โปรแกรมระบบบัญชี Profit - Account

Visual Basic 6.0 กับการสลับแป้นคีย์บอร์ดภาษาไทย - อังกฤษ แบบอัตโนมัติ

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 10/5/2552   เวลา: 04:56
(อ่าน : 17694)/(ตอบ : 15)  ข้อคิดเห็น   |   พิมพ์   |  
งานซอฟท์แวร์รวมๆโดยส่วนใหญ่ที่ผ่านๆมาของผม การค้นหาข้อมูลมักจะใช้ Keyword ในการค้นหาเป็นแบบภาษาไทยมากกว่าภาษาอังกฤษ แต่พอมาช่วงหลังๆนี้ ก็จะเป็นในเรื่องของการยิงรหัสบาร์โค้ดมากขึ้น ซึ่งรหัสบาร์โค้ดมันจะต้องเป็นภาษาอังกฤษเท่านั้น ปัญหาที่เกิดขึ้นก็จะพบเลยว่า ผู้ใช้งานมักจะลืมเปลี่ยนคีย์บอร์ด ให้เป็นภาษาอังกฤษก่อนที่จะทำการอ่านรหัสบาร์โค้ดเข้าไป บางรายถึงขนาดโทรมาต่อว่าต่อขานผมเลย ก็ผมได้ยืนยัน นั่งยัน นอนยัน ไปว่า เครื่องอ่านบาร์โค้ดมันไม่ต้องติดตั้ง Driver ใดๆทั้งสิ้น พอเสียบจึ๊กเข้าเครื่องมันก็ทำงานได้ทันทีเลย คุยไปคุยมา พอผมบอกให้ลองกดเครื่องหมาย ~ (Tilt) เพื่อสลับภาษา ก็แค่นั้นเองแหละครับ แม่เจ้าประคุณทูนหัวก็ตอบกลับว่ามันอ่านรหัสได้แล้ว ... กระจึ๋ย ... อย่ากระนั้นเลยผมก็ต้องมาปรับงานของผม (คนดีชอบแก้ไขครับ ... อิอิอิ) ให้ TextBox ที่ใช้ในการรับค่ารหัสบาร์โค้ดนั้น พอมันได้รับ Focus ปั๊บ (Cursor ไปอยู่ที่ตำแหน่งของ TextBox ที่ต้องการ) ก็ให้บังคับเปลี่ยนภาษาอังกฤษไปในทันที ... จบ
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
  • Design Time
  • รับค่าภาษาอังกฤษ (เหตุการณ์ GotFocus)
  • รับค่าภาษาไทย
    เริ่มต้นกระบวนการทำงาน
    
    Option Explicit
    
    ' ===============================================
    ' Enum คือ การสร้างชุดข้อมูลชนิดค่าคงที่แบบเลขจำนวนเต็ม
    ' ===============================================
    Public Enum EnumLangue
        ' จัดให้เรียงตามลำดับอักษรของภาษา และค่าคงที่ต้องไม่ซ้ำกัน
        LANG_DEFAULT = &H0
        LANG_AFRIKAANS = &H36
        LANG_ALBANIAN = &H1C
        LANG_ARABIC = &H1
        LANG_ARMENIAN = &H2B
        LANG_ASSAMESE = &H4D
        LANG_AZERI = &H2C
        LANG_BASQUE = &H2D
        LANG_BELARUSIAN = &H23
        LANG_BENGALI = &H45
        LANG_BULGARIAN = &H2
        LANG_CATALAN = &H3
        LANG_CHINESE = &H4
        LANG_CROATIAN = &H1A
        LANG_CZECH = &H5
        LANG_DANISH = &H6
        LANG_DUTCH = &H13
        LANG_ENGLISH = &H9
        LANG_ESTONIAN = &H25
        LANG_FAEROESE = &H38
        LANG_FARSI = &H29
        LANG_FINNISH = &HB
        LANG_FRENCH = &HC
        LANG_GEORGIAN = &H37
        LANG_GERMAN = &H7
        LANG_GREEK = &H8
        LANG_GUJARATI = &H47
        LANG_HEBREW = &HD
        LANG_HINDI = &H39
        LANG_HUNGARIAN = &HE
        LANG_ICELANDIC = &HF
        LANG_INDONESIAN = &H21
        LANG_ITALIAN = &H10
        LANG_JAPANESE = &H11
        LANG_KANNADA = &H4B
        LANG_KASHMIRI = &H60
        LANG_KAZAK = &H3F
        LANG_KONKANI = &H57
        LANG_KOREAN = &H12
        LANG_LATVIAN = &H26
        LANG_LITHUANIAN = &H27
        LANG_MACEDONIAN = &H2F
        LANG_MALAY = &H3E
        LANG_MALAYALAM = &H4C
        LANG_MANIPURI = &H58
        LANG_MARATHI = &H4E
        LANG_NEPALI = &H61
        LANG_NORWEGIAN = &H14
        LANG_ORIYA = &H48
        LANG_POLISH = &H15
        LANG_PORTUGUESE = &H16
        LANG_PUNJABI = &H46
        LANG_ROMANIAN = &H18
        LANG_RUSSIAN = &H19
        LANG_SANSKRIT = &H4F
        LANG_SERBIAN = &H1A
        LANG_SINDHI = &H59
        LANG_SLOVAK = &H1B
        LANG_SLOVENIAN = &H24
        LANG_SPANISH = &HA
        LANG_SWAHILI = &H41
        LANG_SWEDISH = &H1D
        LANG_TAMIL = &H49
        LANG_TATAR = &H44
        LANG_TELUGU = &H4A
        ' =========================
        ' ไทยแลนด์บ้านของเฮาอยู่นี่
        LANG_THAI = &H1E
        ' =========================
        LANG_TURKISH = &H1F
        LANG_UKRAINIAN = &H22
        LANG_URDU = &H20
        LANG_UZBEK = &H43
        LANG_VIETNAMESE = &H2A
        LANG_YIDDISH = &H3D
    End Enum
    
    ' ===== ฟังค์ชั่นเหล่านี้ หากนำไปใช้ใน Module ต้องเปลี่ยนจาก Private เป็น Public ======
    ' http://msdn.microsoft.com/en-us/library/ms646298(VS.85).aspx
    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias _
        "GetKeyboardLayoutNameA" ( _
        ByVal pwszKLID As String _
        ) As Long
        
    ' http://msdn.microsoft.com/en-us/library/ms646305(VS.85).aspx
    Private Declare Function LoadKeyboardLayout Lib "user32" Alias _
        "LoadKeyboardLayoutA" ( _
        ByVal pwszKLID As String, _
        ByVal flags As Long _
        ) As Long
    
    ' ===============================================================
    ' กำหนดค่าคงที่ Flags ในการสั่งให้ LoadKeyboardLayout ทำงาน (Activate)
    Const KLF_ACTIVATE = &H1
    ' ค่านี้สามารถดูได้จาก API Text Viewer
    
    ' ===============================================================
    
    ' ===============================================================
    ' ยกตัวอย่างภาษาที่ต้องใช้ประจำ คือ ไทย - อังกฤษ
    ' หรือ Language Identifier Constants and Strings
    ' อ่านรายละเอียดเพิ่มเติมได้ที่
    ' http://msdn.microsoft.com/en-us/library/dd318693(VS.85).aspx
    Private Const STR_LANG_ENGLISH As String = "00000409"
    ' ===============================================================
    ' จากเว็บของ "เล็กนิ่ม - Microsoft" ให้ดูค่าตารางจากหลักแรก ซึ่งเป็นค่า Locale identifier
    ' Locale identifier = รหัสที่ระบุเอาไว้ในแต่ละประเทศ (แปลให้พร้อมเสร็จสรรพ ... 55555+)
    ' 0x041E (0x คือ HexaDecimal หรือ เลขฐาน 16) แต่ต้องกำหนดเอาไว้เป็น String ด้วยน่ะครับ
    ' คำว่า String หรือ ข้อความ จะต้องอยู่ภายใต้เครื่องหมาย Double Quote ("") เสมอ
    Private Const STR_LANG_THAI As String = "0000041E"
    ' ===============================================================
    
    Private Sub Form_Load()
        Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
        txtEnglish.Text = ""
        txtThai.Text = ""
    End Sub
    
    ' ==========================================================
    ' โปรแกรมย่อย (Function) ในการเปลี่ยนภาษาให้กับแป้นคีย์บอร์ด
    ' จะส่งกลับค่าเป็น TRUE เมื่อ KeyboardLayout ถูกกำหนดค่าถูกต้อง
    ' ==========================================================
    Private Function SwitchKeyboardLang(ByVal strLangID As String) As Boolean
    Dim strRet As String
    On Error Resume Next
    
        ' ----------------------------------------------------------------------------------------------------------------
        ' แท้ที่จริงแล้ว เราสั่งด้วยคำสั่งบรรทัดเดียวก็เป็นอันจบแล้วแหละครับ
        ' strRet = LoadKeyboardLayout(strLangID, KLF_ACTIVATE)
        ' ผมถ่ายทอดแนวคิดในแบบฉบับนี้ของผมออกไป ก็เพื่อต้องการให้พี่น้อง ... ได้คิด ได้ฝึกฝน
        ' และต้องรอบคอบ ระมัดระวัง ต่อการใช้งาน Win32 API ให้ดีด้วย
        ' ----------------------------------------------------------------------------------------------------------------
        
        ' คือ จองพื้นที่แบบ String เอาไว้ 8 ตัว ตามจำนวนของ Locale identifier
        ' ลองคุณไม่จองเอาไว้ก่อนดูครับว่าจะมีผลเช่นไร ... คิดๆๆๆๆ แล้ว ก็ทำๆๆๆๆ
        strRet = Space$(8)
        ' หรือ strRet = String$(8, 0) ... จองพื้นที่ว่างเปล่าใน Memory 8 ไบต์ (เมื่อ ASCII 0 = Null)
        
        ' อ่านค่ารหัสภาษา (Locale identifier) สถานะปัจจุบันก่อน
        GetKeyboardLayoutName strRet
        
        ' หากภาษาที่กำหนดมามันตรงกับของเดิมอยู่แล้ว ก็ไม่ต้องไปทำอะไรอีก
        ' ส่งค่า TRUE กลับออกไปได้เลย ... เพื่อความรวดเร็ว และไม่เสียเวลา
        If strRet = strLangID Then
            SwitchKeyboardLang = True
            Exit Function
        Else
            ' เคลียร์ค่าใหม่
            strRet = Space$(8)
            ' ติดต่อกับระบบปฏิบัติการ (OS) เพื่อให้โหลดรูปแบบภาษาตามที่กำหนดเอาไว้
            strRet = LoadKeyboardLayout(strLangID, KLF_ACTIVATE)
        End If
        
        ' ทดสอบหากเปลี่ยนภาษาได้สำเร็จ โดยอ่านค่าสถานะปัจจุบันเข้ามาอีกรอบ
        ' หรืออีกแง่มุมหนึ่ง ก็คือ การนำไปทดสอบว่าสถานะปัจจุบัน แป้นคีย์บอร์ดมันเป็นภาษาอะไร
        GetKeyboardLayoutName strRet
        
        ' หากโหลดภาษาได้ตามที่ต้องการให้ส่งค่า TRUE กลับไป (DTAC ไม่ต้อง เพราะผมยังใช้งานอยู่ 55555+)
        If strRet = strLangID Then SwitchKeyboardLang = True
        
    End Function
    
    ' =========================================================
    ' เมื่อ Cursor ไปโฟกัสอยู่ที่ TextBox ก็ให้เลือกเอาว่าจะให้มันเป็นภาษาอะไร
    ' กรณีนี้ผมต้องการให้เป็นภาษาอังกฤษ เพื่อใช้ประโยชน์ในการสแกนรหัสบาร์โค้ดเข้าไป
    ' =========================================================
    Private Sub txtEnglish_GotFocus()
        Call Change2English
    End Sub
    
    Private Sub txtThai_GotFocus()
        Call Change2Thai
    End Sub
    
    Private Sub Change2English()
        If SwitchKeyboardLang(STR_LANG_ENGLISH) Then Me.Caption = "English Language"
    End Sub
    
    Private Sub Change2Thai()
        If SwitchKeyboardLang(STR_LANG_THAI) Then Me.Caption = "ภาษาไทย"
    End Sub
    
    Conclusion:
    A little case study: ผมกล้าฟันธง และ คอนเฟิร์ม ได้เลยว่า มีนักพัฒนาซอฟท์แวร์หลายคนมักจะโทษว่ามันเป็นความผิดของ User เอง แทนที่จะกลับมานั่งคิดว่า ทำยังไงดีที่จะปรับปรุงงาน สร้างความสะดวกให้แก่ผู้ใช้งานเขา (หรือ เธอ) มากขึ้น และลดความผิดพลาดในการทำงานให้มันน้อยลงไป นอกจากนี้แล้ว บทความนี้ ผมต้องการสื่อไปถึงสำหรับมือใหม่ มือกลาง ที่ยังไม่แกร่งพอ มันยังเป็นการพัฒนาแนวความคิดของตัวเองออกไปได้อีกด้วยน่ะครับ ... พี่น้อง (จากใจจริงของคนที่ชอบเป็นนายตัวเองครับ ... ลงชื่อ นายทองก้อน นารีแขยง)

  • ร่วมแสดงความคิดเห็น

    [ความเห็นที่:  1] จากคุณ : H2O เมื่อ 11/5/2552 10:55:53  IP: 124.122.140.155

    ขอบคุณมากเลยครับ

    [ความเห็นที่:  2] จากคุณ : Mr.Den เมื่อ 11/5/2552 10:57:31  IP: 58.9.105.8

    อื้อฮื๋อ...เห็นนามสกุลของผู้ลงชื่อแล้ว..
    หนาว..สยอง แฮะแฮะ...
    สาวๆ เห็นนามสกุลคงเสียวจี้ด...

    หนุ่มน้อย

    [ความเห็นที่:  3] จากคุณ : dos_network เมื่อ 11/5/2552 11:11:19  IP: 118.175.90.37

    Mr.Den คุณช้าไปก้าวเดียว เร็วอีกนิดมาเป็นคนแรกแน่ เอิ๊กกกกกกๆๆๆๆๆๆๆๆ

    [ความเห็นที่:  4] จากคุณ : dos_network เมื่อ 11/5/2552 11:11:27  IP: 118.175.90.37

    Mr.Den คุณช้าไปก้าวเดียว เร็วอีกนิดมาเป็นคนแรกแน่ เอิ๊กกกกกกๆๆๆๆๆๆๆๆ

    [ความเห็นที่:  5] จากคุณ : Mr.Den เมื่อ 11/5/2552 15:19:06  IP: 61.90.94.158

    ขอบคุณ ท่าน dos_network ครับ.
    ก็เพราะมัวแต่เกิดอาการ 'หนาว' กับนามสกุลของ 'นายทองก้อน' อยู่ก็เลย
    หาตัวอักษรที่จะบรรยายความรู้สึกนี้ล่าช้าไปหน่อย  แฮะแฮะ..
    แต่คุณ dos_network ก็ใช่ย่อยนี่...ครับ.
    อะไรที่เร็วๆไปบางอย่างคงไม่ค่อยดี ประเดี๋ยวจะว่าเป็น พวก 'นกกระจอกยังไม่ทัน drink water'
    แฮะแฮะ..

    [ความเห็นที่:  6] จากคุณ : ctx-9000 เมื่อ 12/5/2552 18:24:22  IP: 119.31.86.48

    มาช้าดีกว่าไม่มาครับ

    [ความเห็นที่:  7] จากคุณ : inarok เมื่อ 17/5/2552 16:44:18  IP: 58.9.100.179

    แล้วถ้าจะเช็คว่าตอนนี้สถานะเป็นภาษาไทย หรือ อังกฤษ ยังไงดีครับ

    [ความเห็นที่:  8] จากคุณ : ทองก้อน เมื่อ 18/5/2552 13:04:30

    แหม ... ผมก็มีคอมเมนท์ไว้ให้คิดดูเอาเองแล้วน่ะเนี่ย
    โดยปกติคอมฯในบ้านเราทั่วๆไปก็จะมีอยู่แค่ 2 ภาษา คือ ไทย - อังกฤษ ดังนั้น

    ' ตรวจสอบสถานะภาษาปัจจุบันก่อน
    GetKeyboardLayoutName strRet

    ' นำมาเปรียบเทียบ ... อันนี้ต้องลองเขียน -ตัวแปร- เพื่อเปรียบเทียบเงื่อนไขเอาเองด้วยล่ะง่ายๆ ครับ
    ' ผมไม่อยากเฉลยให้หมด เดี๋ยวจะไม่ได้คิดอะไรเลย
    ' ตัวแปรซ้าย และ ขวาจะเป็นอะไรดี ติ๊กตีอกๆๆๆๆ .....
    If "0000041E" = "0000041E" Then
        MsgBox "ภาษาไทย"
    ElseIf "00000409" = "00000409" Then
        MsgBox "English"
    End If

    [ความเห็นที่:  9] จากคุณ : Leejiin เมื่อ 1/9/2552 21:45:49  IP: 117.47.75.155

    อยากได้โค้ดโปรแกรมพิมพ์ดีด ช่วยทำเป็นตัวอย่างได้ไหมอ่ะ อยากทำเป็นบ้าง

    [ความเห็นที่:  10] จากคุณ : น้ำ เมื่อ 27/11/2553 1:57:57  IP: 223.207.168.188

    แป้นคีย์บอร์ดโนตบุคเสียเฉพาะ แป้นเปลี่ยนภาษาค่ะ   ต้องไปคลิกที่ปุ่มภาษามุมขวาล่างตลอดเลย  มีวิธีเซตค่าหรือปลดล็อคอะไรไหมค่ะ  
    ขอบคุณค่ะ

    [ความเห็นที่:  11] จากคุณ : ทองก้อน เมื่อ 27/11/2553 12:28:04

    เข้าไปที่ Control Panel --> Regional and Language Options
    เลือก Tab Language --> กดปุ่ม Details
    เลือก Key Setting ... กดปุ่ม Change Key Sequence ...
    ตรง Switch input Language ... เลือกเอาว่าจะใช้ Ctrl+Shift หรือ Left Alt+Shift

    [ความเห็นที่:  12] จากคุณ : อุ๊ด เมื่อ 16/1/2554 2:00:41  IP: 124.121.196.168

    ขอบคุณครับ

    [ความเห็นที่:  13] จากคุณ : เจริ เมื่อ 29/3/2554 23:16:26  IP: 118.174.65.163

    ทำไม่ได้  ยังไม่เข้าจาย

    [ความเห็นที่:  14] จากคุณ : ozao เมื่อ 13/5/2554 10:43:28  IP: 125.25.84.1

    ผมติดตรงที่เวลาเปลี่ยนtexboxอื่น มันยังไม่เปลี่ยนภาษาให้ต้องพิมไปก่อนถึงจะเปลี่ยนภาษาให้อะครับ

    [ความเห็นที่:  15] จากคุณ : hot2 เมื่อ 17/11/2554 19:20:01  IP: 118.173.212.133

    ขอบคุณครับ เว็บเฮียเนี๊ยะเหมือนกับต่อจิ๊กซอว์เลยอ่ะ เพียงแต่หาให้เจอคุณก้อจะต่อจิ๊กซอว์ได้เสร็จ สุดยอดๆๆๆ ขอให้มี Order ใหญ่ๆ เข้ามาหาเฮียบ่อยๆคร้าบบบบบ


    ก่อนการคลิ๊กโพสต์ข้อความ ขอความกรุณาใช้ถ้อยคำที่สุภาพด้วยครับ เว็บไซต์แห่งนี้เป็นแหล่งเผยแพร่ความรู้ ดังนั้นสำหรับท่านที่พยายามจะป่วนเว็บไซต์ หากท่านเป็น "คนไทย" เช่นเดียวกันกับผม ก็ขอความกรุณาได้โปรดเห็นใจ "คนไทย" อีกจำนวนไม่น้อย ที่เข้ามาขอความช่วยเหลือ จากเว็บไซต์ของผมด้วยน่ะครับ และหากท่านใดไม่เข้าใจในตรงจุดไหน ก็ขอให้ระบุสิ่งที่อยากจะถามออกมา บทความของผมแทบทั้งหมดต้องอาศัยทักษะการปฏิบัติเป็นหลัก ดังนั้นขอให้ดู และ ทดสอบจากโค้ดโปรแกรมประกอบตามไปด้วย
    IP Address: 50.16.130.188
    ชื่อของคุณ:

    ข้อคิดเห็น:

    3 + 1 = ?  (กรุณาป้อนคำตอบลงในช่องด้านล่างให้เป็น ภาษาไทย ตามผลบวกของตัวเลขให้ถูกต้องก่อนด้วยน่ะครับ เช่น ศูนย์)
      


    จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
    เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
    Copyright © 2005 g2gNet.Com All rights reserved.
    Email: thongkorn@hotmail.com หรือ โทร. 08-6862-6560