Computerwissenschaften

So platzieren Sie eine TProgressBar in einer TStatusBar in Delphi

Die meisten Anwendungen bieten einen Bereich im Hauptformular der Anwendung , der normalerweise am unteren Rand eines Formulars ausgerichtet ist und zum Anzeigen von Informationen über die Anwendung während der Ausführung verwendet wird.

Mit einer TStatusBar-Komponente (auf der Seite „Win32“ der Komponentenpalette) kann einem Formular eine Statusleiste hinzugefügt werden. Mit der Panels-  Eigenschaft einer TStatusBar werden die  Panels der Statusleiste hinzugefügt, entfernt oder geändert (jedes Panel wird durch ein TStatusPanel-Objekt dargestellt).

Eine TProgressBar (auf der Seite „Win32“ der Komponentenpalette) zeigt einen einfachen Fortschrittsbalken an. Fortschrittsbalken geben Benutzern visuelles Feedback zum Fortschritt eines Verfahrens innerhalb einer Anwendung.

 

Fortschrittsleiste in der Statusleiste

Beim Platzieren in einem Formular richtet sich die TStatusBar automatisch nach unten aus ( Align-  Eigenschaft =  alBottom ). Anfangs hat es nur ein Panel.

So fügen Sie der Panels-Sammlung Panels hinzu (nachdem einem Formular eine Statusleiste hinzugefügt wurde, nehmen wir an, sie hat den Standardnamen „StatusBar1“):

  1. Doppelklicken Sie auf die Statusleisten-Komponente, um den Bedienfeld-Editor zu öffnen
  2. Klicken Sie mit der rechten Maustaste auf den Panel-Editor und wählen Sie „Hinzufügen“. Dadurch wird der Panels-Auflistung ein TStatusPanel-Objekt hinzugefügt. Fügen Sie noch eine hinzu.
  3. Wählen Sie die erste Platte, und mit dem Objektinspektor assign „Fortschritt“ für die Text –  Eigenschaft.
  4. Hinweis: Wir müssen einen Fortschrittsbalken in das zweite Feld einfügen!
  5. Schließen Sie den Panel-Editor

Um einen Fortschrittsbalken in einem der Fortschrittsbalkenfenster anzuzeigen, benötigen wir zunächst eine TProgressBar. Legen Sie einen im Formular ab und belassen Sie den Standardnamen (ProgressBar1).

Folgendes muss getan werden, damit die ProgressBar in einer StatusBar angezeigt wird:

  1. Weisen Sie StatusBar1 für die  Parent-  Eigenschaft von ProgressBar1 zu.
  2. Ändern Sie die  Style-  Eigenschaft des zweiten StatusBar-Bedienfelds in „psOwnerDraw“. Bei der Einstellung auf psOwnerDraw wird der im Statusfenster angezeigte Inhalt zur Laufzeit auf der Zeichenfläche der Statusleiste per Code in einem  OnDrawPanel-  Ereignishandler gezeichnet . Im Gegensatz zu „psOwnerDraw“ stellt der Standardwert von „psText“ sicher, dass die in der Text-  Eigenschaft enthaltene Zeichenfolge  im Statusfenster unter Verwendung der durch die Alignment-  Eigenschaft angegebenen Ausrichtung angezeigt wird  .
  3. Behandeln Sie das  OnDrawPanel-  Ereignis der Statusleiste, indem Sie den Code, der die Fortschrittsanzeige ausrichtet, in ein Bedienfeld einer Statusleiste einfügen.

Hier ist der vollständige Code:

Die ersten beiden Schritte in der obigen Diskussion werden im OnCreate- Ereignishandler des Formulars ausgeführt .

Prozedur TForm1.FormCreate (Absender: TObject);
var
ProgressBarStyle: Ganzzahl;
begin 
// Statusleiste aktivieren Benutzerdefinierte Zeichnung des 2. Bedienfelds
StatusBar1.Panels [1] .Style:=psOwnerDraw;
// Platziere den Fortschrittsbalken in der Statusleiste
ProgressBar1.Parent:=StatusBar1;
// Fortschrittsbalkenrand entfernen
ProgressBarStyle:=GetWindowLong (ProgressBar1.Handle,
GWL_EXSTYLE);
ProgressBarStyle:=ProgressBarStyle
- WS_EX_STATICEDGE;
SetWindowLong (ProgressBar1.Handle,
GWL_EXSTYLE,
ProgressBarStyle);
Ende ;

Hinweis: Das TProgressBar-Steuerelement verfügt über einen Standardrahmen, der „hässlich“ aussieht, wenn die Komponente in der Statusleiste platziert wird. Daher entscheiden wir uns, den Rand zu entfernen.

Behandeln Sie abschließend das OnDrawPanel-Ereignis der StatusBar1:

Prozedur TForm1.StatusBar1DrawPanel (
StatusBar: TStatusBar;
Panel: TStatusPanel;
const Rect: TRect);
Beginnen Sie, 
wenn Panel=StatusBar.Panels [1], dann 
beginnen Sie mit ProgressBar1
Oben:=Rect.Top;
Links:=Rect.Left;
Breite:=Rect.Right - Rect.Left - 15;
Höhe:=Rect.Bottom - Rect.Top;
Ende ;
Ende ;

Alles bereit. Führen Sie das Projekt aus … mit einem Dummy-Code im OnClick-Ereignishandler einer Schaltfläche:

Prozedur TForm1.Button1Click (Absender: TObject);
var
i: ganze Zahl;
Start
ProgressBar1.Position:=0;
ProgressBar1.Max:=100;
für i:=0 zu 100 tun 
beginnen
ProgressBar1.Position:=i;
Schlaf (25);
//Application.ProcessMessages; 
Ende ;
Ende ;

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.