กระทู้เก่าบอร์ด อ.Yeadram
3,863 15
URL.หัวข้อ /
URL
แทรกข้อมูลเข้าใน textbox ที่ตำแหน่ง cursor
รบกวนสอบถาม อ.yeadram และผู้รู้ทุกท่านครับ
ผมทำฟอร์ม โดยมี textbox1 , textbox2 คอยรับค่าจากปุ่มที่กด
โดยปุ่มในฟอร์มผมทำคล้ายกับคีย์บอร์ดคือมีปุ่ม
0-9 และ A-Z , Space bar
เช่นเวลาเรากดปุ่ม A ก็ให้มันเอาตัว A ไปใส่ใน textbox และตำแหน่ง ที่ cursor อยู่ ถ้า cursor อยู่ตรงไหนก็ให้มันแทรกข้อความ หรือ ตัวเลขลงไป หรือกด
ปุ่ม Space bar ก็ให้มันเว้นช่องไฟไว้ให้เรา
ขอบคุณมากครับ
ผมทำฟอร์ม โดยมี textbox1 , textbox2 คอยรับค่าจากปุ่มที่กด
โดยปุ่มในฟอร์มผมทำคล้ายกับคีย์บอร์ดคือมีปุ่ม
0-9 และ A-Z , Space bar
เช่นเวลาเรากดปุ่ม A ก็ให้มันเอาตัว A ไปใส่ใน textbox และตำแหน่ง ที่ cursor อยู่ ถ้า cursor อยู่ตรงไหนก็ให้มันแทรกข้อความ หรือ ตัวเลขลงไป หรือกด
ปุ่ม Space bar ก็ให้มันเว้นช่องไฟไว้ให้เรา
ขอบคุณมากครับ
15 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R05229
ขอบคุณมากครับ อ.yeadram
ว่าจะลองทำแบบ touch screen ดูนะครับ
ที่ อ. แนะนำก็ใช้ได้ครับ แต่ถ้ามีอีก textbox อีกอันคือ
Text1 ผมต้องการ เมื่อ cursor มาอยู่ที่ Text1 ก็ให้ค่าเอามาใส่ใน text1
ถ้า cursor มาอยู่ที่ text0 ก็ให้เอาค่ามาใส่ที่ text0
ขอบคุณมากครับ
ว่าจะลองทำแบบ touch screen ดูนะครับ
ที่ อ. แนะนำก็ใช้ได้ครับ แต่ถ้ามีอีก textbox อีกอันคือ
Text1 ผมต้องการ เมื่อ cursor มาอยู่ที่ Text1 ก็ให้ค่าเอามาใส่ใน text1
ถ้า cursor มาอยู่ที่ text0 ก็ให้เอาค่ามาใส่ที่ text0
ขอบคุณมากครับ
3 @R05230
เอาของเก่าปรับปรุงเพิ่มนิดหน่อย
Option Compare Database
Dim tStart
Dim tLength
Dim tControl
Function prss(ByVal st As String)
with me(tControl)
.value = Left(Text0, tStart) & st & Mid(Text0, tStart + tLength + Len(st))
.SetFocus
.SelStart = tStart + Len(st)
.SelLength = 0
end with
End Function
Private Sub Text0_LostFocus()
tStart = Me.Text0.SelStart
tLength = Me.Text0.SelLength
tControl="Text0"
End Sub
Private Sub Text1_LostFocus()
tStart = Me.Text1.SelStart
tLength = Me.Text1.SelLength
tControl="Text1"
End Sub
4 @R05231
ขอบคุณมากครับ อ.yeadram
สงสัยผมจะอธิบายความต้องการผมไม่ดี
คือผมไม่ได้ต้องการค่าใน text0 มาใส่ใน text1
แต่ต้องการทำทุกอย่างเหมือนกันกับที่ทำใน text0
เมื่อ cursor มาอยู่ที่ text1 และเมื่อกด command button
ก็ให้เอาค่าใน command button มาใส่ครับ เช่นกดปุ่มแรก a, ปุ่ม2 b
ก็ให้เอา a และ b มาแสดงใน text1 โดยไม่ต้องเกี่ยวข้องกันกับ text0
ขอบคุณมากครับ
สงสัยผมจะอธิบายความต้องการผมไม่ดี
คือผมไม่ได้ต้องการค่าใน text0 มาใส่ใน text1
แต่ต้องการทำทุกอย่างเหมือนกันกับที่ทำใน text0
เมื่อ cursor มาอยู่ที่ text1 และเมื่อกด command button
ก็ให้เอาค่าใน command button มาใส่ครับ เช่นกดปุ่มแรก a, ปุ่ม2 b
ก็ให้เอา a และ b มาแสดงใน text1 โดยไม่ต้องเกี่ยวข้องกันกับ text0
ขอบคุณมากครับ
5 @R05233
อ้อ ผมแก้โค้ดไม่ครบ อิอิ
จริงๆ ผมก็ไม่ได้เอา text0 มาใส่ text1 นะครับ แต่ผมปรับโค้ดไม่ครบทุกจุดมั้ง มันเลยออกมาทำให้เข้าใจผิดอย่างนั้น (พอดีคิดๆ แล้วเขียนเลยไม่ได้ทดสอบครับ)
บรรทัดนี้
.value = Left(Text0, tStart) & st & Mid(Text0, tStart + tLength + Len(st))
แก้เป็น
.value = Left(me(tcontrol), tStart) & st & Mid(me(tcontrol), tStart + tLength + Len(st))
จริงๆ ผมก็ไม่ได้เอา text0 มาใส่ text1 นะครับ แต่ผมปรับโค้ดไม่ครบทุกจุดมั้ง มันเลยออกมาทำให้เข้าใจผิดอย่างนั้น (พอดีคิดๆ แล้วเขียนเลยไม่ได้ทดสอบครับ)
บรรทัดนี้
.value = Left(Text0, tStart) & st & Mid(Text0, tStart + tLength + Len(st))
แก้เป็น
.value = Left(me(tcontrol), tStart) & st & Mid(me(tcontrol), tStart + tLength + Len(st))
6 @R05244
ขอบคุณมากครับ อ.yeadram
7 @R06234
รบกวน อ.yeadram อีกครั้งครับ
1. กดปุ่ม Caps Lock แล้วเปลี่ยนให้เป็นตัวพิมพ์ใหญ่
2. กดปุ่มลบข้อมูล Backspace and Delete ให้มันลบข้อมูล
ไม่ทราบว่าต้องทำเช่นไรได้บ้างครับ
1. กดปุ่ม Caps Lock แล้วเปลี่ยนให้เป็นตัวพิมพ์ใหญ่
2. กดปุ่มลบข้อมูล Backspace and Delete ให้มันลบข้อมูล
ไม่ทราบว่าต้องทำเช่นไรได้บ้างครับ
8 @R06240
รบกวนด้วยครับ
ไม่ทราบว่าต้องทำเช่นไรได้บ้างครับ
ไม่ทราบว่าต้องทำเช่นไรได้บ้างครับ
9 @R06241
กำลังหาทางอยู่ครับ
ผมลองเอาแบบง่ายๆ ด้วยการ
- ปุ่ม ลบ ใช้ sendkeys แต่มันยังติดๆ ขัดๆ อยู่ ดูเหมือนไม่สมบูรณ์นัก
- ปุ่ม Caps เองอาจต้องรื้อโค้ดใช้วิธีใหม่จะง่ายกว่า
เดี๋ยวรอว่าง แบบยาวๆ แล้วจะลองร่างดูใหม่ครับ
ผมลองเอาแบบง่ายๆ ด้วยการ
- ปุ่ม ลบ ใช้ sendkeys แต่มันยังติดๆ ขัดๆ อยู่ ดูเหมือนไม่สมบูรณ์นัก
Private Sub cmdBSP_Click()
Me(tControl).SetFocus
If tStart = 0 Then tStart = Len(Me(tControl))
Me(tControl).SelStart = tStart
Me(tControl).SelLength = tLength
SendKeys "{BACKSPACE}"
End Sub
Private Sub cmdDEL_Click()
Me(tControl).SetFocus
If tStart = 0 And tLength = 0 Then tLength = Len(Me(tControl))
Me(tControl).SelStart = tStart
Me(tControl).SelLength = tLength
SendKeys "{DELETE}"
End Sub
- ปุ่ม Caps เองอาจต้องรื้อโค้ดใช้วิธีใหม่จะง่ายกว่า
เดี๋ยวรอว่าง แบบยาวๆ แล้วจะลองร่างดูใหม่ครับ
10 @R06244
ขอบคุณมากครับ อ.yeadram
11 @R06245
- ลองทำดูตัว backspace มันจะลบตัวท้ายสุดไล่ไปข้างหน้า ถึงแม้เราเอา cursor ไปวางไว้ในตำแหน่งใด ก็ตาม
- ส่วนตัว delete มันก็จะลบทั้งหมดเลยครับ ไม่ได้ลบทีละตัว
ขอบคุณมากครับ
- ส่วนตัว delete มันก็จะลบทั้งหมดเลยครับ ไม่ได้ลบทีละตัว
ขอบคุณมากครับ
12 @R06250
ยกเว้น textbox แล้ว คอนโทรลอื่นๆ ตั้งค่า Tabstop เป็น False ให้หมด
Option Compare Database
Dim tStart As Long
Dim tLength As Long
Dim tControl As String
Sub GetStation()
tStart = Me(tControl).SelStart
tLength = Me(tControl).SelLength
End Sub
Sub LetStation()
With Me(tControl)
.SetFocus
.SelStart = tStart
.SelLength = tLength
End With
End Sub
Function prss(ByVal Btt As String)
LetStation
If tStart > Len(Me(tControl)) Then
Me(tControl).Text = Trim(Me(tControl)) & Space(tStart - Len(Me(tControl))) & Right(Me(Btt).Caption, 1)
Else
Me(tControl).SelText = Right(Me(Btt).Caption, 1)
'SendKeys Right(Me(Btt).Caption, 1), True
End If
Me(tControl).SelStart = tStart + 1
GetStation
End Function
Private Sub bttCAP_Click()
bl_caps = IIf(Asc(Chra.Caption) = 65, True, False)
For Each ctl In Me.Controls
If Left(ctl.Name, 3) = "chr" Then ctl.Caption = IIf(bl_caps = True, LCase(ctl.Caption), UCase(ctl.Caption))
Next
LetStation
End Sub
Private Sub bttCLR_Click()
If Asc(Chra.Caption) = 65 Then bttCAP_Click
Dim FirstLoop As Integer
Dim ctl As Control
FirstLoop = 1
For Each ctl In Me.Controls
If TypeOf ctl Is TextBox Then
If FirstLoop = 1 Then
ctl.SetFocus
tControl = ctl.Name
End If
ctl = Null
FirstLoop = FirstLoop + 1
End If
Next
tStart = 0
tLength = 0
End Sub
Private Sub bttBCK_Click()
LetStation
SendKeys "{BACKSPACE}"
tStart = tStart - 1
End Sub
Private Sub bttDEL_Click()
LetStation
SendKeys "{DELETE}"
' ถ้าเคอเซอร์อยู่หลังสุด กดปุ่ม Delete ให้ลบทั้งหมด
If tStart = Len(Me(tControl)) Then
Me(tControl) = Null
tStart = 0
tLength = 0
End If
End Sub
Private Sub bttSPC_Click()
LetStation
SendKeys " ", True
GetStation
End Sub
Private Sub bttTAB_Click()
LetStation
SendKeys "{TAB}"
tControl = Me(Screen.ActiveControl.Name).Name
GetStation
End Sub
Private Sub Form_Open(Cancel As Integer)
bttCLR_Click
End Sub
***************** เขียนโค้ดให้กับ Textbox 1 ตัว **********************
Private Sub text0_Click()
tControl = "text0"
GetStation
End Sub
Private Sub text0_GotFocus()
tControl = "text0"
End Sub
' ****************** จบโค้ด สำหรับ textbox 1 ตัว ***********************
Private Sub text1_Click()
tControl = "text1"
GetStation
End Sub
Private Sub text1_GotFocus()
tControl = "text1"
End Sub
ยกเว้น textbox แล้ว คอนโทรลอื่นๆ ตั้งค่า Tabstop เป็น False ให้หมด
13 @R06253
ขอบคุณท่าน อ.yeadram มากครับ ที่สละเวลาทำมาให้
ขอบคุณมากครับ
ขอบคุณมากครับ
14 @R06324
เข้าใจว่า คุณ weezaa จะนำโค้ดนี้ไปประยุกต์ใช้กับ ระบบ Touch screen ใช่หรือเปล่าครับ ผมอยากเล่นบ้าง
ไม่ทราบว่าคุณ weezaa พอจะให้ข้อมูลได้ไหมครับ ว่าใช้กับเครื่องอะไรรุ่นอะไร งบประมาณน้อยๆ อย่างผมพอจะหามาลองเล่นกับเขาได้บ้างหรือเปล่าครับ
ไม่ทราบว่าคุณ weezaa พอจะให้ข้อมูลได้ไหมครับ ว่าใช้กับเครื่องอะไรรุ่นอะไร งบประมาณน้อยๆ อย่างผมพอจะหามาลองเล่นกับเขาได้บ้างหรือเปล่าครับ
15 @R06342
เรียน อ.yeadram
เครื่อง touch screen ผมก็ยังไม่เคยใช้
กะว่า ให้งานส่วนนี้เสร็จ ผมจึงจะลองหามาใช้งานดูครับ
ซึ่งคิดว่า ในปัจจุบันนี้ ราคาน่าจะไม่แพงนะครับ
ไว้ผมมีข้อมูล หรือได้ใช้งาน ผมจะมารายงานให้ทราบครับ
ขอบคุณมากครับ
เครื่อง touch screen ผมก็ยังไม่เคยใช้
กะว่า ให้งานส่วนนี้เสร็จ ผมจึงจะลองหามาใช้งานดูครับ
ซึ่งคิดว่า ในปัจจุบันนี้ ราคาน่าจะไม่แพงนะครับ
ไว้ผมมีข้อมูล หรือได้ใช้งาน ผมจะมารายงานให้ทราบครับ
ขอบคุณมากครับ
Time: 0.3390s
นี่ไม่คิดจะใช้คีย์บอร์ดกันเลยเน๊าะ
จะใช้แต่เม้าส์อย่างเดียวเลยเหรอครับ
เอ๊ะ หรือว?าเขาจะเอาไปประยุกต์ใช้กับ ระบบ touch screen ฮึ!
ถามหน่อยซิครับ หลังจากป้อนค่าลงใน textbox แล้วจะให้ pointer มันไปโฟกัสที่ไหนต่อละครับ อิอิ
เอาเป็นว่า คุณลองสร้างฟอร์มเปล่า 1 ตัว
มี textbox ชื่อ text0
มีปุ่ม command button สัก 2ปุ่ม ชื่ออะไรก็ได้
ในพร็อพเพอร์ตี้ ของ command button ให้เขียนลงไปในเหตุการณ์ "เมื่อคลิ๊ก" ว่า
=prss("a")
=prss("b")
(ปุ่มละอย่าง)
ในโมดูลของฟอร์มนี้ ลอง คัดลอกโค้ดนี้ลงไปวาง
Option Compare Database
Dim tStart
Dim tLength
Function prss(ByVal st As String)
Text0 = Left(Text0, tStart) & st & Mid(Text0, tStart + tLength + Len(st))
Text0.SetFocus
Text0.SelStart = tStart + Len(st)
Text0.SelLength = 0
End Function
Private Sub Text0_LostFocus()
tStart = Me.Text0.SelStart
tLength = Me.Text0.SelLength
End Sub
คิดว่าตรงความต้องการหรือเปล่า หรือพอจะนำไปประยุกต์ต่อยอดได้หรือเปล่าครับ