[VB6] Toolbar: impostare immagini in maniera flessibile
Pubblicato da giorgiobrausi su Febbraio 20, 2008
Premessa
Una delle questioni più fastidiose relative al controllo Toolbar riguarda l’impostazione delle immagini nei pulsanti; è noto infatti che l’assegnazione di un immagine ad un pulsante richiede preventivamente l’associazione ad un ImageList in fase di progettazione in cui ovviamente dobbiamo già aver inserito tutte le immagini da utilizzare.
Ciò, di per sé, non presenta problemi; semmai è noioso dovere impostare l’immagine per ogni singolo pulsante, soprattutto se i pulsanti sono molti.
Ma i problemi sorgono in seguito, cioè quando si rende necessaria l’aggiunta di una nuova immagine nell’ImageList! Eh sì, perchè tale operazione è possibile solo se prima si ’scollega’ l’ImageList dal controllo Toolbar, altrimenti VB6 risponde picche!
Oltretutto, questo provoca nel Toolbar il completo azzeramento di tutti i riferimenti alle immagini che avevamo assegnato ad ogni singolo pulsante, e dopo aver aggiunto la nuova immagine saremo costretti a ripristinarli di nuovo, uno per uno.
A lungo andare, tutto questo può innervosire (e come se innervosisce!).
Non so voi, ma io che uso un Toolbar praticamente in ogni form (in sostituzione dei CommandButton) e questo problema per me divenne un incubo molto presto!
Così ho studiato un piccolo stratagemma che mi permette la massima libertà di azione e mi evita qualche imprecazione di troppo…
Soluzione
Il modo più semplice che ho trovato per risolvere questo problema è quello di assegnare le immagini in fase di esecuzione, anzichè in fase di progettazione, creando una semplice routine che si incarica di svolgere tutto il lavoro per me.
Esiste però una condizione, peraltro assai semplice:
la proprietà Key del pulsante nel Toolbar deve essere uguale alla proprietà Key dell’immagine presente nell’ImageList che vogliamo assegnargli.
In pratica, se al pulsante Salva impostiamo Key=save, anche l’immagine che raffigura tale operazione (es. floppy disk) dovrà avere la proprietà Key=save.
Vediamo il codice della routine
Public Sub ImpostaToolBar(ByRef myTB As MSComctlLib.Toolbar, _
Optional ByRef myIml As MSComctlLib.ImageList, _
Optional ByRef myHotIml As MSComctlLib.ImageList, _
Optional ByVal bMostraCaption As Boolean = False, _
Optional ByVal bFlat As Boolean = True, _
Optional ByVal bBorder As Boolean = False)
 Rem NOTA: questa routine non è completa,
Rem il codice serve solo come esempio.
Rem Vedi in calce il link per scaricare
Rem il progetto di esempio.
Rem Per ogni pulsante del controllo Toolbar,
Rem prendo il valore di Key e cerco
Rem l'immagine corrispondente nell'ImageList. Â
Rem Se la trovo la abbino al pulsante: Â
For i = 1 To myTB.Buttons.Count
If myTB.Buttons(i).Style <> tbrSeparator Then
myTB.Buttons(i).Image = _
myIml.ListImages(myTB.Buttons(i).Key).Index
sToolTip = myIml.ListImages(myTB.Buttons(i).Key).Tag
Rem uso la proprietà Tag per impostare il tooltip
    If sToolTip <> "" Then
       myTB.Buttons(i).ToolTipText = sToolTip
    End If
    Rem Se si sceglie di mostrare la Caption
    If bMostraCaption Then
myTB.Buttons(i).Caption = myTB.Buttons(i).ToolTipText
End If
  End If
  Next i
End Sub
Osservando i parametri presenti nella firma di questa routine è facile intuire che in realtà essa permette di impostare molte altre proprietà , ad esempio l’imagelist da usare come effetto Hot. Nella sezione VB Projects del mio sito VBCorner potete scaricare il progetto di esempio completo.
Questo post è stato pubblicato il Febbraio 20, 2008 a 11:52 pm ed è archiviato in VB6. Contrassegnato da tag: imagelist, immagini, toolbar, VB6. Puoi seguire tutte le risposte a questo articolo attraverso il RSS 2.0 feed. Puoi lascia una risposta, oppure trackback dal tuo sito.
Roberto detto
Beh..che dire..effettivamente era snervante andare a ripristinare tutti i riferimenti..
..di fatto lo trovo molto utile..credo che lo adotterò alla prima ToolBar
Grazie!
Icone e Toolbar - MasterDrive.it - Information Technology Developers Community detto
[...] articolo, sicuramente ti sarà utile, in quanto potrai evitare il problema indicato da Brontolo. [VB6] Toolbar: impostare immagini in maniera flessibile Giorgio Brausi’s Weblog Si riferisce alla Common Controls 6, ma se usi la 5 basta cambiare la classe nel primo parametro [...]