สอบถามวิธี LockTextBox ให้คีย์แต่ภาษา อังกฤษ ไหมคร
กระทู้เก่าบอร์ด อ.Yeadram

 1,265   8
URL.หัวข้อ / URL
สอบถามวิธี LockTextBox ให้คีย์แต่ภาษา อังกฤษ ไหมคร

สอบถามวิธี Lock TextBox ให้คีย์แต่ภาษา อังกฤษ ไหมครับ

ทำให้ TextBox1 กดได้แค่ภาษาอังกฤษ มีวิธีไหมครับ

ขอบคุณครับ

8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R22456
ขออนุญาตตอบเฉพาะที่รู้น๊ะครับ ถ้า เป็นการ Lock TextBox ให้ใช้ได้เฉพาะ ภาษาอังกฤษนี่ผมไม่รู้ครับ
1.คลิ๊กที่ TextBox1   แล้วเลือก property sheet ----> All เลื่อนไปที่ keyboard language เลือก เป็น English
2.เมื่อไหรก็ตามที่คลิ๊กมาที่ TextBox1 แล้ว ตัวภาษาก็จะเป็นเฉพาะ อังกฤษ ยกเว้นไปเปลี่ยนที่แป้นตัวหนอน จึงจะกลับมาเป็น ภาษาไทยครับ
ถ้าไม่ตรงต้องรอท่านอื่นครับ
2 @R22457
Private Sub TextBox1_GotFocus()
TextBox1.KeyboardLanguage = 11
end sub
3 @R22458
ไม่เคยใช้นะครับ แต่เท่าที่ทดลอง ก็ดูเหมือนว่าจะใช้ได้ เอาไปลองใช้ดูนะครับ โดยใน KeyPress event procedure ของเท็กบ็อกซ์นั้น ให้ใส่โค้ด

If KeyAscii >= 3585 And KeyAscii <= 3673 Then KeyAscii = 0

ความหมาย : 3585 (หรือ 0E01 ในเลขฐาน 16, 2 ไบท์) เป็นค่า Unicode ของอักษร "ก" ซึ่งเป็นอักษรไทยตัวแรกในตาราง Unicode ส่วน 3673 (หรือ 0E59) เป็นค่า Unicode ของอักษร "๙" ซึ่งเป็นอักษรตัวสุดท้ายในตาราง Unicode ที่มีบนแป้นพิมพ์ แต่จริงๆแล้วภาษาไทยได้จองตาราง Unicode ที่ค่า 0E00 ถึง 0E7F แต่หลายค่ายังไม่ได้กำหนดตัวอักษร หรือกำหนดไว้แต่ไม่มีใช้บนแป้นพิมพ์ครับ ลองดูค่า Unicode ของภาษาไทยที่ล่างสุดของลิงค์นี้ก็ได้ https://th.wikipedia.org/wiki/%E0%B8%AD%E0%B8%B1%E0%B8%81%E0%B8%A9%E0%B8%A3%E0%B9%84%E0%B8%97%E0%B8%A2
4 @R22466
เรียนอาจารย์ สันติสุข
แล้วถ้าสมมุติว่า ผมมี textbox ชื่อว่า TextBox1 ที่อยู่ใน ฟอร์ม ผมต้องการพิมพ์คำว่า ค31101 โดยไม่ต้องให้มีการไปกดแป้นเปลี่ยนภาษา (~) นั่นคือจากตอนแรกพิมพ์ "ค" ต่อมาต้องไปกดแป้น(~)เปลี่ยนเป็นภาษาอังกฤษ เพื่อให้พิมพ์เลข 31101 หมายถึงการทำในโน๊ตบุค ครับ จะมีวิธีการไหมครับ
สรุปง่ายๆคือ อักขระที่จะพิมพ์ตัวแรก เป็นภาษาไทย   ตัวถัดมาเป็นภาษาอังกฤษ อาจเป็นตัวเลขหรือภาษาอังกฤษและแต่   พิมพ์ลงใน text0 โดยไม่ต้องไปกดเปลี่ยนภาษา *****ทำในโน๊ตบุค******
5 @R22467
เราจะใช้โค้ดจาก http://www.thai-access.com/suphap.php?topic_id=1516 มาช่วยนะครับ

เราวางโค้ดนี้ไว้ที่ต้นโมดูลที่คุณมีอยู่แล้ว หรือจะสร้างโมดูลใหม่ก็ได้

Option Compare Database
Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long

สมมุติว่าเท็กบ็อกซ์บนฟอร์มชื่อ Text0   ให้กำหนด Keyboard Language property เป็น "ไทย"

แล้วใส่โค้ดนี้ไว้ในฟอร์มครับ

Option Compare Database
Option Explicit

Dim IsThai As Boolean

Private Sub Text0_Enter()
    IsThai = True
End Sub

Private Sub Text0_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim Res As Long
    
    If Me.Text0.SelStart = 0 Then
        If IsThai Then
            Res = LoadKeyboardLayout("0000041E", 1) ' เปลี่ยนเป็นภาษาอังกฤษ
            IsThai = False
        End If
    Else
        If Not IsThai Then
            Res = LoadKeyboardLayout("00000409", 1)
            IsThai = True
        End If
    End If
End Sub

จะทำให้ทุกครั้งที่มาที่ก่อนตัวอักษรตัวแรก คีย์บอร์ดจะถูกเปลี่ยนเป็นไทย แต่ตัวต่อๆไปจะเป็นอังกฤษ ช่วงที่เปลี่ยนภาษา ระบบจะกินเวลาสักแป๊ปนึงครับ
6 @R22474
ขอบคุณมากครับอาจารย์ ผมลองทดลองทำแล้ว ถ้าคลิกที่ text0 แล้วลองพิมพ์คำว่า ค31101 ปรากฏว่า ออกมาเป็น ค-ๅๅจๅ ซึ่งภาษามันไม่เปลี่ยน ผมเลยใช้วิธีคลิกที่ text0 แล้วกดปุ่ม delete ย้ำก่อน ปรากกฏว่าได้ผล ครับ
สรุปคือ แสดงว่าเมื่อคลิกที่ text0 แล้ว ต้องกดปุ่ม delete ย้ำก่อน code ถึงจะทำงาน
7 @R22475
ผมทดลองแล้วก็มีปัญหาอย่างนั้นจริงๆ เลยตัดทุกบรรทัดที่มีตัวแปร IsThai ออกเป็น

    If Me.Text0.SelStart = 0 Then
            Res = LoadKeyboardLayout("0000041E", 1) ' เปลี่ยนเป็นภาษาอังกฤษ
    Else
            Res = LoadKeyboardLayout("00000409", 1)
    End If

รวมทั้ง Text0_Enter event ก็ตัดออกไปด้วย หลังจากทดลองใหม่คราวนี้ ดูน่าจะได้แล้วนะครับ
8 @R22476
ขอบคุณครับอาจารย์ เยี่ยมเลย ได้ตามประสงค์ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2768s