-
-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathbcmaterialprogressbarmarquee.pas
128 lines (110 loc) · 2.96 KB
/
bcmaterialprogressbarmarquee.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
unit BCMaterialProgressBarMarquee;
{$mode delphi}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, BGRAGraphicControl,
ExtCtrls, BGRABitmap, BGRABitmapTypes;
type
{ TBCMaterialProgressBarMarquee }
TBCMaterialProgressBarMarquee = class(TBGRAGraphicControl)
private
FBarColor: TColor;
progressbasr_cx, progressbar_cw: integer;
progressbar_x, progressbar_w: integer;
progressbar_increase: boolean;
FTimer: TTimer;
procedure SetBarColor(AValue: TColor);
procedure TimerOnTimer(Sender: TObject);
protected
procedure SetEnabled(Value: Boolean); override;
procedure SetVisible(Value: Boolean); override;
public
procedure DiscardBitmap;
procedure RedrawBitmapContent; override;
constructor Create(AOwner: TComponent); override;
published
property BarColor: TColor read FBarColor write SetBarColor;
property Visible;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('BGRA Controls', [TBCMaterialProgressBarMarquee]);
end;
{ TBCMaterialProgressBarMarquee }
procedure TBCMaterialProgressBarMarquee.TimerOnTimer(Sender: TObject);
begin
if progressbar_increase then
begin
progressbar_w := progressbar_w + progressbar_cw;
if (progressbar_w >= Width - 5) then
begin
progressbar_increase := False;
end;
end
else
begin
progressbar_w := progressbar_w - progressbar_cw;
if (progressbar_w <= progressbar_cw) then
begin
progressbar_increase := True;
end;
end;
progressbar_x := progressbar_x + progressbasr_cx;
if (progressbar_x >= Width) then
progressbar_x := -progressbar_w;
DiscardBitmap;
end;
procedure TBCMaterialProgressBarMarquee.SetEnabled(Value: Boolean);
begin
inherited SetEnabled(Value);
FTimer.Enabled := Value and Visible;
DiscardBitmap;
end;
procedure TBCMaterialProgressBarMarquee.SetVisible(Value: Boolean);
begin
inherited SetVisible(Value);
FTimer.Enabled := Enabled and Value;
DiscardBitmap;
end;
procedure TBCMaterialProgressBarMarquee.SetBarColor(AValue: TColor);
begin
if FBarColor = AValue then
Exit;
FBarColor := AValue;
DiscardBitmap;
end;
procedure TBCMaterialProgressBarMarquee.DiscardBitmap;
begin
inherited DiscardBitmap;
progressbar_cw := Width div 50;
progressbasr_cx := progressbar_cw * 2;
end;
procedure TBCMaterialProgressBarMarquee.RedrawBitmapContent;
begin
if FTimer.Enabled then
begin
Bitmap.Fill(Color);
Bitmap.Rectangle(Rect(progressbar_x, 0, progressbar_x + progressbar_w, Bitmap.Height),
BarColor, BarColor);
end
else
begin
Bitmap.Fill(BarColor);
end;
end;
constructor TBCMaterialProgressBarMarquee.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
progressbar_w := Width;
progressbar_x := -progressbar_w;
progressbar_increase := False;
FTimer := TTimer.Create(Self);
FTimer.Interval := 15;
FTimer.OnTimer := TimerOnTimer;
FTimer.Enabled := True;
Color := clWhite;
BarColor := $00E2A366;
end;
end.