Comunidad Gambas-es
ComboBox con imágenes - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Controles/Librerías/Componentes (https://gambas-es.org/forum-7.html)
+--- Tema: ComboBox con imágenes (/thread-1520.html)



ComboBox con imágenes - guizans - 16-10-2023

Hola a todos.

 ¿Hay algún control tipo ComboBox que en vez de un texto sea una imagen? Me ha surgido hoy la duda mientras estaba aburrido delante del ordenador, soy así. Se que he visto esto en algún programa pero no se cual. La cuestión es que quiero puntuar algo, y en vez de números, por ejemplo del 1 al 5, que sean estrellas (que serán cinco imágenes). Entonces tengo un ComboBox que se despliega y elijo la imagen según la puntuación. Pero claro, ComboBox sólo permite texto. Seguramente si quiero algo así me tendré que liar la manta a la cabeza y hacer un control personalizado, con PictureBox, con un Button para desplegar un ListView, para que muestre las imágenes.

Gracias.

P.D.: He estado haciendo pruebas con esa configuración y el problema que me encuentro es que cuando pulse en otra parte de la ventana o en otro botón el ListView desaparezca. ¿Hay alguna forma "sencilla" de hacer esto? He probado con el evento Lost_Focus, pero no funciona.

P.D 1: Vale, me contesto a mi mismo, con el evento Leave, cuando el ratón no está encima del ListView este desaparece al cambiar la propiedad Visible a False.

Muchas gracias.


RE: ComboBox con imágenes - vuott - 17-10-2023

Propongo el siguiente Confused código usando recursos graficos de QT:
Código:
Private ComboBox1 As ComboBox
Private pb As PictureBox
Private pc As Picture = Picture["icon:/32/star"]


Public Sub Form_Open()

  With ComboBox1 = New ComboBox(Me) As "ComboBox1"
    .X = 100
    .Y = 100
    .W = pc.W * 4
    .H = pc.H
    .List = ["1", "2", "3"]
  End With

  With pb = New PictureBox(ComboBox1)
    .X = (ComboBox1.W - pc.W) / 2
    .Y = 0
    .W = ComboBox1.W
    .H = pc.H
  End With

End

Public Sub ComboBox1_Click()
  
  Dim im1 As Image = pc.Image
  Dim im2 As Image = New Image(pc.W * 4, pc.H, Color.White, Image.Standard)
  
  Select Case ComboBox1.Text
    Case "1"
      With pb
        .Image = im2.DrawImage(im1, 20, 0, pc.W, pc.H)
      End With
    Case "2"
      With pb
        .Image = im2.DrawImage(im1, 20, 0, pc.W, pc.H)
        .Image = .Image.DrawImage(im1, 56, 0, pc.W, pc.H)
      End With
    Case "3"
      With pb
        .Image = im2.DrawImage(im1, 20, 0, pc.W, pc.H)
        .Image = .Image.DrawImage(im1, 56, 0, pc.W, pc.H)
        .Image = .Image.DrawImage(im1, 92, 0, pc.W, pc.H)
      End With
  End Select
  
End



RE: ComboBox con imágenes - guizans - 17-10-2023

Gracias Voutt, tu código me parece genial, con un par de retoques me sirve.

Muchas gracias Rolleyes


RE: ComboBox con imágenes - vuott - 19-10-2023

El miembro 'Gianluigi' del foro italiano sugiere una solución más corta y sencilla: utilizar una fuente específica que contenga -como carácter- la imagen deseada.
Ejemplo:
Código:
Public Sub Form_Open()

  Dim hCombo As ComboBox

  If Fonts.Exist("D050000L") Or If Fonts.Exist("D050000L [urw]") Or If Fonts.Exist("D050000L [URW ]") Then
    With hCombo = New ComboBox(Me) As "ComboBox1"
      .X = 50
      .Y = 50
      .H = 35
      .W = 130
      .Font = Font["D050000L,Bold,14"]
      .Foreground = Color.RGB(197, 166, 67)
      .List = ["MMMMM", "MMMM", "MMM", "MM", "M"]   ' <--- Estrellas
    End With
  Else
    Message.Warning("Tienes que instalar el Font D050000L")
    Me.Close
  Endif

End

Bueno, es una idea genial; pero yo digo que, para garantizar una compatibilidad absoluta y universal, es preferible UNICODE.
Yo Confused propongo:
Código:
Public Sub Form_Open()

 Dim ComboBox1 As ComboBox

 With ComboBox1 = New ComboBox(Me) As "ComboBox1"
   .X = 50
   .Y = 50
   .H = 35
   .W = 140
   .Foreground = Color.RGB(197, 166, 67)
   .Font.Size = 20
   For b As Byte = 5 DownTo 1
     .Add(String(b, String.Chr(&2605)))
   Next
 End With

End



RE: ComboBox con imágenes - guizans - 19-10-2023

Me encanta tú última solución, es la ideal.

Muchas gracias, eres todo un crack.