Shordi   16-02-2023, 21:32
#1
Tengo un problema con este componente: La mitad de sus iconos son nulos.
Si escarbáis en el código del gb.form.stock encontraréis estos dos directorios "gambas" y "gambas-mono" que en sus subdirectorios 32 tienen cada uno 442 elementos.
[Imagen: n6DxNCO.png]

Vale, me interesan esos iconos, tanto los de gambas/32 como los de gambas-mono/32. Quiero que mi aplicación disponga de ellos para usarlos según conviene. Se supone que la clase Picture --que es la puerta de acceso a gb.form.stock-- en su propiedad Icons te da una lista de todos los disponibles y que puedes acceder a ellos con éste código tomado de gambaswiki.org:

Código:
Private Sub DisplayIcons()

  Dim iconKey As String
  Dim iconName As String

  IconViewIcons.Clear()

  For Each iconKey In Stock.Icons

    iconName = "icon:/medium/" & iconKey
    IconViewIcons.Add(iconKey, iconKey, Picture[iconName])

  Next
End

Bien, si lo ejecuto, devuelve una lista de 470 elementos, de los cuales sólo son visibles y por tanto extraíbles 275, el resto devuelven Null. Pero los que se extraen son distintos a su vez de los que se almacenan en el código fuente del gb.form.stock.
Aquí muestro de izquierda a derecha: Los gambas, los gambas-mono y los que he extraído del Stock vía un código similar al de arriba.
[Imagen: wDxKtAm.png]

Sin embargo si en el IDE pulsáis en el botoncito de las propiedades de un elemento que tenga la propiedad picture, como un button por ejemplo, la pantallita que aparece ofrece 470 iconos que son los de la ventana de la derecha más todos los que en el código son null.
Antes de tener que cargar una de las carpetas de la izquierda o del centro, o ambas, en mi programa: ¿Alguien sabe de dónde saca Gambas esos 470 iconos al mostrar el Stock?

Tengo otro problema más, con los iconos, que no os cuento porque depende de la solución a éste...

Saludos
Última modificación: 17-02-2023, 10:55 por Shordi.

No podemos regresar
tincho   17-02-2023, 12:13
#2
Si saber mucho del tema de los iconos de stock, puedo suponer que tal vez tengan muchos iconos que apunten a archivos del sistema, es decir tal vez son enlaces simbolicos, y si no esta instalada la coleccion de iconos esperada entonces el enlace devuelve null. Pero, repito, no se del tema.
Lo que into decir es que la Stock.Icons pueden llegar a ser "física cuantica" podes saber donde esta el electrón pero no como es o... podes saber como es pero no donde esta. Big Grin

Para saber de este tema en mas detalle hay que hacer un pequeño proyecto que muestre los iconos de Stock en una ventana, preparo algo y lo subo, con pantallazo de lo que hay en mi sistema.

1 Saludo.
tincho   17-02-2023, 16:44
#3
En el directorio del las fuentes existen todos los iconos que describes (Stock.Icons).
La incognita es ¿Donde copia esos archivos el instalador de gambas?

Esto es lo que aparece en mi sistema.
[Imagen: NyVfWHK.png]
Archivos adjuntos
.gz
controls-stock-icons-0.0.1.tar.gz (Tamaño: 12.11 KB Descargas: 1)
Última modificación: 17-02-2023, 16:46 por tincho.

1 Saludo.
Shordi   17-02-2023, 19:22
#4
Cita:La incognita es ¿Donde copia esos archivos el instalador de gambas?
Bueno, tengo mi teoría: los 273 que aparecen con icono en la clase Picture, que corresponden con los del set de la derecha que puse antes, los saca del stock/Icons/32 los demás del Stock/Icons/gambas-mono. Luego el tema de Escritorio QT o GTK elegido, "Sobreescribe" aquellos coincidentes en, supongo, nombre.
Para mi problema, es suficiente base para trabajar.

Esto me lleva a la siguiente pregunta:

¿Cómo averiguar vía código qué icono lleva un control (un button, por ejemplo)?

Normalmente las propiedades Picture de los controles son del tipo Picture. En el fichero .Form que los contenga aparecen como una cadena de texto tipo "icon:32/directory" pero esa cadena no está disponible en tiempo de ejecución (si se ejecuta desde el IDE sí, pero eso no es válido con el ejecutable compilado). Por tanto en tiempo de ejecución tengo un control que dispone de una propiedad Picture que contiene un objeto de clase Picture, que no tiene nombre ni nada parecido asociado a ella. ¿Cómo saber qué icono es el asociado?
Soluciones que se me ocurren
A) Para cualquier tipo de control que use Picture:
    -Nombra al control total o parcialmente igual que el icono. Así un botón que se llame "add", tendrá asociado el "icon:32/add" o el fichero .png que se llame add.png esté donde esté. Si tienes más de un control con el mismo icono en el mismo formulario, hazlo parcialmente así uno llamado "_add",otro "BtnStock_add" y otro llamado "BtnAddPicture_add"  podrían compartir el icono de añadir.

    Algo así he estado utilizando hasta ahora, pero como me parece un poco chapuza he intentado varias cosas entre las que destacan:

B) Cuando creas controles propios:

    - Cambiar el tipo de la propiedad Picture a un String que contenga el path al fichero .png o el nombre de un icono del Stock y que sea tu propio control se encargue luego de buscar y cargar el icono. (El problema con la primera solución es que en tiempo de diseño no dispones de esa pantallita para elegir el icono del stock y tendrías que asignar el nombre del icono de memoria.)

    - Añadir una propiedad tipo String (algo así como la propiedad tag) donde almacenar el nombre del archivo.png o del icono del Stock y rellenarla de manera simultánea a la hora de asignar el Icono. (El problema con la esta es que la veo engorrosa y un poco chapuza)

A falta de algo mejor, creo que aplicando la navaja de Occam, me decantaré por la A, aunque no me guste demasiado.

Se admiten (aceptan/necesitan/agradecen/piden/suplican) ideas, sugerencias y soluciones.

Saludos

No podemos regresar
tincho   17-02-2023, 22:39
#5
(17-02-2023, 19:22)Shordi escribió: A) Para cualquier tipo de control que use Picture:
    -Nombra al control total o parcialmente igual que el icono. Así un botón que se llame "add", tendrá asociado el "icon:32/add" o el fichero .png que se llame add.png esté donde esté. Si tienes más de un control con el mismo icono en el mismo formulario, hazlo parcialmente así uno llamado "_add",otro "BtnStock_add" y otro llamado "BtnAddPicture_add"  podrían compartir el icono de añadir.

    Algo así he estado utilizando hasta ahora, pero como me parece un poco chapuza he intentado varias cosas entre las que destacan:

Yo lo que hago es ponerle "add" en la propiedad Tag del botón luego con ese parametro haces lo que quieras ya que siempre sabes como se "llama" el boton es decir que icono le tienes que asignar.
(17-02-2023, 19:22)Shordi escribió: A falta de algo mejor, creo que aplicando la navaja de Occam, me decantaré por la A, aunque no me guste demasiado.

Yo uso un metodo recursivo para recorrer todos los controles del formulario y cambiarles el icono, como sabes uso iconos SVG en mis programas pero funcionaria también con archivos PNG o el nombre del icono, lo voy a poner en otro tema.

1 Saludo.
Shordi   18-02-2023, 12:36
#6
Efectivamente es muy parecido a la solución basada en el nombre. En mi caso la propiedad .tag no me vale porque ya la uso para otras cosas y por eso me tiro hacia lo del nombre.
Quede constancia que ninguna de estas soluciones me sirve de verdad para lo que estoy pretendiendo hacer, a saber:

Aplicar un esquema de colores e iconos a todos los controles de un formulario simplemente enlazando con el componente gbThemes y añadiendo un control "Theme" a cualquier formulario.

Ninguna de las dos me sirve completamente porque exigen que el formulario se diseñe ya pensando en esto de los Themes, bien sea por el nombre que se asigna o por lo que pone en el Tag... y la idea es que sirva para cualquier formulario dentro de lo que los controles lo permitan (esto último lo digo por el hilo que ha puesto hoy Shell sobre el color de fondo de los Buttons).

Tengo un par de ideas aún por probar... pero no soy muy optimista. Ya os contaré.

Saludos

No podemos regresar
Shordi   18-02-2023, 14:01
#7
He pasado la consulta a la lista internacional, a ver si alguien sabe algo...

Saludos

No podemos regresar
Shordi   20-02-2023, 10:45
#8
Al final parece ser un problema con mi SO. Hoy toca reinstalación...¡Dios, qué pereza me da!.... Angel Angel

¡Ah, no! El problema parecen ser los temas oscuros ¡otra vez! Eso me libra de reinstalar todo y me da un camino para mi proyecto...

A codificar se ha dicho...
Última modificación: 20-02-2023, 11:01 por Shordi.

No podemos regresar
Shell   20-02-2023, 12:44
#9
Shordi:

Estoy algo perdido y este lunes es como un domingo en la ciudad. (Lunes de resaca).
Cuando averigües más lo cuentas.

Por cierto, ¿ habéis visto el archivo icon.map ?. Es de texto.
Son referencias y mapeados de los iconos del sistema por los de Gambas.

Lo encontrareis en las fuentes de gambas. El enlace está en:
..../src/gambas3source/gambas/comp/src/gb.form.stock

En los directorios gambas y gambas-mono existen directorios de 32/128 pero ni más ni menos.

[Imagen: NFVB2vr.png]

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.