Programación General > Visual Basic 6.0 e inferiores

 Duda Con String

<< < (2/2)

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=&#34; &#34; 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)=&#34;0&#34; 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 &#34;S&#34;       Destellar &#34;000&#34;     Case &#34;O&#34;       Destellar &#34;111&#34;     '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 &#34;kernel32&#34; (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 = &#34; &#34; 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) = &#34;0&#34; 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 &#34;A&#34;        Destellar &#34;01&#34;    Case &#34;B&#34;        Destellar &#34;1000&#34;    Case &#34;C&#34;        Destellar &#34;1010&#34;    Case &#34;D&#34;        Destellar &#34;100&#34;    Case &#34;E&#34;        Destellar &#34;0&#34;    Case &#34;F&#34;        Destellar &#34;0010&#34;    Case &#34;G&#34;        Destellar &#34;110&#34;    Case &#34;H&#34;        Destellar &#34;0000&#34;    Case &#34;I&#34;        Destellar &#34;00&#34;    Case &#34;J&#34;        Destellar &#34;0111&#34;    Case &#34;K&#34;        Destellar &#34;101&#34;    Case &#34;L&#34;        Destellar &#34;0100&#34;    Case &#34;M&#34;        Destellar &#34;11&#34;    Case &#34;N&#34;        Destellar &#34;10&#34;    Case &#34;O&#34;        Destellar &#34;111&#34;    Case &#34;P&#34;        Destellar &#34;0110&#34;    Case &#34;Q&#34;        Destellar &#34;1101&#34;    Case &#34;R&#34;        Destellar &#34;010&#34;    Case &#34;S&#34;        Destellar &#34;000&#34;     Case &#34;T&#34;       Destellar &#34;1&#34;     Case &#34;U&#34;       Destellar &#34;001&#34;     Case &#34;V&#34;       Destellar &#34;0001&#34;     Case &#34;W&#34;       Destellar &#34;011&#34;     Case &#34;X&#34;       Destellar &#34;1001&#34;     Case &#34;Y&#34;       Destellar &#34;1011&#34;     Case &#34;Z&#34;       Destellar &#34;1100&#34;    End SelectEnd  
Salu2

Pd: Aquí va el código... Espero que subas o me envíes al correo el proyecto terminado.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa