Este ejemplo es un parecido al que encontré en la comunidad francesa.
Pero no es exactamente igual.
En este ejemplo, tenemos una lista de las funciones del basic de Zx Spectrum.
Si escribimos directamente, letra a letra, estas van apareciendo en la etiqueta, formando una palabra.
Esta palabra se busca en la lista y se sitúa en ella si existe. Si usamos la tecla retroceso, se va eliminando
por la derecha una letra de la palabra formada.Cuando la longitud de la palabra es cero, desaparece
la selección de la lista.
Luego también tenemos la caja de texto en la que escribimos directamente la palabra a buscar.
Código:
' gambas class file
Private palabra As String
Public Sub _new()
End
Public Sub Form_Open()
Me.Center
Me.Caption = "BASIC SINCLAIR"
'Llenamos la lista
llenarlista(lstLista)
palabra = ""
End
Public Sub llenarlista(lista As ListBox)
With lista
.Add("ABS")
.Add("ACS")
.Add("AND")
.Add("ASN")
.Add("AT")
.Add("ATN")
.Add("ATTR")
.Add("BEEP")
.Add("BIN")
.Add("BORDER")
.Add("BRIGHT")
.Add("CAT")
.Add("CHR$")
.Add("CIRCLE")
.Add("CLEAR")
.Add("CLOSE#")
.Add("CLS")
.Add("CODE")
.Add("CONT")
.Add("COPY")
.Add("COS")
.Add("DATA")
.Add("DEF FN")
.Add("DIM")
.Add("DRAW")
.Add("ERASE")
.Add("EXP")
.Add("FLASH")
.Add("FN")
.Add("FOR")
.Add("FORMAT")
.Add("GOSUB")
.Add("GOTO")
.Add("IF")
.Add("IN")
.Add("INK")
.Add("INKEY$")
.Add("INPUT")
.Add("INT")
.Add("INVERSE")
.Add("LEN")
.Add("LET")
.Add("LINE")
.Add("LIST")
.Add("LLIST")
.Add("LN")
.Add("LPRINT")
.Add("MERGE")
.Add("MOVE")
.Add("NEW")
.Add("NEXT")
.Add("NOT")
.Add("OPEN#")
.Add("OR")
.Add("OUT")
.Add("OVER")
.Add("PAPER")
.Add("PAUSE")
.Add("PEEK")
.Add("PI")
.Add("PLOT")
.Add("POINT")
.Add("POKE")
.Add("PRINT")
.Add("RANDOMIZE")
.Add("READ")
.Add("REM")
.Add("RESTORE")
.Add("RETURN")
.Add("RND")
.Add("RUN")
.Add("SAVE")
.Add("SCREEN$")
.Add("SGN")
.Add("SIN")
.Add("SQR")
.Add("STEP")
.Add("STOP")
.Add("STR$")
.Add("TAB")
.Add("TAN")
.Add("THEN")
.Add("TO")
.Add("USR")
.Add("VAL")
.Add("VAL$")
.Add("VERIFY")
End With
lista.Sorted = True
End
Public Sub txtNombre_KeyRelease()
Dim x As Integer
If Key.Code <> Key.BackSpace And lstLista.Count <> 0 Then
For x = 0 To lstLista.Count - 1
If InStr(Left(UCase(lstLista[x].Text), Len(txtNombre.Text)), UCase(txtNombre.Text)) <> 0 Then
lstLista.Index = x
Return
Endif
Next
Else
If Len(txtNombre.Text) = 0 Then lstLista.Index = -1
Return
Endif
End
Public Sub lstLista_KeyRelease()
Dim x As Integer
'Si la lista contiene más de un elemento
If lstLista.Count > 1 Then
'Si la tecla retroceso es pulsada
Select Case (Key.Code)
Case Key.BackSpace
'Eliminamos una letra de la variable palabra
palabra = Left(palabra, Len(palabra) - 1)
Case Else
'Añadimos una letra a la variable palabra
palabra &= Chr$(Key.Code)
End Select
'Mostramos en la etiqueta el contenido de la variable palabra
lbpalabra.Text = palabra
If Len(palabra) = 0 Then
'Si la longitud de la palabra es 0, no selecciones ningún elemento.
lstLista.Index = -1
Return
Endif
For x = 0 To lstLista.Count - 1
'Si la subcadena se encuentra en la cadena
If InStr(Left(UCase(lstLista[x].Text), Len(palabra)), UCase(palabra)) <> 0 Then
'Situate en el elemento x de la lista
lstLista.Index = x
Return
Endif
Next
Else
'Lista vacia
Message.Info("No existen elementos en la lista")
Return
Endif
End
Public Sub btnSalir_Click()
Me.Close
End
Private palabra As String
Public Sub _new()
End
Public Sub Form_Open()
Me.Center
Me.Caption = "BASIC SINCLAIR"
'Llenamos la lista
llenarlista(lstLista)
palabra = ""
End
Public Sub llenarlista(lista As ListBox)
With lista
.Add("ABS")
.Add("ACS")
.Add("AND")
.Add("ASN")
.Add("AT")
.Add("ATN")
.Add("ATTR")
.Add("BEEP")
.Add("BIN")
.Add("BORDER")
.Add("BRIGHT")
.Add("CAT")
.Add("CHR$")
.Add("CIRCLE")
.Add("CLEAR")
.Add("CLOSE#")
.Add("CLS")
.Add("CODE")
.Add("CONT")
.Add("COPY")
.Add("COS")
.Add("DATA")
.Add("DEF FN")
.Add("DIM")
.Add("DRAW")
.Add("ERASE")
.Add("EXP")
.Add("FLASH")
.Add("FN")
.Add("FOR")
.Add("FORMAT")
.Add("GOSUB")
.Add("GOTO")
.Add("IF")
.Add("IN")
.Add("INK")
.Add("INKEY$")
.Add("INPUT")
.Add("INT")
.Add("INVERSE")
.Add("LEN")
.Add("LET")
.Add("LINE")
.Add("LIST")
.Add("LLIST")
.Add("LN")
.Add("LPRINT")
.Add("MERGE")
.Add("MOVE")
.Add("NEW")
.Add("NEXT")
.Add("NOT")
.Add("OPEN#")
.Add("OR")
.Add("OUT")
.Add("OVER")
.Add("PAPER")
.Add("PAUSE")
.Add("PEEK")
.Add("PI")
.Add("PLOT")
.Add("POINT")
.Add("POKE")
.Add("PRINT")
.Add("RANDOMIZE")
.Add("READ")
.Add("REM")
.Add("RESTORE")
.Add("RETURN")
.Add("RND")
.Add("RUN")
.Add("SAVE")
.Add("SCREEN$")
.Add("SGN")
.Add("SIN")
.Add("SQR")
.Add("STEP")
.Add("STOP")
.Add("STR$")
.Add("TAB")
.Add("TAN")
.Add("THEN")
.Add("TO")
.Add("USR")
.Add("VAL")
.Add("VAL$")
.Add("VERIFY")
End With
lista.Sorted = True
End
Public Sub txtNombre_KeyRelease()
Dim x As Integer
If Key.Code <> Key.BackSpace And lstLista.Count <> 0 Then
For x = 0 To lstLista.Count - 1
If InStr(Left(UCase(lstLista[x].Text), Len(txtNombre.Text)), UCase(txtNombre.Text)) <> 0 Then
lstLista.Index = x
Return
Endif
Next
Else
If Len(txtNombre.Text) = 0 Then lstLista.Index = -1
Return
Endif
End
Public Sub lstLista_KeyRelease()
Dim x As Integer
'Si la lista contiene más de un elemento
If lstLista.Count > 1 Then
'Si la tecla retroceso es pulsada
Select Case (Key.Code)
Case Key.BackSpace
'Eliminamos una letra de la variable palabra
palabra = Left(palabra, Len(palabra) - 1)
Case Else
'Añadimos una letra a la variable palabra
palabra &= Chr$(Key.Code)
End Select
'Mostramos en la etiqueta el contenido de la variable palabra
lbpalabra.Text = palabra
If Len(palabra) = 0 Then
'Si la longitud de la palabra es 0, no selecciones ningún elemento.
lstLista.Index = -1
Return
Endif
For x = 0 To lstLista.Count - 1
'Si la subcadena se encuentra en la cadena
If InStr(Left(UCase(lstLista[x].Text), Len(palabra)), UCase(palabra)) <> 0 Then
'Situate en el elemento x de la lista
lstLista.Index = x
Return
Endif
Next
Else
'Lista vacia
Message.Info("No existen elementos en la lista")
Return
Endif
End
Public Sub btnSalir_Click()
Me.Close
End
La idea es crear como un diccionario de estas palabras, con la función que hacían.
El formato de la instrucción,distribución en el teclado,etc.
Otra posibilidad es que esa lista este en un array, a la hora de escribir la palabra en un "posible" editor, aparezca la palabra directamente sin apenas escribirla.
¿ Que por que lo de Spectrum ?, Ah, es que soy un nostálgico de esas maquinas y como la lista era un poco larga.
Comentar que el evento KeyRelease, me fue mejor que el KeyPress.
Según parece el primer elemento que se coloca en el formulario es el que tiene el foco.Por eso el Listbox responde nada mas pulsar una tecla.
Y el código fuente.
Saludos
BuscarEnLista.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | BuscarEnLista.tar.gz | |
Tamaño: | 7.77 KB | |
Descargado: | 89 veces |
BuscarEnLista.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | BuscarEnLista.tar.gz | |
Tamaño: | 7.77 KB | |
Descargado: | 89 veces |
BuscarEnLista.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | BuscarEnLista.tar.gz | |
Tamaño: | 7.77 KB | |
Descargado: | 89 veces |