OVERWHITE EM UM TEXTBOX??
Boa Tarde, galera....
Estou tentando fazer um negócio e não sei se é possÃvel fazer no VB, mas alguem fatalemten já deve ter pensado nisso e talvez ter arrumado alguma solução. Bom, vamos lá.
Eu gostaria que, quando eu digitasse em um TEXTBOX (por exemplo, um campo com o CNPJ), e que quando a pessoa tivesse que alterar um determinado número, que ele SUBSTITUà ÂSSE este número sem a necessidade de marcá-lo.
EX: No meu TEXTBOX, eu tenho a seguinte informação: 42.176.245/0001-59
E eu gostaria que, quando o usuário colocasse o cursor no número 6, e quando digitasse o número 4, por exemplo, ele substituisse o número 6 pelo 4 sem a necessidade de marcar e nem apagar.
Tem como fazer isso???
Estou tentando fazer um negócio e não sei se é possÃvel fazer no VB, mas alguem fatalemten já deve ter pensado nisso e talvez ter arrumado alguma solução. Bom, vamos lá.
Eu gostaria que, quando eu digitasse em um TEXTBOX (por exemplo, um campo com o CNPJ), e que quando a pessoa tivesse que alterar um determinado número, que ele SUBSTITUà ÂSSE este número sem a necessidade de marcá-lo.
EX: No meu TEXTBOX, eu tenho a seguinte informação: 42.176.245/0001-59
E eu gostaria que, quando o usuário colocasse o cursor no número 6, e quando digitasse o número 4, por exemplo, ele substituisse o número 6 pelo 4 sem a necessidade de marcar e nem apagar.
Tem como fazer isso???
Veja esse exemplo no evento KeyPress da textbox, é necessário controlar o pressionamento da tecla INSERT tambem.
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETSEL = &HB0
Private Const EM_SETSEL = &HB1
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_LINEFROMCHAR = &HC9
Public KeyInsert As Boolean
Private Sub Form_Load()
Text1.Text = "42.176.245/0001-59"
KeyInsert = False
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
' Foi pressionado a tecla INSERT?
If KeyCode = 45 Then KeyInsert = Not KeyInsert
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim cursorPos As Long
If KeyInsert Then Exit Sub ' Tecla INSERT esta ativa?
' Obtem a posição do cursor dentro da textbox
Call SendMessage(Text1.hwnd, EM_GETSEL, 0&, cursorPos)
If Len(Text1.Text) = cursorPos And InStr(1, "1234567890-/", Chr(KeyAscii)) 0 Then
Text1.SetFocus
' Seleciona texto na textbox
Call SendMessage(Text1.hwnd, EM_SETSEL, ByVal cursorPos, ByVal cursorPos + 1)
End If
End Sub
Estou postando novamente o código devido a falta dos simbolos de "Maior que".
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETSEL = &HB0
Private Const EM_SETSEL = &HB1
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_LINEFROMCHAR = &HC9
Public KeyInsert As Boolean
Private Sub Form_Load()
Text1.Text = "42.176.245/0001-59"
KeyInsert = False
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
' Foi pressionado a tecla INSERT?
If KeyCode = 45 Then KeyInsert = Not KeyInsert
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim cursorPos As Long
If KeyInsert Then Exit Sub ' Tecla INSERT esta ativa?
' Obtem a posição do cursor dentro da textbox
Call SendMessage(Text1.hwnd, EM_GETSEL, 0&, cursorPos)
If Len(Text1.Text) MAIORouIGUAL cursorPos And InStr(1, "1234567890-/", Chr(KeyAscii)) MAIORQUE 0 Then
Text1.SetFocus
' Seleciona texto na textbox
Call SendMessage(Text1.hwnd, EM_SETSEL, ByVal cursorPos, ByVal cursorPos + 1)
' A linha acima pode ser substituida por:
'Text1.SelStart = cursorPos
'Text1.SelLength = 1
End If
End Sub
Tópico encerrado , respostas não são mais permitidas