Comunidad Gambas-es
Configuración de colores que usa el sistema. - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Configuración de colores que usa el sistema. (/thread-735.html)



Configuración de colores que usa el sistema. - Shell - 22-11-2021

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