กระทู้เก่าบอร์ด อ.Yeadram
1,445 8
URL.หัวข้อ /
URL
สอบถามวิธี LockTextBox ให้คีย์แต่ภาษา อังกฤษ ไหมคร
สอบถามวิธี Lock TextBox ให้คีย์แต่ภาษา อังกฤษ ไหมครับ
ทำให้ TextBox1 กดได้แค่ภาษาอังกฤษ มีวิธีไหมครับ
ขอบคุณครับ
ทำให้ TextBox1 กดได้แค่ภาษาอังกฤษ มีวิธีไหมครับ
ขอบคุณครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R22457
Private Sub TextBox1_GotFocus()
TextBox1.KeyboardLanguage = 11
end sub
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
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 โดยไม่ต้องไปกดเปลี่ยนภาษา *****ทำในโน๊ตบุค******
แล้วถ้าสมมุติว่า ผมมี 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
จะทำให้ทุกครั้งที่มาที่ก่อนตัวอักษรตัวแรก คีย์บอร์ดจะถูกเปลี่ยนเป็นไทย แต่ตัวต่อๆไปจะเป็นอังกฤษ ช่วงที่เปลี่ยนภาษา ระบบจะกินเวลาสักแป๊ปนึงครับ
เราวางโค้ดนี้ไว้ที่ต้นโมดูลที่คุณมีอยู่แล้ว หรือจะสร้างโมดูลใหม่ก็ได้
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 ถึงจะทำงาน
สรุปคือ แสดงว่าเมื่อคลิกที่ 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 ก็ตัดออกไปด้วย หลังจากทดลองใหม่คราวนี้ ดูน่าจะได้แล้วนะครับ
If Me.Text0.SelStart = 0 Then
Res = LoadKeyboardLayout("0000041E", 1) ' เปลี่ยนเป็นภาษาอังกฤษ
Else
Res = LoadKeyboardLayout("00000409", 1)
End If
รวมทั้ง Text0_Enter event ก็ตัดออกไปด้วย หลังจากทดลองใหม่คราวนี้ ดูน่าจะได้แล้วนะครับ
8 @R22476
ขอบคุณครับอาจารย์ เยี่ยมเลย ได้ตามประสงค์ครับ
Time: 0.3218s
1.คลิ๊กที่ TextBox1 แล้วเลือก property sheet ----> All เลื่อนไปที่ keyboard language เลือก เป็น English
2.เมื่อไหรก็ตามที่คลิ๊กมาที่ TextBox1 แล้ว ตัวภาษาก็จะเป็นเฉพาะ อังกฤษ ยกเว้นไปเปลี่ยนที่แป้นตัวหนอน จึงจะกลับมาเป็น ภาษาไทยครับ
ถ้าไม่ตรงต้องรอท่านอื่นครับ