guizans   16-10-2023, 21:26
#1
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.
Última modificación: 16-10-2023, 21:28 por guizans.
vuott   17-10-2023, 02:18
#2
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
Última modificación: 17-10-2023, 18:17 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
guizans   17-10-2023, 18:08
#3
Gracias Voutt, tu código me parece genial, con un par de retoques me sirve.

Muchas gracias Rolleyes
vuott   19-10-2023, 12:15
#4
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
Última modificación: 19-10-2023, 23:23 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
guizans   19-10-2023, 20:21
#5
Me encanta tú última solución, es la ideal.

Muchas gracias, eres todo un crack.
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.