Shell 23-11-2021, 22:34
Buenas!

Hice un ejemplo para buscar en el contol listbox.
He usado dos controles, una caja de texto y un listbox.
He creado tres ejemplos.

Código Común:

Código:
Public Const NUMDEELEMENTOS As Integer = 100
Public valores As String[]

Public Sub LlenadoDelista() As String[]

  Dim n As Integer
  Dim i As Integer
  Dim nom As String
  Dim acadenas As New String[]

  For i = 0 To NUMDEELEMENTOS
    For n = 0 To 2
      nom &= Chr(Rand(65, 90))
    Next
    nom &= Format(Rand(1, 100), "000")
    acadenas.Add(nom)
    nom = ""
  Next

  Return acadenas

End

Primer ejemplo. Busca y muestra una coincidencia.

[Imagen: 7dxuHqa.png]

Código:
Public Sub Form_Open()

  Me.Text = "Busqueda en ListBox"
  lstElementos.List = Comun.LlenadoDelista()
  lstElementos.Sorted = True
  Comun.valores = lstElementos.List
  txtEntrada.SetFocus()

End

Public Sub txtEntrada_Change()

  Dim x As Integer
  Dim coincidencia As Boolean

  txtEntrada.Text = UCase(txtEntrada.Text)
  lstElementos.List = Comun.valores

  If Not IsNull(txtEntrada.Text) Then
    While x < lstElementos.count And Not coincidencia
      If InStr(Trim(Left(lstElementos[x].Text, Len(txtEntrada.text))), Trim(txtEntrada.Text)) <> 0 Then
        lstElementos.Index = x
        coincidencia = True
      Endif
      If Not coincidencia Then x += 1
    Wend
  Endif

End

Segundo Ejemplo. Busca y muestra una coincidencia.

Estoy interesado en este ya que usa una constante gb.like. El efecto cuando busca no siempre es correcto.
Imaginar que busco elementos que comienzan con la "z", pues hay veces que si hay más de una coincidencia, se salta el primero. Huh
El problema se encuentra en la constante que usa el método "find". O que no lo uso de una forma correcta.

[Imagen: U8d1Dwb.png]

Se ha saltado el primero.

Código:
Public Sub Form_Open()

  Me.Text = "Busqueda en ListBox"
  lstElementos.Sorted = True
  lstElementos.List = Comun.LlenadoDelista()
  Comun.valores = lstElementos.List
  txtEntrada.SetFocus()

End

Public Sub txtEntrada_Change()

  txtEntrada.Text = Trim(UCase(txtEntrada.Text))
  lstElementos.List = Comun.valores

  If Not IsNull(txtEntrada.text) Then lstElementos.Index = lstElementos.Find(txtEntrada.text & "*", gb.Like) 'No funciona siempre correctamente

End

Tercer ejemplo, muestra todos los elementos que coinciden con el texto que busco.


Código:
Public Sub Form_Open()

  Me.Text = "Busqueda en ListBox"
  lstElementos.List = Comun.LlenadoDelista()
  lstElementos.Sorted = True
  Comun.valores = lstElementos.List
  txtEntrada.SetFocus()

End

Public Sub txtEntrada_Change()

  Dim x As Integer
  Dim listaencontrados As New String[]

  txtEntrada.Text = UCase(txtEntrada.Text)
  lstElementos.List = Comun.valores

  If Not IsNull(txtEntrada.text) Then
    If lstElementos.Count > 0 Then
      For x = 0 To lstElementos.Count - 1
        If InStr(Left(lstElementos[x].Text, Len(txtEntrada.Text)), txtEntrada.Text) > 0 Then
          lstElementos.Index = x
          listaencontrados.Add(lstElementos[lstElementos.Index].Text)
        Endif
      Next
      lstElementos.List = listaencontrados
    Else
      lstElementos.Index = -1
    Endif
  Endif

End

Os subo el ejemplo. Tiene tres formularios, seleccionar uno de ellos y o bien ejecutarlo como correr esta clase ó como clase de inicio.

Saludos
Archivos adjuntos
.gz
BusquedaEnListBox-0.0.1.tar.gz (Tamaño: 12.78 KB Descargas: 4)
Shell 23-11-2021, 22:05
Buenas!.

En realidad es una pregunta para nuestro administrador.  Pero como es un tema que puede interesar a los usuarios del foro
prefiero publicarlo aquí.

Cuando ser crea un mensaje y no lo has creado tu mismo como usuario del foro, hay una forma de poder seguir los nuevos
mensajes a al tema, que es subscribirse al tema. La forma de recibir el aviso es o bien por mail o bien por un mensaje privado
en el propio foro.

Como por mail puede algún servidor tomarlo por spam pues puede que no sea la opción más adecuada.
Entonces mejor por mensaje privado.

Esto lo podemos ver si leemos un poco en las normas básicas del uso del foro de la comunidad.
El icono suele estar en la esquina inferior al final de todos los mensajes.

Me he encontrado un problema, a la hora de suscribirme me salta un mensaje tal que como que no encuentra la página.

Aquí debería añadir la dirección web pero no la muestro por si es un fallo de seguridad y primero que el administrador la vea
y que nos cuente. Así de paso nos enteramos si tenemos disponible esa opción o mejor usamos los marcadores del navegador.

Saludos
Shell 22-11-2021, 17:36
Buenas!.

Pues en este ejemplo es donde estuve "complicándome" con el carácter de tabulación.
Hice un ejemplo en Gambas donde usaba dos colores y luego con los "mismos colores" y también el mismo ejemplo pero
para Python con la librería Tk.

Con Gambas:

[Imagen: DwPrv1D.png]

Con Python y la librería TkInter:

[Imagen: 4WpY9e5.png]

Aunque el nombre de la constante es el mismo para los colores, la configuración no lo es.
En TkInter es como más apagado.

Así que encontré un archivo en /usr/share/X11/rgb.txt

Donde se encuentran todas las configuraciones de colores y creé un ejemplo para poder leerlas.
¿ Sabéis cuantas configuraciones encontré con nombres distintos y configuraciones que podían ser iguales ?
Un total de: 753 configuraciones!.

Y es que podemos encontrar por ejemplo: "floral white" y "FloralWhite"...

Entonces construí una especie de diccionario de sinónimos. Una colección invertida.

Original, ejemplo, parte:

[Imagen: QCibQOY.png]


Y con la inversión puede ser así:

[Imagen: fErYsu9.png]

Código:
Public Sub Form_Open()

  Dim fichero As String
  Dim ruta As String = "/usr/share/X11/rgb.txt"
  Dim linea As String
  Dim nombredelcolor As String
  Dim posicion As Integer
  Dim ccolores As New Collection
 
  Try fichero = File.Load(ruta)

  For Each linea In Split(fichero, "\n", "'", True, False)
    If Left(linea, 1) = "!" Or IsNull(linea) Then
      Continue
    Else
      'Lugar donde se encuentra el primer caracter tabulador por la derecha
      posicion = RInStr(linea, "\t")
      'El nombre del color se encuentra en una posición más allá del caracter tabulador hasta el final
      nombredelcolor = Mid(linea, posicion + 1)
      'La nueva linea de texto ya no va a contener el nombre del color
      linea = Trim(Left(linea, posicion))
      'Sustituyo todos los caracteres de tabulación por espacios
      linea = Replace(linea, "\t", " ")
      'Añado los valores RGB en decimal como texto y como clave el nombre del color
      ccolores.Add(linea, nombredelcolor)            
    Endif
  Next

  If Error Then
    Print Subst("No encontré el archivo &1 en &2", Split(ruta, "/").last, ruta)
  Else
    Print "He encontrado " & ccolores.Length & " configuraciones de colores con repetición." '753
  Endif
 
  InvertirColeccion(ccolores)
 
End

Public Function InvertirColeccion(clavevalor As Collection) As Collection
    
  Dim valores_clave As New Collection
  Dim valor As String
  Dim clave As String
  Dim aclaves As String[]
 
  For Each valor In clavevalor
    'Obtengo una clave
    clave = clavevalor.Key
    'Compruebo que el valor no existe como clave en valores_clave
    If Not valores_clave.Exist(valor) Then
      'En caso de no existir. Creo un array que va contener las claves que sus valores son iguales
      aclaves = New String[]
      aclaves.Add(clave)
      'Asigno a la coleccion como valores el array de claves y como clave el valor que es el mismo con las claves de clavevalor
      valores_clave[valor] = aclaves
    Else
      'Si ya existe una clave valor, añado otra clave de clavevalor al array
      valores_clave[valor].Add(clave)      
    Endif
  Next
  Print "He encontrado " & valores_clave.Length & " configuraciónes de colores sin repetición " '505
 
  Return valores_clave
 
End


Y ahora pues estoy intentando crear un ejemplo que me muestre en pantalla todas esas configuraciones con colores. Smile
Os subo la parte que maneja las colecciones con los colores.

Saludos
Archivos adjuntos
.gz
ColoresDelSistema-0.0.1.tar.gz (Tamaño: 12.93 KB Descargas: 1)
Páginas (557):    1 345 346 347 348 349 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 286
Último miembro: Emilio Uribe
Temas del foro: 1,720
Mensajes del foro: 8,935
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 277
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 337
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,608
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 311
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.