Comunidad Gambas-es

Versión completa: Averiguando el nombre de la imagen del stock asociada a un control
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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
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.
Acomodé un poco la función así:

GAMBAS
  1. '' This takes a while. In theory it should only be executed once on the first execution of the project.
  2.  
  3. Public Sub ExtractStockIcons2() 
  4.  
  5.   Dim sIcon As String
  6.   Dim hPic As Picture
  7.  
  8.   For Each px In ["16", "22", "24", "32"]
  9.     If Not Exist($path &/ px) Then
  10.       Shell "mkdir -p " & $path &/ px Wait
  11.     Endif
  12.     For Each sIcon In Stock.Icons
  13.       hPic = Stock[px &/ sIcon]
  14.       hpic.Save($Path &/ px &/ sIcon & ".png")
  15.     Next
  16.   Next
  17.  



Hay que echar un vistazo al archivo icon.map que parece contener la rutas de los iconos en el sistema.
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:
GAMBAS
  1. Public Sub CreateShaSums()    'This takes a while. In theory it should only be executed once On the first execution Of the project.
  2.  
  3.   Dim sIcon, sum, px As String
  4.   Dim aSums As New String[]
  5.  
  6.   For Each sIcon In Stock.Icons
  7.     For Each px In ["16", "22", "24", "32"]
  8.       Exec ["shasum", $Path &/ px &/ sIcon & ".png"] To sum
  9.       aSums.Add(Split(sum, " ")[0] & "|" & px &/ sIcon)
  10.     Next
  11.   Next
  12.   File.Save($Path &/ "PicShaSums", aSums.Join(gb.NewLine))
  13.  



Saludos
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.
(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
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
GAMBAS
  1. Left(sum, InStr(sum, " ") - 1)



en lugar de

GAMBAS
  1. split(sum," ")[0]



que usaba en la versión anterior.

Saludos