Science, Tech, Math › Computer Science How to Place a TProgressBar Into a TStatusBar in Delphi Share Flipboard Email Print Computer Science Delphi Programming Delphi Tutorials Advanced PHP Programming Perl Python Java Programming Javascript Programming C & C++ Programming Ruby Programming Visual Basic View More By Zarko Gajic Zarko Gajic Twitter Computer Science Expert MSCS, Computer Science, University of Osijek Zarko Gajic is experienced in SQL and has working knowledge of DB systems such as MS SQL Server, Firebird, Interbase, and Oracle. He is also proficient in XML, DHTML, and JavaScript. Learn about our Editorial Process Updated on February 25, 2020 Most applications provide an area in the application's main form, usually aligned at the bottom of a form, used to display information about the application as it runs. A TStatusBar component (located on the "Win32" page of the component palette) can be used to add a status bar to a form. A TStatusBar's Panels property is used to add, remove or modify the panels of the status bar (each panel is represented by a TStatusPanel object). A TProgressBar (located on the "Win32" page of the component palette) displays a simple progress bar. Progress bars provide users with visual feedback about the progress of a procedure within an application. ProgressBar in StatusBar When placed on a form the TStatusBar automatically aligns itself to the bottom (Align property = alBottom). Initially, it has just one panel. Here's how to add panels to the Panels collection (once a status bar has been added to a form, let's say it has the default "StatusBar1" name): Double click the status bar component to open the Panels editorRight click on the panel editor and select "Add." This adds one TStatusPanel object to the Panels collection. Add one more.Select the first Panel, and using the Object Inspector, assign "Progress:" for the Text property.Note: we are to place a progress bar into the second panel!Close the Panels editor To display a progress bar inside one of the Progress bar Panels, we first need a TProgressBar. Drop one on the form, leave the default name (ProgressBar1). Here's what needs to be done for ProgressBar to be displayed inside a StatusBar: Assign StatusBar1 for the Parent property of the ProgressBar1. Change the Style property of the second StatusBar's panel to "psOwnerDraw." When set to psOwnerDraw, the content displayed in the status panel is drawn at runtime on the status bar’s canvas by code in an OnDrawPanel event handler. Opposite to "psOwnerDraw", the default value of "psText", ensures the string contained in the Text property is displayed in the status panel, using the alignment specified by Alignment property. Handle the OnDrawPanel event of the StatusBar by adding the code that aligns the progress bar into a Panel of a status bar. Here's the full code: The first two steps in the above discussion are done in the Form's OnCreate event handler. procedure TForm1.FormCreate(Sender: TObject); var ProgressBarStyle: integer; begin //enable status bar 2nd Panel custom drawing StatusBar1.Panels[1].Style := psOwnerDraw; //place the progress bar into the status bar ProgressBar1.Parent := StatusBar1; //remove progress bar border ProgressBarStyle := GetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE); ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE; SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle); end; Note: the TProgressBar control has a default border that would look "ugly" when the component is placed in the status bar, so we decide to remove the border. Finally, handle the OnDrawPanel event of the StatusBar1: procedure TForm1.StatusBar1DrawPanel( StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin if Panel = StatusBar.Panels[1] then with ProgressBar1 do begin Top := Rect.Top; Left := Rect.Left; Width := Rect.Right - Rect.Left - 15; Height := Rect.Bottom - Rect.Top; end; end; All set. Run the project ... with some dummy code in the OnClick event handler of a Button: procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin ProgressBar1.Position := 0; ProgressBar1.Max := 100; for i := 0 to 100 do begin ProgressBar1.Position := i; Sleep(25); //Application.ProcessMessages; end; end; Cite this Article Format mla apa chicago Your Citation Gajic, Zarko. "How to Place a TProgressBar Into a TStatusBar in Delphi." ThoughtCo, Apr. 5, 2023, thoughtco.com/placing-a-tprogressbar-into-a-tstatusbar-4092539. Gajic, Zarko. (2023, April 5). How to Place a TProgressBar Into a TStatusBar in Delphi. Retrieved from https://www.thoughtco.com/placing-a-tprogressbar-into-a-tstatusbar-4092539 Gajic, Zarko. "How to Place a TProgressBar Into a TStatusBar in Delphi." ThoughtCo. https://www.thoughtco.com/placing-a-tprogressbar-into-a-tstatusbar-4092539 (accessed May 31, 2023). copy citation