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