lasarus_compotents/bgracontrols/bgraflashprogressbar.pas

287 lines
8.0 KiB
ObjectPascal

// SPDX-License-Identifier: LGPL-3.0-linking-exception
{
Created by BGRA Controls Team
Dibo, Circular, lainz (007) and contributors.
For detailed information see readme.txt
Site: https://sourceforge.net/p/bgra-controls/
Wiki: http://wiki.lazarus.freepascal.org/BGRAControls
Forum: http://forum.lazarus.freepascal.org/index.php/board,46.0.html
}
{******************************* CONTRIBUTOR(S) ******************************
- Edivando S. Santos Brasil | mailedivando@gmail.com
(Compatibility with delphi VCL 11/2018)
***************************** END CONTRIBUTOR(S) *****************************}
unit BGRAFlashProgressBar;
{$I bgracontrols.inc}
interface
uses
Classes, SysUtils, {$IFDEF FPC}LResources, LMessages,{$ENDIF} Forms, Controls, Graphics,
{$IFNDEF FPC}Messages, Windows, BGRAGraphics, GraphType, FPImage, {$ENDIF}
BCBaseCtrls, Dialogs, BGRABitmap, BGRADrawerFlashProgressBar;
type
{ TBGRAFlashProgressBar }
TBGRAFlashProgressBar = class(TBGRAGraphicCtrl)
private
FBGRA: TBGRABitmap;
FDrawer: TBGRADrawerFlashProgressBar;
FOnRedraw: TBGRAProgressBarRedrawEvent;
function GetBackgroundColor: TColor;
function GetBackgroundRandomize: boolean;
function GetBackgroundRandomizeMaxIntensity: word;
function GetBackgroundRandomizeMinIntensity: word;
function GetBarColor: TColor;
function GetMaxValue: integer;
function GetMinValue: integer;
function GetValue: integer;
procedure OnChangeDrawer(Sender: TObject);
procedure SetBackgroundColor(AValue: TColor);
procedure SetBackgroundRandomize(AValue: boolean);
procedure SetBackgroundRandomizeMaxIntensity(AValue: word);
procedure SetBackgroundRandomizeMinIntensity(AValue: word);
procedure SetBarColor(AValue: TColor);
procedure SetMaxValue(const AValue: integer);
procedure SetMinValue(const AValue: integer);
procedure SetValue(const AValue: integer);
protected
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
WithThemeSpace: boolean); override;
procedure WMEraseBkgnd(var Message: {$IFDEF FPC}TLMEraseBkgnd{$ELSE}TWMEraseBkgnd{$ENDIF}); message {$IFDEF FPC}LM_ERASEBKGND{$ELSE}WM_ERASEBKGND{$ENDIF};
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
public
{ Streaming }
{$IFDEF FPC}
procedure SaveToFile(AFileName: string);
procedure LoadFromFile(AFileName: string);
procedure OnFindClass({%H-}Reader: TReader; const AClassName: string;
var ComponentClass: TComponentClass);
{$ENDIF}
published
property Align;
property Anchors;
property OnClick;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseWheelUp;
property OnMouseWheelDown;
property MinValue: integer Read GetMinValue Write SetMinValue;
property MaxValue: integer Read GetMaxValue Write SetMaxValue;
property Value: integer Read GetValue Write SetValue;
property Color; deprecated 'User BarColor instead';
property BarColor: TColor read GetBarColor write SetBarColor;
property BackgroundColor: TColor read GetBackgroundColor write SetBackgroundColor;
property BackgroundRandomizeMinIntensity: word read GetBackgroundRandomizeMinIntensity write SetBackgroundRandomizeMinIntensity;
property BackgroundRandomizeMaxIntensity: word read GetBackgroundRandomizeMaxIntensity write SetBackgroundRandomizeMaxIntensity;
property BackgroundRandomize: boolean read GetBackgroundRandomize write SetBackgroundRandomize;
property OnRedraw: TBGRAProgressBarRedrawEvent read FOnredraw write FOnRedraw;
end;
{$IFDEF FPC}procedure Register;{$ENDIF}
implementation
uses BGRABitmapTypes;
{$IFDEF FPC}
procedure Register;
begin
RegisterComponents('BGRA Controls', [TBGRAFlashProgressBar]);
end;
{$ENDIF}
procedure TBGRAFlashProgressBar.SetMinValue(const AValue: integer);
begin
FDrawer.MinValue := AValue;
end;
procedure TBGRAFlashProgressBar.SetValue(const AValue: integer);
begin
FDrawer.Value := AValue;
end;
{$hints off}
procedure TBGRAFlashProgressBar.CalculatePreferredSize(
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: boolean);
begin
PreferredWidth := 379;
PreferredHeight := 33;
end;
{$hints on}
procedure TBGRAFlashProgressBar.Paint;
begin
if (ClientWidth <> FBGRA.Width) or (ClientHeight <> FBGRA.Height) then
FBGRA.SetSize(ClientWidth, ClientHeight);
FDrawer.Draw(FBGRA);
if Assigned(OnRedraw) then
OnRedraw(Self, FBGRA, {%H-}FDrawer.XPosition);
FBGRA.Draw(Canvas, 0, 0, False);
end;
{$hints off}
procedure TBGRAFlashProgressBar.WMEraseBkgnd(var Message: {$IFDEF FPC}TLMEraseBkgnd{$ELSE}TWMEraseBkgnd{$ENDIF});
begin
//do nothing
end;
{$hints on}
constructor TBGRAFlashProgressBar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
with GetControlClassDefaultSize do
SetInitialBounds(0, 0, CX, 33);
// Bitmap and Drawer
FBGRA := TBGRABitmap.Create(Width, Height);
FDrawer := TBGRADrawerFlashProgressBar.Create;
FDrawer.OnChange := OnChangeDrawer;
// Functionality
MinValue := 0;
MaxValue := 100;
Value := 30;
// Functionality and Style
Randomize;
FDrawer.RandSeed := RandSeed;
// Style
BarColor := BGRA(102, 163, 226);
BackgroundColor := BGRA(47,47,47);
BackgroundRandomize := True;
BackgroundRandomizeMinIntensity := 4000;
BackgroundRandomizeMaxIntensity := 5000;
end;
destructor TBGRAFlashProgressBar.Destroy;
begin
FreeAndNil(FBGRA);
FDrawer.Free;
inherited Destroy;
end;
{$IFDEF FPC}
procedure TBGRAFlashProgressBar.SaveToFile(AFileName: string);
var
AStream: TMemoryStream;
begin
AStream := TMemoryStream.Create;
try
WriteComponentAsTextToStream(AStream, Self);
AStream.SaveToFile(AFileName);
finally
AStream.Free;
end;
end;
procedure TBGRAFlashProgressBar.LoadFromFile(AFileName: string);
var
AStream: TMemoryStream;
begin
AStream := TMemoryStream.Create;
try
AStream.LoadFromFile(AFileName);
ReadComponentFromTextStream(AStream, TComponent(Self), OnFindClass);
finally
AStream.Free;
end;
end;
procedure TBGRAFlashProgressBar.OnFindClass(Reader: TReader;
const AClassName: string; var ComponentClass: TComponentClass);
begin
if CompareText(AClassName, 'TBGRAFlashProgressBar') = 0 then
ComponentClass := TBGRAFlashProgressBar;
end;
{$ENDIF}
procedure TBGRAFlashProgressBar.SetMaxValue(const AValue: integer);
begin
FDrawer.MaxValue := AValue;
end;
procedure TBGRAFlashProgressBar.OnChangeDrawer(Sender: TObject);
begin
Invalidate;
end;
function TBGRAFlashProgressBar.GetBackgroundColor: TColor;
begin
Result := FDrawer.BackgroundColor;
end;
function TBGRAFlashProgressBar.GetBackgroundRandomize: boolean;
begin
Result := FDrawer.BackgroundRandomize;
end;
function TBGRAFlashProgressBar.GetBackgroundRandomizeMaxIntensity: word;
begin
Result := FDrawer.BackgroundRandomizeMaxIntensity;
end;
function TBGRAFlashProgressBar.GetBackgroundRandomizeMinIntensity: word;
begin
Result := FDrawer.BackgroundRandomizeMinIntensity;
end;
function TBGRAFlashProgressBar.GetBarColor: TColor;
begin
Result := FDrawer.BarColor;
end;
function TBGRAFlashProgressBar.GetMaxValue: integer;
begin
Result := FDrawer.MaxValue;
end;
function TBGRAFlashProgressBar.GetMinValue: integer;
begin
Result := FDrawer.MinValue;
end;
function TBGRAFlashProgressBar.GetValue: integer;
begin
Result := FDrawer.Value;
end;
procedure TBGRAFlashProgressBar.SetBackgroundColor(AValue: TColor);
begin
FDrawer.BackgroundColor := AValue;
end;
procedure TBGRAFlashProgressBar.SetBackgroundRandomize(AValue: boolean);
begin
FDrawer.BackgroundRandomize := AValue;
end;
procedure TBGRAFlashProgressBar.SetBackgroundRandomizeMaxIntensity(AValue: word
);
begin
FDrawer.BackgroundRandomizeMaxIntensity := AValue;
end;
procedure TBGRAFlashProgressBar.SetBackgroundRandomizeMinIntensity(AValue: word
);
begin
FDrawer.BackgroundRandomizeMinIntensity := AValue;
end;
procedure TBGRAFlashProgressBar.SetBarColor(AValue: TColor);
begin
FDrawer.BarColor := AValue;
end;
end.