If your application runs on a computer or device that has a battery it’s helpful to know the battery level.
Setup your application canvas with 3 labels, 1 Gauge (progress bar) and 1 timer.
To keep it simple I’m not changing the names of the elements so you should have: Label1, Label2, Label3, Gauge1 and Timer1
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Gauges, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Gauge1: TGauge; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var pSysPowerStatus : SYSTEM_POWER_STATUS; s : string; begin if GetSystemPowerStatus(pSysPowerStatus) then begin if pSysPowerStatus.ACLineStatus = 0 then begin showmessage('Please plug into power before continuing.'); end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var pSysPowerStatus : SYSTEM_POWER_STATUS; s : string; begin // WinApi command to get the status of the battery. if GetSystemPowerStatus(pSysPowerStatus) then begin // get the line status case pSysPowerStatus.ACLineStatus of 0 : s:='Offline'; 1 : s:='Online'; 255 : s:='Unknown status.'; end; label1.caption:='AC power status: '+s; // get the battery flag // Battery charge status. This parameter can be a combination of the following values: s:=''; if pSysPowerStatus.BatteryFlag and 1 = 1 then s:=s+'High '; if pSysPowerStatus.BatteryFlag and 2 = 2 then s:=s+'Low '; if pSysPowerStatus.BatteryFlag and 4 = 4 then s:=s+'Critical '; if pSysPowerStatus.BatteryFlag and 8 = 8 then s:=s+'Charging '; if pSysPowerStatus.BatteryFlag and 128 = 128 then s:=s+'No system battery '; if pSysPowerStatus.BatteryFlag and 255 = 255 then s:=s+'Unknown status '; label2.caption:='Battery charge status: '+s; // BatteryLifePercent // Percentage of full battery charge remaining. // This member can be a value in the range 0 to 100, or 255 if status is unknown. case pSysPowerStatus.BatteryLifePercent of 0..100 : s:=inttostr(pSysPowerStatus.BatteryLifePercent)+' %'; 255 : s:='unknown'; end; label3.caption:='Percentage of full battery charge remaining: '+s; if pSysPowerStatus.BatteryLifePercent<101 then // status known begin gauge1.MinValue:=0; gauge1.MaxValue:=100; gauge1.Progress:=pSysPowerStatus.BatteryLifePercent; end; end else begin // error, could not grab the SYSTEM POWER STATUS end; end; end.