ComboBox che mostra immagini anziché caratteri alfanumerici
Il ComboBox può mostrare immagini anziché il normale testo alfanumerico.
Indice
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(&2605))) 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".