Hola, tengo que hacer un script que pida por teclado un carácter y determine si es una vocal, consonante, número o signo de puntuación. ¿Podéis echarme una mano?, ando muy perdida con esto de Visual Basic y el jueves tengo examen. Gracias.
Mira este ejemplo que hice:
Rem añade un TextBox llamado Text1 y un CommandButton llamado Command1
Private Sub Command1_Click()
Call Comprobar_Caracter(Text1.Text)
End Sub
Private Sub Form_Load()
Text1.MaxLength = 1
End Sub
Private Sub Comprobar_Caracter(Cadena As String)
If Len(Cadena) > 1 Then MsgBox "Solo se puede analizar un caracter", vbCritical, "Error": Exit Sub
Dim Vocal As String, Consonante As String, Numero As String
Vocal = "aeiou"
Consonante = "bcdfghjklmnñpqrstvwxyz"
Numero = "1234567890"
If Not InStr(1, Vocal, Cadena) = 0 Then
MsgBox "El caracter """ & Cadena & """ es una vocal", vbInformation
ElseIf Not InStr(1, Consonante, Cadena) = 0 Then
MsgBox "El caracter """ & Cadena & """ es una consonante", vbInformation
ElseIf Not InStr(1, Numero, Cadena) = 0 Then
MsgBox "El caracter """ & Cadena & """ es un número", vbInformation
Else
MsgBox "El caracter """ & Cadena & """ es un símbolo", vbInformation
End If
End Sub
Espero haberte ayudado... ;)
Hola PsYkE1, otra opcion seria
Option Explicit
Private Sub Form_DblClick()
Me.Cls
End Sub
Private Sub Form_Load()
Me.AutoRedraw = True
StartHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
StopHook
End Sub
Option Explicit
Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
Dim hHook As Long
Public Sub StartHook()
hHook = SetWindowsHookEx(13, AddressOf KeyProc, App.hInstance, 0)
End Sub
Public Sub StopHook()
Call UnhookWindowsHookEx(hHook)
End Sub
Private Function KeyProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
Form1.Caption = lParam
If wParam = 257 Then
If lParam > 47 And lParam < 58 Then
Form1.Print lParam & vbTab & Chr(lParam) & vbTab & "Numero"
ElseIf lParam > 64 And lParam < 91 Then
If lParam = 65 Or lParam = 69 Or lParam = 73 Or lParam = 79 Or lParam = 85 Then
Form1.Print lParam & vbTab & Chr(lParam) & vbTab & "Letra Vocal"
Else
Form1.Print lParam & vbTab & Chr(lParam) & vbTab & "Letra Consonante"
End If
Else
Form1.Print lParam & vbTab & Chr(lParam) & vbTab & "Ni letra ni numero"
End If
End If
End Function
Muy interesante Dessa!! ;)
Le han hecho la tarea al usuario.
La proxima te pedimos permiso ...
un hook para una tarea ta simple, se complicaron mucho ..
PD: Si , ya le hicieron la tarea del cole xD
Cita de: Dessa en 24 Mayo 2010, 16:22 PM
Hola PsYkE1, otra opcion seria
me dirigia a PsYkE1, ya que se habló de un tema parecido en otro hilo del foro de VB6
mmmmm
Teneis razon, quizas le hice los deberes... :-\
Aun asi, me sirvio para aprender una cosa nueva... :)
Salu2!
Me parece que esta manera es mejor para determinar el tipo de caracter puesto que funciona con ê,ñ, etc.
Option Explicit
Private Declare Function IsCharAlpha Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharAlphaNumeric Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
'-1 - Error
' 0 - Symbol
' 1 - Vowel
' 2 - Consonant
' 3 - Number
Private Function CharacterKind(ByVal sChar As String) As Long
Dim bChar As Byte
If Len(sChar) = 1 Then
bChar = Asc(UCase(sChar))
If IsCharAlphaNumeric(bChar) Then
If IsCharAlpha(bChar) Then
Select Case bChar
Case 65, 69, 73, 79, 85
CharacterKind = 1
Case Else
CharacterKind = 2
End Select
Else
CharacterKind = 3
End If
End If
Else
CharacterKind = -1
End If
End Function
Puff, tremenda solución Cobein...! Me gusta...! :D
No conocía esas Apis, buen aporte.