Comunidad Gambas-es
Averiguando el nombre de la imagen del stock asociada a un control - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Averiguando el nombre de la imagen del stock asociada a un control (/thread-1239.html)



Averiguando el nombre de la imagen del stock asociada a un control - Shordi - 21-02-2023

Pues eso, que si en algún momento os interesa el nombre de la imagen que se asignó a un control en tiempo de diseño, aquí tenéis un modo de saberlo.
Supongo que es algo que a nadie interesa, pero ya que lo he hecho y me ha costado un buebo encontrar la manera, pues no me resisto a hacerla pública aquí.

El proyecto adjunto hace lo siguiente:

Si no existe la carpeta user.home/StockIcons:
  -La crea y la rellena con todos los iconos del Stock de Gambas.
  -Luego crea un archivo de texto llamado PicShaSums con el shasum de todos los iconos.
Estos dos pasos tardarán un rato (son más de 1.800 iconos).

Después, cuando se necesita (en el ejemplo es cuando se hace click en uno de los botones), se llama a la función que devuelve el nombre del icono asociado al control pasado.
Al cerrar el programa os da opción a eliminar la carpeta creada. Si no se borra, en las siguientes ejecuciones es muy rápido.

Repito que, salvo Tincho, quizá, no creo que os sirva de nada... pero ahí está.

Saludos


RE: Averiguando el nombre de la imagen del stock asociada a un control - tincho - 21-02-2023

Hola,
Este fin de semana no pude mirar nada y recién hoy pude conectarme.
Por lo que veo Shordi ha revolucionado el mundo del ícono gambero  Big Grin
Me parace interesante lo de usar SHA de los archivos para identificar las imágenes, así que le echaré un vistazo.
Respecto a los Tag de los controles, si usas el tag para otra cosa diferente que para guardar el nombre del icono, puedes definir el Tag como String[] o Collection, ya que la propiedad Tag es variant.

Gracias por compartir.


RE: Averiguando el nombre de la imagen del stock asociada a un control - tincho - 21-02-2023

Acomodé un poco la función así:

Código:
'' This takes a while. In theory it should only be executed once on the first execution of the project.

Public Sub ExtractStockIcons2() 

  Dim sIcon As String
  Dim hPic As Picture

  For Each px In ["16", "22", "24", "32"]
    If Not Exist($path &/ px) Then
      Shell "mkdir -p " & $path &/ px Wait
    Endif
    For Each sIcon In Stock.Icons
      hPic = Stock[px &/ sIcon]
      hpic.Save($Path &/ px &/ sIcon & ".png")
    Next
  Next

End

Hay que echar un vistazo al archivo icon.map que parece contener la rutas de los iconos en el sistema.


RE: Averiguando el nombre de la imagen del stock asociada a un control - Shordi - 21-02-2023

Cita:Acomode un poco la funcion así:
Más elegante, sí señor. Te la robo.

Saludos

Y en la misma línea cambiamos esta:
Código:
Public Sub CreateShaSums()    'This takes a while. In theory it should only be executed once On the first execution Of the project.

  Dim sIcon, sum, px As String
  Dim aSums As New String[]

  For Each sIcon In Stock.Icons
    For Each px In ["16", "22", "24", "32"]
      Exec ["shasum", $Path &/ px &/ sIcon & ".png"] To sum
      aSums.Add(Split(sum, " ")[0] & "|" & px &/ sIcon)
    Next
  Next
  File.Save($Path &/ "PicShaSums", aSums.Join(gb.NewLine))

End

Saludos


RE: Averiguando el nombre de la imagen del stock asociada a un control - Grandamakulo - 22-02-2023

Reconozco que me será útil sólo como curiosidad. Eso sí, tiene narices lo de llamarse Picha Suma. Parece un fantasma de barra de bar, jajaja.



RE: Averiguando el nombre de la imagen del stock asociada a un control - Shordi - 22-02-2023

(22-02-2023, 10:54)Grandamakulo escribió:
Reconozco que me será útil sólo como curiosidad. Eso sí, tiene narices lo de llamarse Picha Suma. Parece un fantasma de barra de bar, jajaja.

No hablemos de juegos de palabras con los nombres... no hablemos... Big Grin Big Grin Big Grin Big Grin Big Grin


RE: Averiguando el nombre de la imagen del stock asociada a un control - Shordi - 23-02-2023

Revisando el tema, he decidido sustituir el archivo que a Grandamakulo tanta gracia le hacía por un archivo de la clase Settings. Es lo mismo que hice antes con los Shasums, pero dejando a la clase Settings el tema de recuperación y grabación del mismo. Me parece más pulcro y coherente.

También le he acortado algo el tiempo de ejecución usando
Código:
Left(sum, InStr(sum, " ") - 1)

en lugar de

[code]

que usaba en la versión anterior.

Saludos