DUDAS: Tecla ALT, Función CASE, como GARDAR una cosa.

Iniciado por CRAB, 20 Julio 2005, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

CRAB

Hola gente:

Necesito saber unas cosillas:

1- Como puedo hacer que la tecla Alt esté pulsada todo el rato?

2- El programa que estoy haciendo es de criptografia por homofonía, y necesito dar tres valores distintos a cada letra, esos valores los pongo yo por defecto, pero el usuario debe de poder cambiarlos, como hago para que se puedan guardar, son aprox. unas 94 TextBoxs.

3- Mi tercera questión es que si yo tengo un TextBox con los números: 03 11 56, como puedo apretando un botón que se transformen en sus respectivas letras, he probado con case, pero solo me deja cambiar un número, es decir, si hay más de uno, no va.

Espero no haber causado muchos quebraderos de cabeza, muchas gracias, os espero...

_Sergi_

pues la verdad esque me he puesto loco para poderte responder a alguna de tus preguntas y me ha sido imposible  :(


creo recordar que un tal Guille, webmaster de una web con el mismo nombre, es considerado un experto en visual basic por muchos y que sin duda podría resolver tu problema.


espero haberte ayudado alguito  ;D
Proyecto de Ingeniero

Slasher-K

Citar1- Como puedo hacer que la tecla Alt esté pulsada todo el rato?

Existe las funciones GetKeyboardState y SetKeyboardState que permiten obtener y cambiar el estado de todas las teclas, respectivamente.

A estas funciones se le debe pasar el primer elemento de una matriz de Byte de 256 elementos, lo que se puede hacer es primero obtener el estado actual de las teclas, y luego cambiar el estado de Alt (constante VK_MENU o código de caracter 18) para llamar a SetKeyboardState con el nuevo estado.

El código seria algo asi:


Option Explicit
Option Base 1

Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Public Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

Const VK_MENU = 18&

Sub SetAltKey()
     Dim btKeys(256) As Byte
     Dim r&

  r = GetKeyboardState(btKeys(1))

  If r Then
    btKeys(VK_MENU) = 1
    r = SetKeyboardState(btKeys(1))
  End If
End Sub


Y llamar a este procedimiento usando un control Timer con su propiedad Interval establecida a un valor bajo.


Citar
2- El programa que estoy haciendo es de criptografia por homofonía, y necesito dar tres valores distintos a cada letra, esos valores los pongo yo por defecto, pero el usuario debe de poder cambiarlos, como hago para que se puedan guardar, son aprox. unas 94 TextBoxs.

Podrias usar un archivo (instrucciones Open, Put, Get), el registro (si es algo global) o una base de datos, eso según cómo lo quieras usar.

Supongo que habras creado los 94 TextBox en tiempo de diseño, y eso es muy lento y hace que el ejecutable final sea grandisimo. Si me equivoco corregime. Sino la forma correcta de hacer esto es crear los cuadros de texto dinámicamente utilizando la función Load.

Para hacer esto se crea un TextBox, se establece su propiedad Index a 0 y luego cuando se carga el programa (evento Load del formulario) se crean los nuevos controles.

Por ejemplo:


Private Sub Form_Load()
       Dim i%

  For i = 1 To 94
    Call Load(txtData(i))
   
    txtData(i).Top = txtData(i - 1).Top + txtData(i - 1).Height + 25
    txtData(i).Visible = True
   
    txtData(i).TabIndex = i
  Next

End Sub


Entonces txtData(0) va a ser la letra A, txtData(1) la B y asi consecutivamente. Entonces para guardarlo en un archivo es sencillo, te muestro un ejemplo de como podrias hacer:


Sub SaveData()
        Dim i%, hFile%

  hFile = FreeFile
 
  Open "C:\Datos.txt" For Binary As #hFile
 
  For i = 0 To txtField.Count - 1
    Put #hFile, , CInt(txtData(i))
  Next
 
  Close #hFile
End Sub


Y para leer los datos es casi lo mismo, pero en lugar de escribirlos directamente en los TextBox los ponemos en una matriz (ver la tercera pregunta)



Public iCharData() As Integer

Sub LoadData()
        Dim i%, hFile%
        Dim iData%

  hFile = FreeFile
 
  Open "C:\Datos.txt" For Binary As #hFile
 
  For i = 1 To txtField.Count
    Get #hFile, , iData

    ReDim Preserve iCharData(i) As Integer
 
    iCharData(i) = iData
    txtData(i -1) = iCharData(i)
  Next
 
  Close #hFile
End Sub



Citar
3- Mi tercera questión es que si yo tengo un TextBox con los números: 03 11 56, como puedo apretando un botón que se transformen en sus respectivas letras, he probado con case, pero solo me deja cambiar un número, es decir, si hay más de uno, no va.

Una vez que leimos los datos del archivo en la matriz iCharData, entonces es muy sencillo buscar el valor y reemplazarlo por la letra. Por ejemplo:


Function CodeToChar(Code As Integer) As String
        Dim i%

  For i = 1 To UBound(Code)
    If Code = iCharData(i) Then
      'El 1 seria la A, el 2 la B, y asi sucesivamente.
      '
      CodeToChar = Chr$(i + vbKeyA - 1)
     
      Exit For
    End If
  Next
End Function


Bueno es sólo una idea simple, luego podrías hacerlo un poco más complejo.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

el_chente23

¿Para que es el % en la declaracion de las variables?

Slasher-K

Es lo mismo que poner As Integer. Hay un reemplazo para varios tipos de variables (las mas usadas)

Integer    %
Long       &
Single     !
Double     #
Currency   @
String     $


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

kakinets

Hola

La duca tres de Remplasar los numerps por letras lo podes sulucionar con la opsion Replace Ahi va el Code



Text1 = Replace(Text1, "("00 "AA")
Text1 = Replace(Text1, ")"53"VD")


Esto es un ejemplo para q veas como se utilisa la opsion...

Suerte Man...

CRAB

Hola Manhur y pedronet, muchisimas gracias por contestarme, me habeis sido de mucha ayuda, pero, ahora refiriendome a Manhur:
Lo de crear las 94 textbox me sale, pero se crean todas en vertical, y necesito que se creen así:

A      text(0)   text(1)   text(2)
B      text(3)   text(4)   text(5)
C...

y aún así no hay espacio suficiente en la pantalla, pero si me puedes decir como hacerlo así, ya me va bien.

Y, pedronet, lo que me has comentado de la función Replace, me sale un fallo:  --Se esperaba: separador de listas o )--

Muchas gracias a los dos.

CRAB

Fe de erratas: Manhur era Anhur.   Lo siento Anhur