|
@@ -0,0 +1,95 @@
|
|
|
|
|
+unit umain;
|
|
|
|
|
+
|
|
|
|
|
+{$mode objfpc}{$H+}
|
|
|
|
|
+
|
|
|
|
|
+interface
|
|
|
|
|
+
|
|
|
|
|
+uses
|
|
|
|
|
+ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
|
|
|
|
+ BGRAGraphicControl, BGRABitmap, BCTypes, BGRAVirtualScreen, BGRABitmapTypes,
|
|
|
|
|
+ BGRATextFX;
|
|
|
|
|
+
|
|
|
|
|
+type
|
|
|
|
|
+
|
|
|
|
|
+ { TForm1 }
|
|
|
|
|
+
|
|
|
|
|
+ TForm1 = class(TForm)
|
|
|
|
|
+ Button1: TBGRAGraphicControl;
|
|
|
|
|
+ Timer1: TTimer;
|
|
|
|
|
+ procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
|
|
|
|
|
+ Shift: TShiftState; X, Y: integer);
|
|
|
|
|
+ procedure Button1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
|
|
|
|
+ procedure Timer1StartTimer(Sender: TObject);
|
|
|
|
|
+ procedure Timer1Timer(Sender: TObject);
|
|
|
|
|
+ private
|
|
|
|
|
+ { private declarations }
|
|
|
|
|
+ public
|
|
|
|
|
+ { public declarations }
|
|
|
|
|
+ MouseP: TPoint;
|
|
|
|
|
+ CircleX: single;
|
|
|
|
|
+ CircleAlpha: byte;
|
|
|
|
|
+ end;
|
|
|
|
|
+
|
|
|
|
|
+var
|
|
|
|
|
+ Form1: TForm1;
|
|
|
|
|
+
|
|
|
|
|
+implementation
|
|
|
|
|
+
|
|
|
|
|
+{$R *.lfm}
|
|
|
|
|
+
|
|
|
|
|
+{ TForm1 }
|
|
|
|
|
+
|
|
|
|
|
+procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
|
|
|
|
|
+ Shift: TShiftState; X, Y: integer);
|
|
|
|
|
+begin
|
|
|
|
|
+ Timer1.Enabled := False;
|
|
|
|
|
+ MouseP := Point(X, Y);
|
|
|
|
|
+ Timer1.Enabled := True;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TForm1.Button1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
|
|
|
|
+var
|
|
|
|
|
+ temp: TBGRABitmap;
|
|
|
|
|
+begin
|
|
|
|
|
+ { Shadow }
|
|
|
|
|
+ Bitmap.Fill(BGRAPixelTransparent);
|
|
|
|
|
+ Bitmap.RoundRect(5, 5, Button1.Width - 5, Button1.Height - 5, 5, 5,
|
|
|
|
|
+ BGRA(100, 100, 100), BGRA(100, 100, 100));
|
|
|
|
|
+
|
|
|
|
|
+ temp := Bitmap.FilterBlurRadial(5, 5, rbFast) as TBGRABitmap;
|
|
|
|
|
+ Bitmap.Fill(BGRAPixelTransparent);
|
|
|
|
|
+ Bitmap.PutImage(0, 0, temp, dmDrawWithTransparency);
|
|
|
|
|
+ temp.Free;
|
|
|
|
|
+
|
|
|
|
|
+ { Round Rectangle }
|
|
|
|
|
+ temp := TBGRABitmap.Create(Button1.Width, Button1.Height, BGRAWhite);
|
|
|
|
|
+ { Circle Effect }
|
|
|
|
|
+ temp.EllipseAntialias(MouseP.X, MouseP.Y, CircleX, CircleX,
|
|
|
|
|
+ BGRA(100, 100, 100, CircleAlpha), 1, BGRA(100, 100, 100, CircleAlpha));
|
|
|
|
|
+ Bitmap.FillRoundRectAntialias(5, 0, Button1.Width - 5, Button1.Height -
|
|
|
|
|
+ 5, 5, 5, temp, [rrDefault], False);
|
|
|
|
|
+ temp.Free;
|
|
|
|
|
+
|
|
|
|
|
+ { Text }
|
|
|
|
|
+ temp := TextShadow(Button1.Width, Button1.Height, 'Material Design',
|
|
|
|
|
+ 20, BGRABlack, BGRABlack, 2, 2, 2) as TBGRABitmap;
|
|
|
|
|
+ Bitmap.PutImage(0, 0, temp, dmDrawWithTransparency);
|
|
|
|
|
+ temp.Free;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TForm1.Timer1StartTimer(Sender: TObject);
|
|
|
|
|
+begin
|
|
|
|
|
+ CircleAlpha := 255;
|
|
|
|
|
+ CircleX := 5;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TForm1.Timer1Timer(Sender: TObject);
|
|
|
|
|
+begin
|
|
|
|
|
+ CircleX := CircleX + 4;
|
|
|
|
|
+ CircleAlpha := CircleAlpha - 5;
|
|
|
|
|
+ if CircleAlpha <= 0 then
|
|
|
|
|
+ Timer1.Enabled := False;
|
|
|
|
|
+ Button1.DiscardBitmap;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+end.
|