La maggior parte delle applicazioni fornisce un'area nel modulo principale dell'applicazione, solitamente allineata nella parte inferiore di un modulo, utilizzata per visualizzare le informazioni sull'applicazione durante l'esecuzione.
Un componente TStatusBar (situato nella pagina "Win32" della tavolozza dei componenti) può essere utilizzato per aggiungere una barra di stato a un modulo. Una proprietà Panels di TStatusBar viene utilizzata per aggiungere, rimuovere o modificare i pannelli della barra di stato (ogni pannello è rappresentato da un oggetto TStatusPanel).
Un TProgressBar (situato nella pagina "Win32" della tavolozza dei componenti) visualizza una semplice barra di avanzamento. Le barre di avanzamento forniscono agli utenti un feedback visivo sullo stato di avanzamento di una procedura all'interno di un'applicazione.
ProgressBar in StatusBar
Quando viene posizionato su un modulo, TStatusBar si allinea automaticamente al fondo (proprietà Align = alBottom). Inizialmente, ha un solo pannello.
Ecco come aggiungere pannelli alla raccolta Pannelli (una volta che una barra di stato è stata aggiunta a un modulo, diciamo che ha il nome predefinito "StatusBar1"):
- Fare doppio clic sul componente della barra di stato per aprire l'editor dei pannelli
- Fare clic con il pulsante destro del mouse sull'editor del pannello e selezionare "Aggiungi". Questo aggiunge un oggetto TStatusPanel alla raccolta Panels. Aggiungine un altro.
- Seleziona il primo pannello e, utilizzando Object Inspector, assegna "Progress:" alla proprietà Text.
- Nota: dobbiamo posizionare una barra di avanzamento nel secondo pannello!
- Chiudi l'editor dei pannelli
Per visualizzare una barra di avanzamento all'interno di uno dei pannelli della barra di avanzamento, abbiamo prima bisogno di un TProgressBar. Rilascia uno sul modulo, lascia il nome predefinito (ProgressBar1).
Ecco cosa è necessario fare per visualizzare ProgressBar all'interno di una StatusBar:
- Assegnare StatusBar1 per la proprietà Parent di ProgressBar1.
- Modificare la proprietà Style del secondo pannello StatusBar in "psOwnerDraw". Quando è impostato su psOwnerDraw, il contenuto visualizzato nel pannello di stato viene disegnato in fase di esecuzione nell'area di disegno della barra di stato dal codice in un gestore di eventi OnDrawPanel. Opposto a "psOwnerDraw", il valore predefinito di "psText", garantisce che la stringa contenuta nella proprietà Text venga visualizzata nel pannello di stato, utilizzando l'allineamento specificato dalla proprietà Alignment.
- Gestisci l'evento OnDrawPanel della StatusBar aggiungendo il codice che allinea la barra di avanzamento in un pannello di una barra di stato.
Ecco il codice completo:
I primi due passaggi della discussione precedente vengono eseguiti nel gestore di eventi OnCreate del modulo.
procedura TForm1.FormCreate (Sender: TObject); var ProgressBarStyle: intero; iniziare // abilita la barra di stato 2 ° pannello disegno personalizzato StatusBar1.Panels [1] .Style: = psOwnerDraw; // posiziona la barra di avanzamento nella barra di stato ProgressBar1.Parent: = StatusBar1; // rimuove il bordo della barra di avanzamento ProgressBarStyle: = GetWindowLong (ProgressBar1.Handle, GWL_EXSTYLE); ProgressBarStyle: = ProgressBarStyle - WS_EX_STATICEDGE; SetWindowLong (ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle); fine;
Nota: il controllo TProgressBar ha un bordo predefinito che apparirebbe "brutto" quando il componente viene posizionato nella barra di stato, quindi decidiamo di rimuovere il bordo.
Infine, gestisci l'evento OnDrawPanel di StatusBar1:
procedura TForm1.StatusBar1DrawPanel (StatusBar: TStatusBar; Pannello: TStatusPanel; const Rect: TRect); iniziare if Panel = StatusBar.Panels [1] poi ProgressBar1 iniziare In alto: = Rect.Top; Sinistra: = Rect.Left; Larghezza: = Rect.Right - Rect Left - 15; Altezza: = Rect.Bottom - Rect.Top; fine; fine;
Tutto stabilito. Esegui il progetto ... con un codice fittizio nel gestore di eventi OnClick di un Button:
procedura TForm1.Button1Click (Sender: TObject); var i: intero; iniziare ProgressBar1.Position: = 0; ProgressBar1.Max: = 100; per i: = 0 a 100 do iniziare ProgressBar1.Position: = i; Sonno (25); //Application.ProcessMessages; fine; fine;