Giorgio Brausi’s Weblog

Visual Basic .NET programmer

[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.

Pubblicato su VB6 | Contrassegnato da tag: , , , | 2 Commenti »

Salve!

Pubblicato da giorgiobrausi su Febbraio 20, 2008

Benvenuto sul mio nuovo blog.

Pubblicato su Programmazione | Lascia un commento »