Programación General > Visual Basic 6.0 e inferiores
Duda Con String
Juanolo:
Hola, Joselito.
Me parece muy interesante tu idea..., y entusiasmante a la vez. Siento no tener un Visual cerca, pues como soy sólo un aficionado, mi código podría no resultar exacto sin que Visual me esté recordando mis errores.
Bueno, mi aporte es el siguiente (si gustas):
1º, me quedo con la primera parte del código de Shiquilla con una pequeña corrección para el caso de los espacios separadores de palabras. Es decir:
--- Código: Text ---Dim lnI As IntegerDim lsLetra As StringDim lsFrase As String lsFrase = Text1.Text For lnI = 1 To Len(lsFrase) Step 1 lsLetra = Mid(lsFrase, lnI, 1) if lsLetra=" " then Sleep 500 Else msTratarLetra lsLetra Endif Next lnI
Notas: Esto es para el caso de que quieras traducir una cadena que ya està en un TextBox. Si quieres traducir a medida que presionas las letras necesitas usar KeyPress; pero creo que esto esta bien. Tengo dudas con la funciòn Sleep (o Wait.., o algo así; como te explicaba, no tengo un visual cerca). Lo que pretendo que haga es esperar 500 milisegundos antes de continuar con la siguiente instrucción.
Lo que cambiaría sería el procedimiento msTratarletra. Pero antes, agregaremos el siguiente procedimiento para manejar destellos:
--- Código: Text ---Private sub Destellar(CodDestello as String) Dim i as integer, MlEsperar as integer For i=1 to len(CodDestello) if mid(CodDestello,i,1)="0" then MlEsperar=150 'Espera 150 milisegundos manteniendo el Shape blanco Else MlEsperar=300 'Espera el Doble (Raya. El anterior era Punto) Endif 'Hago Destellar por el tiempo que corresponda 'Tomando tu idea del Shape Shape.FillColor=vbWhite'Blanco Sleep MlEsperar Shape.FillColor=vbBlack 'Negro (vuelve al color original) Next iEnd Sub
Donde CodDestellos es una cadena de 0s y 1s que indicará si se trata de un Punto o una Raya.
Así, por ejemplo, una S sería "000", una O serìa "111" (Dije POR EJEMPLO, no sé Morse)
Ahora retomamos la funciòn msTratarLetra:
--- Código: Text ---Private Sub msTratarLetra(lsLetra As String) Select Case lsLetra Case "S" Destellar "000" Case "O" Destellar "111" 'Etcètera End Select
Nota que al asignar 0s y 1s te evitas....
Espero que sirva al menos como idea. A mi tu pregunta me ha servido pa' sacudir un poco las neuronas.
Salu2.
Pd: En cuanto tenga tiempo lo intento.
Juanolo:
Bueno, ya te había dicho que sin Visual pa que me corrija cometo equivocaciones.
Primero, me faltaba declarar 'Sleep', que es API... y otras pequeñas cosillas para que funcione como yo quería. Así es que te incluyo un nuevo código con el que me estuve entreteniendo.
Te adjunto, además, el proyecto, por si quieres probar como funciona la idea sin tener que darte la lata de copiar y pegar (je).
--- Código: Text ---Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub Command1_Click() Dim Lni As Integer Dim lsLetra As String Dim lsFrase As String Text1.SetFocus Screen.MousePointer = vbHourglass lsFrase = Text1.Text For Lni = 1 To Len(lsFrase) Step 1 lsLetra = Mid(lsFrase, Lni, 1) 'Un pequeño lujillo, pa que vaya marcando la letra que está leyendo. 'También la podrías mostrar en una etiqueta... Pero nada de esto es necesario. Text1.SelStart = Lni - 1 Text1.SelLength = 1 If lsLetra = " " Then Sleep 500 ' Para separar palabras Else msTratarLetra lsLetra Sleep 300 'Para separar códigos entre letras End If Next Lni Screen.MousePointer = vbDefaultEnd Sub Private Sub Destellar(CodDestello As String) Dim i As Integer, MlEsperar As Integer For i = 1 To Len(CodDestello) If Mid(CodDestello, i, 1) = "0" Then MlEsperar = 150 'Espera 150 milisegundos manteniendo el Shape blanco Else MlEsperar = 300 'Espera el Doble (Raya. El anterior era Punto) End If 'Hago Destellar por el tiempo que corresponda Sleep MlEsperar 'Para que se mantenga el negro el tiempo suficiente Shape1.BackColor = vbWhite 'Blanco Beep DoEvents 'Necesario para que se muestre en el formulario Sleep MlEsperar Shape1.BackColor = vbBlack 'Negro (vuelve al color original) DoEvents Next iEnd Sub Private Sub msTratarLetra(lsLetra As String) 'Primero pongo la letra en mayúscula para una fácil comparación lsLetra = UCase(lsLetra) Select Case lsLetra Case "A" Destellar "01" Case "B" Destellar "1000" Case "C" Destellar "1010" Case "D" Destellar "100" Case "E" Destellar "0" Case "F" Destellar "0010" Case "G" Destellar "110" Case "H" Destellar "0000" Case "I" Destellar "00" Case "J" Destellar "0111" Case "K" Destellar "101" Case "L" Destellar "0100" Case "M" Destellar "11" Case "N" Destellar "10" Case "O" Destellar "111" Case "P" Destellar "0110" Case "Q" Destellar "1101" Case "R" Destellar "010" Case "S" Destellar "000" Case "T" Destellar "1" Case "U" Destellar "001" Case "V" Destellar "0001" Case "W" Destellar "011" Case "X" Destellar "1001" Case "Y" Destellar "1011" Case "Z" Destellar "1100" End SelectEnd
Salu2
Pd: Aquí va el código... Espero que subas o me envíes al correo el proyecto terminado.
Navegación
[*] Página Anterior
Ir a la versión completa