Toolbox Visual Basic

Mauro VB Homepage - Toolbox 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.

Torna a Toolbox

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.

Espandi tutto | Chiudi tutto

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()

 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
Esempio di utilizzo
Ecco come richiamare e utilizzare il codice precedentemente esposto:
Private Sub Form_Unload(Cancel As Integer)'evento unload del form principale della nostra applicazione

  Call UnloadAllForms
  ' eventuale altro codice da associare alla chiusura del programma

End Sub
Nota: il codice presente all'interno della subroutine UnloadAllForms può essere incorporato direttamente all'interno dell'evento Form_Unload del form principale.

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à)
Private Declare Function FlashWindow Lib "user32"(ByVal hwnd As Long, ByVal bInvert As Long) As Long
Esempio di utilizzo
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)


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

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à)
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
Esempio di utilizzo
Ecco come richiamare la funzione SetTopMost:
'Me.hwnd = handle della finestra (form)

'per rendere sempre visibile la finestra ...
SetTopMost Me.hwnd, True

'per portare allo stato normale la finestra ...
SetTopMost Me.hwnd, False
Nota: quando si pone una finestra in primo piano, non è necessario porla allo stato normale prima della sua chiusura.