ComboBox che mostra immagini anziché caratteri alfanumerici

Da Gambas-it.org - Wikipedia.

Il ComboBox può mostrare immagini anziché il normale testo alfanumerico.

Usando il codice di UNICODE

Una facile soluzione, capace anche di garantire una assoluta e universale compatibilità, prevede l'uso dei simboli del codice UNICODE. [nota 1]

Mostriamo un esempio pratico:

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(&272D)))
   Next
 End With

End


Usando un Font specifico

Si potrà usare un Font specifico, come ad esempio il Font "D050000L", capace di fornire l'immagine prescelta. [nota 2]
Questa soluzione non garantisce, però, una assoluta e universale compatibilità. Perché funzioni, sarà necessario avere installato quello specifico Font.

Mostriamo un esempio:

Public Sub Form_Open()

 Dim ComboBox1 As ComboBox

 If Fonts.Exist("D050000L") Or If Fonts.Exist("D050000L [urw]") Or If Fonts.Exist("D050000L [URW ]") Then 
   With ComboBox1 = 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"]
   End With
 Else 
   Message.Warning("Devi installare il Font D050000L")
   Me.Close 
 Endif

End

Caricando immagini in una PictureBox

Si potrà inserire nel ComboBox una PictureBox, e usare questo Controllo per mostrare le immagini in esso debitamente caricate.
Per ottenere questo risultato si dovrà assegnare, come "Figlio", al ComboBox l'Oggetto PictureBox (o altro Controllo capace di supportare una immagine).

Mostriamo un esempio pratico (è opportuno usare Componenti grafici delle risorse di QT):

Private ComboBox1 As ComboBox
Private pb As PictureBox
Private pc As Picture = Picture["icon:/32/star"] ' Imposta l'immagine da mostrare nel ComboBox

 
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"
     pb.Image = im2.DrawImage(im1, 20, 0, pc.W, pc.H)
   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


Note

[1] Sull'uso di UNICODE in Gambas vedere: Uso di Unicode con gli oggetti di testo

[2] Questa soluzione è stata indicata da "Gianluigi", membro del forum "www.gambas-it.org".