Toolbox Visual Basic
Presentiamo in questa sezione, per i programmatori in Visual Basic, versioni 5 o 6, strumenti idonei ad ottimizzare le loro applicazioni in termini di efficacia e funzionalità: si tratta di esempi di codici e di routines accompagnati da indicazioni sul loro funzionamento e sul loro utilizzo all'interno di un programma.
Il materiale messo a disposizione è totalmente gratuito e di libero utilizzo. Se questo codice viene redistribuito altrove si dovrà però citarne l'autore e la fonte.
Sezione Form e oggetti
UnloadAllForms
A cosa serve e come funziona questo codice
Questo codice serve per scaricare, prima della chiusura del nostro programma, tutti i forms eventualmente aperti durante l'utilizzo
dell'applicazione e ancora presenti in memoria.
Quando e perchè usare questo codice
Il codice deve essere richiamato (vedi esempio) dall'evento Unload del form principale (main) della nostra applicazione.
Avvertenze e suggerimenti
Questo codice, richiamato ad esempio all'interno di una routine Timer, può anche essere usato per creare effetti tipo scritte lampeggianti
invertendo contemporaneamente sia il colore di primo piano (foreColor) e sia il colore dello sfondo (BackColor).
Private Sub UnloadAllForms()
Esempio di utilizzo
Dim Form As Form
'ricerca, in modo ricorsivo, tutti i form aperti
For Each Form In Forms
'scarica il form
Unload Form
'annulla l'associazione con la variabile oggetto
Set Form = Nothing
Next Form
End Sub
Ecco come richiamare e utilizzare il codice precedentemente esposto:
Private Sub Form_Unload(Cancel As Integer)'evento unload del form principale della nostra applicazione
Nota: il codice presente all'interno della subroutine UnloadAllForms può essere incorporato direttamente all'interno dell'evento
Form_Unload del form principale.
Call UnloadAllForms
' eventuale altro codice da associare alla chiusura del programma
End Sub
FlashWindow
A cosa serve e come funziona questo codice
Questo codice serve per far lampeggiare la la barra del titolo (TitleBar) e l'icona sulla taskbar di un Form.
La funzione API (Application Programming Interface) FlashWindow utilizzata deve essere richiamata passando come argomento hwnd,
l'handle della finestra su cui applicare FlashWindow, e come argomento bInvert, un valore diverso da zero, per far lampeggiare la
finestra, e 0 (zero) per ripristinare la visione normale.
Quando e perchè usare questo codice
Questa funzione può essere usata per attirare l'attenzione dell'utente.
'Dichiarazione della funzione API (sostituire Private con Public in funzione delle necessità)
Esempio di utilizzo
Private Declare Function FlashWindow Lib "user32"(ByVal hwnd As Long, ByVal bInvert As Long) As Long
Nell'esempio che segue si ipotizza la presenza nel codice di una subrouitne Timer.
Ecco come richiamare e utilizzare la funzione FlashWindow:
'Me.hwnd = handle della finestra (form)
Nota: il codice presente all'interno delle due sub StartFlash e EndFlash può essere inserito all'interno di altre opportune subroutine già
presenti all'interno del vostro programma.
Sub StartFlash()'inizio lampeggio
Timer1.Interval = 500 'imposta la temporizzazione del lampeggio (500ms)
Timer1.Enabled = True 'abilita il Timer che avvia il lampeggio
End Sub
Private Sub Timer1_Timer()
FlashWindow Me.hwnd, 1 'avvia il lampeggio del titolo
End Sub
Sub EndFlash()'fine lampeggio
Timer1.Enabled = False 'blocca il timer
FlashWindow Me.hwnd, 0 ' ripristina la normale visione della finestra
End Sub
Funzione SetTopMost
A cosa serve e come funziona questo codice
Questa funzione serve per far apparire una finestra (form) sempre in primo piano (alwais on the top) rispetto alle altre.
La funzione, che utilizza l'API (Application Programming Interface) SetWindowPos, deve essere richiamata passando obbligatoriamente
come argomento hwnd (long), l'handle della finestra da porre in primo piano, e come argomento topmost (boolean), un valore
boleano (true o false) in funzione del risultato che vogliamo ottenere: true = finestra sempre in primo piano, false = finestra normale.
Quando e perchè usare questo codice
Questa funzione può essere usata quando vogliamo essere sicuri che la finestra di un nostro programma sia sempre visibile, oppure, quando
vogliamo che la nostra finestra nasconda eventuali altre finestre presenti.
Avvertenze e suggerimenti
Impostare una finestra "sempre in primo piano" può impedire l'accesso alle finestre sottostanti (attenzione: anche la barra degli strumenti
"Taskbar" di Windows è una finestra!) e può impedire, anche, la visualizzazione di eventuali messaggi generati dal comando "msgbox". In
quest'ultimo caso, in particolare, il programma attivo rimane bloccato in attesa che l'utente prema un pulsante della finestra msgbox ma, se
questa è nascosta dal form "sempre in primo piano", l'operazione risulta impossibile e l'applicazione principale rimane bloccata.
'Dichiarazione della funzione API (sostituire Private con Public in funzione delle necessità)
Esempio di utilizzo
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Function SetTopMost(ByVal hwnd As Long, topmost As Boolean)
'non ridimensiona la finestra
Const SWP_NOSIZE = &H1
'Non muove la finestra
Const SWP_NOMOVE = &H2
'pone la finestra in primo piano al di sopra di tutte le altre.
Const HWND_TOPMOST = -1
'pone la finestra al di sotto di tutte le finestre in
'primo piano e al di sopra di quelle non in primo piano
Const HWND_NOTOPMOST = -2
If TopMost Then
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
Else
SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End If
End Function
Ecco come richiamare la funzione SetTopMost:
'Me.hwnd = handle della finestra (form)
Nota: quando si pone una finestra in primo piano, non è necessario porla allo stato normale prima della sua chiusura.
'per rendere sempre visibile la finestra ...
SetTopMost Me.hwnd, True
'per portare allo stato normale la finestra ...
SetTopMost Me.hwnd, False