1- 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.
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
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.