Hola. Estoy creando una aplicación en la que necesito que, al escribir algo, aparezca un ToolTip que me de información sobre lo que escribo, al estilo de VB. ¿Alguien sabe como detectar si escribí una cierta palabra, y en ese caso mostrar un ToolTip?
P.D.: Lo del ToolTip puedo hacerlo yo.
Gracias de antemano.
Aunque puede ser una chapuza se me ocurre que crees una especie de keylogger que capte lo que escribas con el tecledo en una variable y si se llega a crear alguna palabra que reaccione de algún modo.
Para capturar las teclas pulsadas puedes usar esto:
Dim KeyCode As Integer, Written As String
Do
DoEvents
For KeyCode = 8 To 255
If GetAsyncKeyState(KeyCode) = -32767 Then 'Si la tecla está pulsada retornará el valor -32767
Select Case KeyCode
' carácteres según ASCII
Case 32
Written = Written & " "
'Números (48-57)
Case 48
If GetShift = True Then
Written = Written & "="
Else: Written = Written & "0"
End If
Case 49
If GetShift = True Then
Written = Written & "!"
Else: Written = Written & "1"
End If
Case 50
If GetShift = True Then
Written = Written & "''"
Else: Written = Written & "2"
End If
Case 51
If GetShift = True Then
Written = Written & "·"
Else: Written = Written & "3"
End If
Case 52
If GetShift = True Then
Written = Written & "$"
Else: Written = Written & "4"
End If
Case 53
If GetShift = True Then
Written = Written & "%"
Else: Written = Written & "5"
End If
Case 54
If GetShift = True Then
Written = Written & "&"
Else: Written = Written & "6"
End If
Case 55
If GetShift = True Then
Written = Written & "/"
Else: Written = Written & "7"
End If
Case 56
If GetShift = True Then
Written = Written & "("
Else: Written = Written & "8"
End If
Case 57
If GetShift = True Then
Written = Written & ")"
Else: Written = Written & "9"
End If
'Letras (65-90)
Case 65 To 90
If GetShift = True Then
Written = Written & UCase(Chr$(KeyCode))
Else: Written = Written & LCase(Chr$(KeyCode))
End If
Case 188 'Koma
If GetShift = True Then
Written = Written & ";"
Else: Written = Written & ","
End If
Case 190 'Punto
Written = Written & "."
Case 192
If GetShift = True Then 'ñ
Written = Written & "Ñ"
Else: Written = Written & "ñ"
End If
Case 219 '?
If GetShift = True Then
Written = Written & "?"
Else: Written = Written & "'"
End If
Case 221 '¿
If GetShift = True Then
Written = Written & "¿"
Else: Written = Written & "¡"
End If
End Select
Next KeyCode
DoEvents
Loop
Lo que hace es comprobar una a una si las teclas están pulsadas pero lo hace infinitesimalmente rápido, aunque escribas muuy rápido te las caza todas. Así puedes ir creando una variable (Written) y añadir la sentencia una sentencia If InStr:
If InStr(1, Written, "fiesta", 1) ' Comparamos los strings para ver si coinciden en algún trozo, si es así nos devolvera la posición donde empieza, y si no está en el string nos devolvera 0. Así vas comparando el string Written por cada letra que se escribe (por cada vez que se cumple la sentencia de GetAssyncKeyState, debajo de él). If Not InStr(1, Written, "fiesta", 1) = 0 Then [tooltiptext].
y te recomendaría crear también una sentencia para vaciar la variable written. If Len(Written) > 200 Then Written = "".
Es lo único que se me ha ocurrido, quiza sea algo parecido lo que hacen los de microsoft para que el visual responda al escribir palabras clave :laugh: :laugh:, comenta algo si te funciona o no.
Salu10
Gracis, gulabyte, pero estuve pensando y ahora utilizo este código:
Function Encontrado(Cadena As String, Letra As String) As Boolean
Dim Texto As String
Texto = StrReverse(Cadena)
If Left(Texto, 1) = Letra Then
Encontrado = True
Else
Encontrado = False
End Function
Gracias de nuevo y saludos.