├── Library
├── RX10Berlin
│ ├── pkgZMaterial.res
│ ├── pkgZMaterial.dpk
│ └── pkgZMaterial.dproj
├── NativeDraw.inc
├── FMX.ZMaterialTypes.pas
├── RX10Godzilla
│ ├── pkgZMaterial.dpk
│ └── pkgZMaterial.dproj
├── RX10Seattle
│ ├── pkgZMaterial.dpk
│ └── pkgZMaterial.dproj
├── FMX.ZMaterialActionButton.pas
├── FMX.ZMaterialBackButton.pas
├── FMX.ZNativeDrawFigure.pas
└── FMX.ZMaterialEdit.pas
├── Demo
├── MaterialEdit
│ ├── prjMaterialEdit.res
│ ├── prjMaterialEdit.dpr
│ ├── uMain.pas
│ ├── uMain.fmx
│ └── prjMaterialEdit.deployproj
├── MaterialBackButton
│ ├── prjMaterialBackButton.res
│ ├── prjMaterialBackButton.dpr
│ ├── uMain.pas
│ └── uMain.fmx
└── MaterialActionButton
│ ├── prjMaterialActionButton.res
│ ├── prjMaterialActionButton.dpr
│ ├── uMain.pas
│ ├── uMain.fmx
│ └── prjMaterialActionButton.deployproj
├── README.md
├── _clean.bat
└── .gitignore
/Library/RX10Berlin/pkgZMaterial.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rzaripov1990/ZMaterialComponents/HEAD/Library/RX10Berlin/pkgZMaterial.res
--------------------------------------------------------------------------------
/Demo/MaterialEdit/prjMaterialEdit.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rzaripov1990/ZMaterialComponents/HEAD/Demo/MaterialEdit/prjMaterialEdit.res
--------------------------------------------------------------------------------
/Demo/MaterialBackButton/prjMaterialBackButton.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rzaripov1990/ZMaterialComponents/HEAD/Demo/MaterialBackButton/prjMaterialBackButton.res
--------------------------------------------------------------------------------
/Demo/MaterialActionButton/prjMaterialActionButton.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rzaripov1990/ZMaterialComponents/HEAD/Demo/MaterialActionButton/prjMaterialActionButton.res
--------------------------------------------------------------------------------
/Library/NativeDraw.inc:
--------------------------------------------------------------------------------
1 | {$SCOPEDENUMS ON}
2 |
3 | {$IFDEF MACOS}
4 | {$IFNDEF IOS}
5 | {$DEFINE MACOSONLY}
6 | {$ENDIF}
7 | {$ENDIF}
8 |
9 | {$DEFINE UseNativeDraw} // 使用原生绘图
10 |
11 |
--------------------------------------------------------------------------------
/Demo/MaterialEdit/prjMaterialEdit.dpr:
--------------------------------------------------------------------------------
1 | program prjMaterialEdit;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | uMain in 'uMain.pas' {Form1};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TForm1, Form1);
13 | Application.Run;
14 |
15 | end.
16 |
--------------------------------------------------------------------------------
/Demo/MaterialActionButton/prjMaterialActionButton.dpr:
--------------------------------------------------------------------------------
1 | program prjMaterialActionButton;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | uMain in 'uMain.pas' {Form1};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TForm1, Form1);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/Demo/MaterialBackButton/prjMaterialBackButton.dpr:
--------------------------------------------------------------------------------
1 | program prjMaterialBackButton;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | uMain in 'uMain.pas' {Form2};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TForm2, Form2);
13 | Application.Run;
14 |
15 | end.
16 |
--------------------------------------------------------------------------------
/Library/FMX.ZMaterialTypes.pas:
--------------------------------------------------------------------------------
1 | unit FMX.ZMaterialTypes;
2 |
3 | {
4 | author: Ravil (ZuBy) Zaripov
5 | email: rzaripov1990@gmail.com
6 | http://github.com/rzaripov1990
7 |
8 | 2017
9 | }
10 |
11 | interface
12 |
13 | uses
14 | System.Classes;
15 |
16 | const
17 | cpaAllPlatforms = pidWin32 or pidWin64 or pidOSX32 or pidAndroid or pidiOSDevice32 or pidiOSDevice64 or
18 | pidiOSSimulator;
19 |
20 | implementation
21 |
22 | end.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ZMaterialComponents
2 | * TZMaterialEdit
3 | * TZMaterialBackButton (animation by sinuke https://github.com/sinuke)
4 | * TZMaterialActionButton
5 | * TZNativeDrawFigureLine
6 | * TZNativeDrawFigureRectangle
7 | * TZNativeDrawFigureRoundRect
8 | * TZNativeDrawFigureEllipse
9 | * TZNativeDrawFigureCircle
10 | * TZNativeDrawFigureArc
11 |
12 | # FMXNativeDraw
13 | ```
14 | (c) 2017 by Aone
15 | QQ: 1467948783
16 | http://www.cnblogs.com/onechen
17 | https://github.com/OneChen/FMXNativeDraw
18 | ```
19 |
20 | # PackageGenerator
21 | https://github.com/errorcalc/PackagesGenerator
22 |
--------------------------------------------------------------------------------
/_clean.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 | ECHO Cleaning...
3 |
4 | del /S %1*.str%2%3%4
5 | del /S %1*.rsm%2%3%4
6 | del /S %1*.lib%2%3%4
7 | del /S %1*.err%2%3%4
8 | del /S %1*.tds%2%3%4
9 | del /S %1*.hpp%2%3%4
10 | del /S %1*.obj%2%3%4
11 | del /S %1*.tds%2%3%4
12 | rem del /S %1*.map%2%3%4
13 | del /S %1*.drc%2%3%4
14 | del /S %1*.#*%2%3%4
15 | del /S %1*.csm%2%3%4
16 | del /S %1*.bpi%2%3%4
17 | del /S %1*.lib%2%3%4
18 | del /S %1*.ilc%2%3%4
19 | del /S %1*.ild%2%3%4
20 | del /S %1*.ilf%2%3%4
21 | del /S %1*.ils%2%3%4
22 | del /S %1*.cgi%2%3%4
23 | del /S %1*.drc%2%3%4
24 | del /S %1*.$*%2%3%4
25 | del /S %1*.dcu%2%3%4
26 | del /S %1*.bak%2%3%4
27 | del /S %1*.gid%2%3%4
28 | del /S %1*.fts%2%3%4
29 | del /S %1*.~*%2%3%4
30 | del /S %1*.dsk%2%3%4
31 | del /S %1*.ddp%2%3%4
32 | del /S %1*.bkm%2%3%4
33 | del /S %1*_orig_?.*%2%3%4
34 | del /S %1*.ressrc%2%3%4
35 | del /S %1*.cesettings%2%3%4
36 | del /S %1*.stat%2%3%4
37 | del /S %1*.identcache%2%3%4
38 | del /S %1*.local%2%3%4
39 |
40 | for /r . %%a in (__history\) do @if exist "%%a" rd /s /q "%%a"
41 | for /r . %%a in (__recovery\) do @if exist "%%a" rd /s /q "%%a"
--------------------------------------------------------------------------------
/Library/RX10Berlin/pkgZMaterial.dpk:
--------------------------------------------------------------------------------
1 | package pkgZMaterial;
2 |
3 | {$R *.res}
4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
5 | {$ALIGN 8}
6 | {$ASSERTIONS ON}
7 | {$BOOLEVAL OFF}
8 | {$DEBUGINFO OFF}
9 | {$EXTENDEDSYNTAX ON}
10 | {$IMPORTEDDATA ON}
11 | {$IOCHECKS ON}
12 | {$LOCALSYMBOLS ON}
13 | {$LONGSTRINGS ON}
14 | {$OPENSTRINGS ON}
15 | {$OPTIMIZATION OFF}
16 | {$OVERFLOWCHECKS OFF}
17 | {$RANGECHECKS OFF}
18 | {$REFERENCEINFO ON}
19 | {$SAFEDIVIDE OFF}
20 | {$STACKFRAMES ON}
21 | {$TYPEDADDRESS OFF}
22 | {$VARSTRINGCHECKS ON}
23 | {$WRITEABLECONST OFF}
24 | {$MINENUMSIZE 1}
25 | {$IMAGEBASE $400000}
26 | {$DEFINE DEBUG}
27 | {$ENDIF IMPLICITBUILDING}
28 | {$DESCRIPTION 'author: ZuBy'}
29 | {$LIBSUFFIX '310'}
30 | {$IMPLICITBUILD ON}
31 |
32 | requires
33 | rtl,
34 | fmx;
35 |
36 | contains
37 | FMX.Graphics.Native in '..\FMX.Graphics.Native.pas',
38 | FMX.ZMaterialActionButton in '..\FMX.ZMaterialActionButton.pas',
39 | FMX.ZMaterialBackButton in '..\FMX.ZMaterialBackButton.pas',
40 | FMX.ZMaterialEdit in '..\FMX.ZMaterialEdit.pas',
41 | FMX.ZMaterialTypes in '..\FMX.ZMaterialTypes.pas',
42 | FMX.ZNativeDrawFigure in '..\FMX.ZNativeDrawFigure.pas';
43 |
44 | end.
45 |
--------------------------------------------------------------------------------
/Library/RX10Godzilla/pkgZMaterial.dpk:
--------------------------------------------------------------------------------
1 | package pkgZMaterial;
2 |
3 | {$R *.res}
4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
5 | {$ALIGN 8}
6 | {$ASSERTIONS ON}
7 | {$BOOLEVAL OFF}
8 | {$DEBUGINFO OFF}
9 | {$EXTENDEDSYNTAX ON}
10 | {$IMPORTEDDATA ON}
11 | {$IOCHECKS ON}
12 | {$LOCALSYMBOLS ON}
13 | {$LONGSTRINGS ON}
14 | {$OPENSTRINGS ON}
15 | {$OPTIMIZATION OFF}
16 | {$OVERFLOWCHECKS OFF}
17 | {$RANGECHECKS OFF}
18 | {$REFERENCEINFO ON}
19 | {$SAFEDIVIDE OFF}
20 | {$STACKFRAMES ON}
21 | {$TYPEDADDRESS OFF}
22 | {$VARSTRINGCHECKS ON}
23 | {$WRITEABLECONST OFF}
24 | {$MINENUMSIZE 1}
25 | {$IMAGEBASE $400000}
26 | {$DEFINE DEBUG}
27 | {$ENDIF IMPLICITBUILDING}
28 | {$DESCRIPTION 'author: ZuBy'}
29 | {$LIBSUFFIX '320'}
30 | {$IMPLICITBUILD ON}
31 |
32 | requires
33 | rtl,
34 | fmx;
35 |
36 | contains
37 | FMX.Graphics.Native in '..\FMX.Graphics.Native.pas',
38 | FMX.ZMaterialActionButton in '..\FMX.ZMaterialActionButton.pas',
39 | FMX.ZMaterialBackButton in '..\FMX.ZMaterialBackButton.pas',
40 | FMX.ZMaterialEdit in '..\FMX.ZMaterialEdit.pas',
41 | FMX.ZMaterialTypes in '..\FMX.ZMaterialTypes.pas',
42 | FMX.ZNativeDrawFigure in '..\FMX.ZNativeDrawFigure.pas';
43 |
44 | end.
45 |
--------------------------------------------------------------------------------
/Library/RX10Seattle/pkgZMaterial.dpk:
--------------------------------------------------------------------------------
1 | package pkgZMaterial;
2 |
3 | {$R *.res}
4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
5 | {$ALIGN 8}
6 | {$ASSERTIONS ON}
7 | {$BOOLEVAL OFF}
8 | {$DEBUGINFO OFF}
9 | {$EXTENDEDSYNTAX ON}
10 | {$IMPORTEDDATA ON}
11 | {$IOCHECKS ON}
12 | {$LOCALSYMBOLS ON}
13 | {$LONGSTRINGS ON}
14 | {$OPENSTRINGS ON}
15 | {$OPTIMIZATION OFF}
16 | {$OVERFLOWCHECKS OFF}
17 | {$RANGECHECKS OFF}
18 | {$REFERENCEINFO ON}
19 | {$SAFEDIVIDE OFF}
20 | {$STACKFRAMES ON}
21 | {$TYPEDADDRESS OFF}
22 | {$VARSTRINGCHECKS ON}
23 | {$WRITEABLECONST OFF}
24 | {$MINENUMSIZE 1}
25 | {$IMAGEBASE $400000}
26 | {$DEFINE DEBUG}
27 | {$ENDIF IMPLICITBUILDING}
28 | {$DESCRIPTION 'author: ZuBy'}
29 | {$LIBSUFFIX '300'}
30 | {$IMPLICITBUILD ON}
31 |
32 | requires
33 | rtl,
34 | fmx;
35 |
36 | contains
37 | FMX.Graphics.Native in '..\FMX.Graphics.Native.pas',
38 | FMX.ZMaterialActionButton in '..\FMX.ZMaterialActionButton.pas',
39 | FMX.ZMaterialBackButton in '..\FMX.ZMaterialBackButton.pas',
40 | FMX.ZMaterialEdit in '..\FMX.ZMaterialEdit.pas',
41 | FMX.ZMaterialTypes in '..\FMX.ZMaterialTypes.pas',
42 | FMX.ZNativeDrawFigure in '..\FMX.ZNativeDrawFigure.pas';
43 |
44 | end.
45 |
--------------------------------------------------------------------------------
/Demo/MaterialEdit/uMain.pas:
--------------------------------------------------------------------------------
1 | unit uMain;
2 |
3 | {
4 | author: ZuBy
5 |
6 | https://github.com/rzaripov1990
7 | http://blog.rzaripov.kz
8 |
9 | 2017
10 | }
11 |
12 | interface
13 |
14 | uses
15 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
16 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts, FMX.ZMaterialEdit, FMX.StdCtrls,
17 | FMX.Controls.Presentation;
18 |
19 | type
20 | TForm1 = class(TForm)
21 | Button1: TButton;
22 | Button2: TButton;
23 | ToolBar1: TToolBar;
24 | Label1: TLabel;
25 | zmeEmail: TZMaterialEdit;
26 | zmePassword: TZMaterialEdit;
27 | zmeLogin: TZMaterialEdit;
28 | procedure Button1Click(Sender: TObject);
29 | procedure Button2Click(Sender: TObject);
30 | private
31 | { Private declarations }
32 | public
33 | { Public declarations }
34 | end;
35 |
36 | var
37 | Form1: TForm1;
38 |
39 | implementation
40 |
41 | {$R *.fmx}
42 |
43 | procedure TForm1.Button1Click(Sender: TObject);
44 | begin
45 | zmeEmail.Text := 'rzaripov1990@gmail.com';
46 | zmeLogin.Text := 'ZuBy';
47 | zmePassword.Text := '123456789!@';
48 | end;
49 |
50 | procedure TForm1.Button2Click(Sender: TObject);
51 | begin
52 | zmeEmail.Text := '';
53 | zmeLogin.Text := '';
54 | zmePassword.Text := '';
55 | end;
56 |
57 | end.
58 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Uncomment these types if you want even more clean repository. But be careful.
2 | # It can make harm to an existing project source. Read explanations below.
3 | #
4 | # Resource files are binaries containing manifest, project icon and version info.
5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
6 | #*.res
7 | #
8 | # Type library file (binary). In old Delphi versions it should be stored.
9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
10 | #*.tlb
11 | #
12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
13 | # Uncomment this if you are not using diagrams or use newer Delphi version.
14 | #*.ddp
15 | #
16 | # Visual LiveBindings file. Added in Delphi XE2.
17 | # Uncomment this if you are not using LiveBindings Designer.
18 | #*.vlb
19 | #
20 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
21 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
22 | #*.deployproj
23 | #
24 | # C++ object files produced when C/C++ Output file generation is configured.
25 | # Uncomment this if you are not using external objects (zlib library for example).
26 | #*.obj
27 | #
28 |
29 | # Delphi compiler-generated binaries (safe to delete)
30 | *.exe
31 | *.dll
32 | *.bpl
33 | *.bpi
34 | *.dcp
35 | *.so
36 | *.apk
37 | *.drc
38 | *.map
39 | *.dres
40 | *.rsm
41 | *.tds
42 | *.dcu
43 | *.lib
44 | *.a
45 | *.o
46 | *.ocx
47 |
48 | # Delphi autogenerated files (duplicated info)
49 | *.cfg
50 | *.hpp
51 | *Resource.rc
52 |
53 | # Delphi local files (user-specific info)
54 | *.local
55 | *.identcache
56 | *.projdata
57 | *.tvsconfig
58 | *.dsk
59 |
60 | # Delphi history and backups
61 | __history/
62 | __recovery/
63 | *.~*
64 |
65 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi)
66 | *.stat
67 |
--------------------------------------------------------------------------------
/Demo/MaterialBackButton/uMain.pas:
--------------------------------------------------------------------------------
1 | unit uMain;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
8 | FMX.StdCtrls, FMX.Layouts, FMX.Effects, FMX.Objects,
9 | FMX.ZMaterialBackButton;
10 |
11 | type
12 | TForm2 = class(TForm)
13 | Rectangle1: TRectangle;
14 | ShadowEffect1: TShadowEffect;
15 | zmbKind: TZMaterialBackButton;
16 | zmbBack: TZMaterialBackButton;
17 | zmbClose: TZMaterialBackButton;
18 | sbMenu: TSpeedButton;
19 | sbBack: TSpeedButton;
20 | sbClose: TSpeedButton;
21 | procedure zmbBackClick(Sender: TObject);
22 | procedure zmbCloseClick(Sender: TObject);
23 | procedure zmbKindClick(Sender: TObject);
24 | private
25 | { Private declarations }
26 | public
27 | { Public declarations }
28 | end;
29 |
30 | var
31 | Form2: TForm2;
32 |
33 | implementation
34 |
35 | {$R *.fmx}
36 |
37 | procedure TForm2.zmbBackClick(Sender: TObject);
38 | begin
39 | if zmbBack.Tag = 0 then
40 | zmbBack.Animate(TZMaterialBackButtonAnimationType.BackToMenu)
41 | else
42 | zmbBack.Animate(TZMaterialBackButtonAnimationType.MenuToBack);
43 | zmbBack.Tag := zmbBack.Tag xor 1;
44 | end;
45 |
46 | procedure TForm2.zmbCloseClick(Sender: TObject);
47 | begin
48 | if zmbClose.Tag = 0 then
49 | zmbClose.Animate(TZMaterialBackButtonAnimationType.CloseToMenu)
50 | else
51 | zmbClose.Animate(TZMaterialBackButtonAnimationType.MenuToClose);
52 | zmbClose.Tag := zmbClose.Tag xor 1;
53 | end;
54 |
55 | procedure TForm2.zmbKindClick(Sender: TObject);
56 | begin
57 | case zmbKind.Kind of
58 | TZMaterialBackButtonKind.Menu:
59 | zmbKind.Kind := TZMaterialBackButtonKind.Back;
60 | TZMaterialBackButtonKind.Back:
61 | zmbKind.Kind := TZMaterialBackButtonKind.Close;
62 | TZMaterialBackButtonKind.Close:
63 | zmbKind.Kind := TZMaterialBackButtonKind.Menu;
64 | end;
65 | end;
66 |
67 | end.
68 |
--------------------------------------------------------------------------------
/Demo/MaterialBackButton/uMain.fmx:
--------------------------------------------------------------------------------
1 | object Form2: TForm2
2 | Left = 0
3 | Top = 0
4 | Caption = 'Back Button Transformations Demo'
5 | ClientHeight = 296
6 | ClientWidth = 253
7 | Fill.Kind = Solid
8 | Position = DesktopCenter
9 | FormFactor.Width = 320
10 | FormFactor.Height = 480
11 | FormFactor.Devices = [Desktop]
12 | DesignerMasterStyle = 0
13 | object Rectangle1: TRectangle
14 | Align = Top
15 | Fill.Color = xFF5174E3
16 | Locked = True
17 | HitTest = False
18 | Size.Width = 253.000000000000000000
19 | Size.Height = 56.000000000000000000
20 | Size.PlatformDefault = False
21 | Stroke.Kind = None
22 | object ShadowEffect1: TShadowEffect
23 | Distance = 1.000000000000000000
24 | Direction = 90.000000000000000000
25 | Softness = 0.200000002980232200
26 | Opacity = 0.300000011920929000
27 | ShadowColor = claBlack
28 | end
29 | object sbMenu: TSpeedButton
30 | Align = Left
31 | Size.Width = 57.000000000000000000
32 | Size.Height = 56.000000000000000000
33 | Size.PlatformDefault = False
34 | OnClick = zmbKindClick
35 | object zmbKind: TZMaterialBackButton
36 | Align = Left
37 | Locked = True
38 | Size.Width = 57.000000000000000000
39 | Size.Height = 56.000000000000000000
40 | Size.PlatformDefault = False
41 | TabOrder = 1
42 | end
43 | end
44 | object sbBack: TSpeedButton
45 | Align = Left
46 | Position.X = 57.000000000000000000
47 | Size.Width = 57.000000000000000000
48 | Size.Height = 56.000000000000000000
49 | Size.PlatformDefault = False
50 | OnClick = zmbBackClick
51 | object zmbBack: TZMaterialBackButton
52 | Align = Left
53 | Locked = True
54 | Size.Width = 57.000000000000000000
55 | Size.Height = 56.000000000000000000
56 | Size.PlatformDefault = False
57 | TabOrder = 1
58 | Kind = Back
59 | end
60 | end
61 | object sbClose: TSpeedButton
62 | Align = Left
63 | Position.X = 114.000000000000000000
64 | Size.Width = 57.000000000000000000
65 | Size.Height = 56.000000000000000000
66 | Size.PlatformDefault = False
67 | OnClick = zmbCloseClick
68 | object zmbClose: TZMaterialBackButton
69 | Align = Left
70 | Locked = True
71 | Size.Width = 57.000000000000000000
72 | Size.Height = 56.000000000000000000
73 | Size.PlatformDefault = False
74 | TabOrder = 1
75 | Kind = Close
76 | end
77 | end
78 | end
79 | end
80 |
--------------------------------------------------------------------------------
/Demo/MaterialActionButton/uMain.pas:
--------------------------------------------------------------------------------
1 | unit uMain;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts, FMX.ZMaterialActionButton,
8 | FMX.Effects, FMX.ZNativeDrawFigure, FMX.Objects;
9 |
10 | type
11 | TForm1 = class(TForm)
12 | ZNativeDrawFigureLine1: TZNativeDrawFigureLine;
13 | ZNativeDrawFigureRectangle1: TZNativeDrawFigureRectangle;
14 | ZNativeDrawFigureRoundRect1: TZNativeDrawFigureRoundRect;
15 | ZNativeDrawFigureEllipse1: TZNativeDrawFigureEllipse;
16 | ZNativeDrawFigureCircle1: TZNativeDrawFigureCircle;
17 | ZNativeDrawFigureArc1: TZNativeDrawFigureArc;
18 | ZMaterialActionButton1: TZMaterialActionButton;
19 | Text1: TText;
20 | Timer1: TTimer;
21 | Circle1: TCircle;
22 | Text2: TText;
23 | procedure ZMaterialActionButton1Click(Sender: TObject);
24 | procedure FormResize(Sender: TObject);
25 | procedure Timer1Timer(Sender: TObject);
26 | procedure ZMaterialBackButton1Click(Sender: TObject);
27 | procedure ZMaterialBackButton2Click(Sender: TObject);
28 | private
29 | { Private declarations }
30 | public
31 | { Public declarations }
32 | end;
33 |
34 | var
35 | Form1: TForm1;
36 |
37 | implementation
38 |
39 | {$R *.fmx}
40 |
41 | procedure TForm1.FormResize(Sender: TObject);
42 | begin
43 | ZMaterialActionButton1.Position.X := ClientWidth - 16 - ZMaterialActionButton1.Width;
44 | ZMaterialActionButton1.Position.Y := ClientHeight - 16 - ZMaterialActionButton1.Height;
45 | end;
46 |
47 | procedure TForm1.Timer1Timer(Sender: TObject);
48 | begin
49 | if ZNativeDrawFigureArc1.EndAngle >= 350 then
50 | ZNativeDrawFigureArc1.EndAngle := 0;
51 |
52 | ZNativeDrawFigureArc1.EndAngle := ZNativeDrawFigureArc1.EndAngle + 10;
53 | end;
54 |
55 | procedure TForm1.ZMaterialActionButton1Click(Sender: TObject);
56 | begin
57 | ShowMessage('Floating Action Button Clicked');
58 | end;
59 |
60 | procedure TForm1.ZMaterialBackButton1Click(Sender: TObject);
61 | begin
62 | if ZMaterialBackButton1.Tag = 0 then
63 | ZMaterialBackButton1.Animate(TZMaterialBackButtonAnimationType.MenuToBack)
64 | else
65 | ZMaterialBackButton1.Animate(TZMaterialBackButtonAnimationType.BackToMenu);
66 | ZMaterialBackButton1.Tag := ZMaterialBackButton1.Tag xor 1;
67 | end;
68 |
69 | procedure TForm1.ZMaterialBackButton2Click(Sender: TObject);
70 | begin
71 | if ZMaterialBackButton2.Tag = 0 then
72 | ZMaterialBackButton2.Animate(TZMaterialBackButtonAnimationType.CloseToMenu)
73 | else
74 | ZMaterialBackButton2.Animate(TZMaterialBackButtonAnimationType.MenuToClose);
75 | ZMaterialBackButton2.Tag := ZMaterialBackButton2.Tag xor 1;
76 | end;
77 |
78 | end.
79 |
--------------------------------------------------------------------------------
/Library/FMX.ZMaterialActionButton.pas:
--------------------------------------------------------------------------------
1 | unit FMX.ZMaterialActionButton;
2 |
3 | {
4 | author: Ravil (ZuBy) Zaripov
5 | email: rzaripov1990@gmail.com
6 | http://github.com/rzaripov1990
7 |
8 | 2017
9 | }
10 |
11 | interface
12 |
13 | uses
14 | System.SysUtils, System.Classes, System.UITypes,
15 | FMX.Types, FMX.Controls, FMX.Layouts, FMX.Effects,
16 | FMX.ZMaterialTypes, FMX.ZNativeDrawFigure;
17 |
18 | type
19 |
20 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
21 | TZMaterialActionButton = class(TZNativeDrawFigureTemplateWithEvents)
22 | private
23 | { Private declarations }
24 | FColor: TAlphaColor;
25 | FShadow: TShadowEffect;
26 |
27 | procedure SetColor(const Value: TAlphaColor);
28 | function GetShadow: Boolean;
29 | procedure SetShadow(const Value: Boolean);
30 | function GetShadowDistance: Single;
31 | procedure SetShadowDistance(const Value: Single);
32 | function GetShadowSoftness: Single;
33 | procedure SetShadowSoftness(const Value: Single);
34 | function GetShadowOpacity: Single;
35 | procedure SetShadowOpacity(const Value: Single);
36 | protected
37 | { Protected declarations }
38 | public
39 | { Public declarations }
40 | constructor Create(AOwner: TComponent); override;
41 | destructor Destroy; override;
42 | published
43 | { Published declarations }
44 | property Color: TAlphaColor read FColor write SetColor;
45 | property Shadow: Boolean read GetShadow write SetShadow default true;
46 | property ShadowDistance: Single read GetShadowDistance write SetShadowDistance;
47 | property ShadowSoftness: Single read GetShadowSoftness write SetShadowSoftness;
48 | property ShadowOpacity: Single read GetShadowOpacity write SetShadowOpacity;
49 | end;
50 |
51 | procedure Register;
52 |
53 | implementation
54 |
55 | uses
56 | FMX.Graphics, FMX.Platform;
57 |
58 | procedure Register;
59 | begin
60 | RegisterComponents('ZMaterial', [TZMaterialActionButton]);
61 | end;
62 |
63 | { TZMaterialActionButton }
64 |
65 | constructor TZMaterialActionButton.Create(AOwner: TComponent);
66 | var
67 | IScreen: IFMXScreenService;
68 | begin
69 | inherited Create(AOwner);
70 |
71 | FShadow := TShadowEffect.Create(Self);
72 | FShadow.Parent := Self;
73 | FShadow.Stored := false;
74 | FShadow.Direction := 90;
75 | FShadow.Softness := 0.9;
76 | FShadow.Distance := 2;
77 | FShadow.Opacity := 0.4;
78 |
79 | if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IScreen) then
80 | FShadow.Distance := IScreen.GetScreenScale;
81 |
82 | Kind := TZNativeDrawFigureKind.Circle;
83 | FColor := $FFE91E63;
84 | Fill.Color := FColor;
85 | Stroke.Kind := TBrushKind.None;
86 |
87 | SetSize(56, 56);
88 | end;
89 |
90 | destructor TZMaterialActionButton.Destroy;
91 | begin
92 | FShadow.Parent := nil;
93 | FShadow.Free;
94 |
95 | inherited;
96 | end;
97 |
98 | function TZMaterialActionButton.GetShadow: Boolean;
99 | begin
100 | Result := FShadow.Enabled;
101 | end;
102 |
103 | function TZMaterialActionButton.GetShadowDistance: Single;
104 | begin
105 | Result := FShadow.Distance;
106 | end;
107 |
108 | function TZMaterialActionButton.GetShadowOpacity: Single;
109 | begin
110 | Result := FShadow.Opacity;
111 | end;
112 |
113 | function TZMaterialActionButton.GetShadowSoftness: Single;
114 | begin
115 | Result := FShadow.Softness;
116 | end;
117 |
118 | procedure TZMaterialActionButton.SetColor(const Value: TAlphaColor);
119 | begin
120 | if FColor = Value then
121 | Exit;
122 |
123 | FColor := Value;
124 | Fill.Color := FColor;
125 | end;
126 |
127 | procedure TZMaterialActionButton.SetShadow(const Value: Boolean);
128 | begin
129 | FShadow.Enabled := Value;
130 | end;
131 |
132 | procedure TZMaterialActionButton.SetShadowDistance(const Value: Single);
133 | begin
134 | FShadow.Distance := Value;
135 | end;
136 |
137 | procedure TZMaterialActionButton.SetShadowOpacity(const Value: Single);
138 | begin
139 | FShadow.Opacity := Value;
140 | end;
141 |
142 | procedure TZMaterialActionButton.SetShadowSoftness(const Value: Single);
143 | begin
144 | FShadow.Softness := Value;
145 | end;
146 |
147 | end.
148 |
--------------------------------------------------------------------------------
/Demo/MaterialEdit/uMain.fmx:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 0
3 | Top = 0
4 | Caption = 'Form1'
5 | ClientHeight = 380
6 | ClientWidth = 249
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | DesignerMasterStyle = 0
11 | object Button1: TButton
12 | Anchors = [akLeft, akBottom]
13 | Position.X = 8.000000000000000000
14 | Position.Y = 326.000000000000000000
15 | Size.Width = 113.000000000000000000
16 | Size.Height = 44.000000000000000000
17 | Size.PlatformDefault = False
18 | TabOrder = 0
19 | Text = #1047#1072#1087#1086#1083#1085#1080#1090#1100
20 | OnClick = Button1Click
21 | end
22 | object Button2: TButton
23 | Anchors = [akLeft, akBottom]
24 | Position.X = 128.000000000000000000
25 | Position.Y = 326.000000000000000000
26 | Size.Width = 113.000000000000000000
27 | Size.Height = 44.000000000000000000
28 | Size.PlatformDefault = False
29 | TabOrder = 1
30 | Text = #1054#1095#1080#1089#1090#1080#1090#1100
31 | OnClick = Button2Click
32 | end
33 | object ToolBar1: TToolBar
34 | Size.Width = 249.000000000000000000
35 | Size.Height = 48.000000000000000000
36 | Size.PlatformDefault = False
37 | TabOrder = 2
38 | object Label1: TLabel
39 | Align = Client
40 | StyledSettings = [Family, Style, FontColor]
41 | Size.Width = 249.000000000000000000
42 | Size.Height = 48.000000000000000000
43 | Size.PlatformDefault = False
44 | TextSettings.Font.Size = 20.000000000000000000
45 | TextSettings.HorzAlign = Center
46 | Text = 'TZMaterialEdit'
47 | end
48 | end
49 | object zmeEmail: TZMaterialEdit
50 | Align = Top
51 | Margins.Left = 8.000000000000000000
52 | Margins.Top = 16.000000000000000000
53 | Margins.Right = 8.000000000000000000
54 | Position.X = 8.000000000000000000
55 | Position.Y = 64.000000000000000000
56 | Size.Width = 233.000000000000000000
57 | Size.Height = 38.000000000000000000
58 | Size.PlatformDefault = False
59 | TabOrder = 3
60 | Prompt = 'Email:'
61 | StyledSettings = [Family, Size, Style]
62 | TextSettingsPrompt.FontColor = claGreen
63 | TextSettingsPrompt.HorzAlign = Center
64 | TextSettingsPrompt.WordWrap = False
65 | StyledSettingsPrompt = [Family, Size, Style]
66 | TextSettingsPromptUp.FontColor = claBlue
67 | TextSettingsPromptUp.WordWrap = False
68 | StyledSettingsPromptUp = [Family]
69 | KeyboardType = EmailAddress
70 | ReturnKeyType = Next
71 | end
72 | object zmePassword: TZMaterialEdit
73 | Align = Top
74 | Margins.Left = 8.000000000000000000
75 | Margins.Top = 16.000000000000000000
76 | Margins.Right = 8.000000000000000000
77 | Position.X = 8.000000000000000000
78 | Position.Y = 172.000000000000000000
79 | Size.Width = 233.000000000000000000
80 | Size.Height = 38.000000000000000000
81 | Size.PlatformDefault = False
82 | TabOrder = 5
83 | Prompt = 'Password:'
84 | StyledSettings = [Family, Size, Style]
85 | TextSettingsPrompt.FontColor = claFirebrick
86 | TextSettingsPrompt.WordWrap = False
87 | StyledSettingsPrompt = [Family, Size, Style]
88 | TextSettingsPromptUp.FontColor = claFirebrick
89 | TextSettingsPromptUp.WordWrap = False
90 | StyledSettingsPromptUp = [Family]
91 | Password = True
92 | end
93 | object zmeLogin: TZMaterialEdit
94 | Align = Top
95 | Margins.Left = 8.000000000000000000
96 | Margins.Top = 16.000000000000000000
97 | Margins.Right = 8.000000000000000000
98 | Position.X = 8.000000000000000000
99 | Position.Y = 118.000000000000000000
100 | Size.Width = 233.000000000000000000
101 | Size.Height = 38.000000000000000000
102 | Size.PlatformDefault = False
103 | TabOrder = 4
104 | Prompt = 'Login:'
105 | TextSettings.HorzAlign = Center
106 | StyledSettings = [Family, Size, Style]
107 | TextSettingsPrompt.WordWrap = False
108 | StyledSettingsPrompt = [Family, Size, Style]
109 | TextSettingsPromptUp.FontColor = claMediumorchid
110 | TextSettingsPromptUp.WordWrap = False
111 | StyledSettingsPromptUp = [Family]
112 | Animation = False
113 | ReturnKeyType = Next
114 | end
115 | end
116 |
--------------------------------------------------------------------------------
/Demo/MaterialActionButton/uMain.fmx:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 0
3 | Top = 0
4 | Caption = 'Form1'
5 | ClientHeight = 406
6 | ClientWidth = 280
7 | Fill.Color = claRoyalblue
8 | Fill.Kind = Solid
9 | FormFactor.Width = 320
10 | FormFactor.Height = 480
11 | FormFactor.Devices = [Desktop]
12 | OnResize = FormResize
13 | DesignerMasterStyle = 0
14 | object ZNativeDrawFigureLine1: TZNativeDrawFigureLine
15 | Align = Top
16 | Margins.Top = 55.000000000000000000
17 | Position.Y = 55.000000000000000000
18 | Size.Width = 280.000000000000000000
19 | Size.Height = 10.000000000000000000
20 | Size.PlatformDefault = False
21 | Stroke.Color = claDeeppink
22 | Stroke.Thickness = 5.000000000000000000
23 | end
24 | object ZNativeDrawFigureRectangle1: TZNativeDrawFigureRectangle
25 | Position.X = 16.000000000000000000
26 | Position.Y = 64.000000000000000000
27 | Size.Width = 97.000000000000000000
28 | Size.Height = 97.000000000000000000
29 | Size.PlatformDefault = False
30 | Fill.Kind = Gradient
31 | Fill.Gradient.Points = <
32 | item
33 | Color = xFFFFB900
34 | Offset = 0.000000000000000000
35 | end
36 | item
37 | Color = xFF07AFFB
38 | Offset = 1.000000000000000000
39 | end>
40 | Fill.Gradient.StartPosition.X = 0.500000000000000000
41 | Fill.Gradient.StartPosition.Y = 1.000000000000000000
42 | Fill.Gradient.StopPosition.X = 0.499999970197677600
43 | Fill.Gradient.StopPosition.Y = 0.000000000000000000
44 | Stroke.Color = claLime
45 | Stroke.Thickness = 3.500000000000000000
46 | end
47 | object ZNativeDrawFigureRoundRect1: TZNativeDrawFigureRoundRect
48 | Position.X = 128.000000000000000000
49 | Position.Y = 120.000000000000000000
50 | Size.Width = 129.000000000000000000
51 | Size.Height = 89.000000000000000000
52 | Size.PlatformDefault = False
53 | Fill.Color = claChartreuse
54 | Stroke.Color = claDarkorange
55 | Stroke.Thickness = 2.000000000000000000
56 | Corners = [TopRight, BottomLeft]
57 | CornerType = InnerRound
58 | end
59 | object ZNativeDrawFigureEllipse1: TZNativeDrawFigureEllipse
60 | Position.X = 42.000000000000000000
61 | Position.Y = 164.000000000000000000
62 | Size.Width = 129.000000000000000000
63 | Size.Height = 89.000000000000000000
64 | Size.PlatformDefault = False
65 | Fill.Color = claKhaki
66 | Stroke.Kind = None
67 | end
68 | object ZNativeDrawFigureCircle1: TZNativeDrawFigureCircle
69 | Position.X = 160.000000000000000000
70 | Position.Y = 256.000000000000000000
71 | Size.Width = 97.000000000000000000
72 | Size.Height = 97.000000000000000000
73 | Size.PlatformDefault = False
74 | Fill.Kind = Gradient
75 | Fill.Gradient.Points = <
76 | item
77 | Color = xFFFF0606
78 | Offset = 0.000000000000000000
79 | end
80 | item
81 | Color = xFFF6FF06
82 | Offset = 0.090062111616134640
83 | end
84 | item
85 | Color = xFF1DFF03
86 | Offset = 0.217391297221183800
87 | end
88 | item
89 | Color = xFF09FFDD
90 | Offset = 0.357142865657806400
91 | end
92 | item
93 | Color = xFF0800E8
94 | Offset = 0.509316742420196500
95 | end
96 | item
97 | Color = xFFFD02EC
98 | Offset = 0.652173936367034900
99 | end
100 | item
101 | Color = xFFF50202
102 | Offset = 0.819875776767730700
103 | end
104 | item
105 | Color = claWhite
106 | Offset = 1.000000000000000000
107 | end>
108 | Fill.Gradient.Style = Radial
109 | Stroke.Color = claDarkslateblue
110 | Stroke.Thickness = 3.000000000000000000
111 | end
112 | object ZNativeDrawFigureArc1: TZNativeDrawFigureArc
113 | Position.X = 80.000000000000000000
114 | Position.Y = 120.000000000000000000
115 | Size.Width = 81.000000000000000000
116 | Size.Height = 81.000000000000000000
117 | Size.PlatformDefault = False
118 | Fill.Kind = None
119 | Stroke.Color = xFFD32F2F
120 | Stroke.Thickness = 12.000000000000000000
121 | EndAngle = 310.000000000000000000
122 | end
123 | object ZMaterialActionButton1: TZMaterialActionButton
124 | Position.X = 200.000000000000000000
125 | Position.Y = 312.000000000000000000
126 | Size.Width = 56.000000000000000000
127 | Size.Height = 56.000000000000000000
128 | Size.PlatformDefault = False
129 | OnClick = ZMaterialActionButton1Click
130 | Color = xFFE91E63
131 | ShadowDistance = 2.000000000000000000
132 | ShadowSoftness = 0.899999976158142100
133 | ShadowOpacity = 0.400000005960464500
134 | object Text1: TText
135 | Align = Client
136 | HitTest = False
137 | Size.Width = 56.000000000000000000
138 | Size.Height = 56.000000000000000000
139 | Size.PlatformDefault = False
140 | Text = '+'
141 | TextSettings.Font.Size = 32.000000000000000000
142 | TextSettings.FontColor = claWhite
143 | end
144 | end
145 | object Timer1: TTimer
146 | Interval = 250
147 | OnTimer = Timer1Timer
148 | Left = 184
149 | Top = 176
150 | end
151 | object Circle1: TCircle
152 | Fill.Kind = Gradient
153 | Fill.Gradient.Points = <
154 | item
155 | Color = xFFFF03FF
156 | Offset = 0.000000000000000000
157 | end
158 | item
159 | Color = xFF13FA02
160 | Offset = 0.239130437374115000
161 | end
162 | item
163 | Color = xFFFFDD06
164 | Offset = 0.459627330303192100
165 | end
166 | item
167 | Color = xFFFC0303
168 | Offset = 0.708074510097503700
169 | end
170 | item
171 | Color = claWhite
172 | Offset = 1.000000000000000000
173 | end>
174 | Fill.Gradient.Style = Radial
175 | Position.X = 24.000000000000000000
176 | Position.Y = 320.000000000000000000
177 | Size.Width = 105.000000000000000000
178 | Size.Height = 106.000000000000000000
179 | Size.PlatformDefault = False
180 | object Text2: TText
181 | Align = Client
182 | HitTest = False
183 | Size.Width = 105.000000000000000000
184 | Size.Height = 106.000000000000000000
185 | Size.PlatformDefault = False
186 | Text = 'TCircle FMX'
187 | TextSettings.Font.Size = 22.000000000000000000
188 | TextSettings.FontColor = claWhite
189 | end
190 | end
191 | end
192 |
--------------------------------------------------------------------------------
/Library/FMX.ZMaterialBackButton.pas:
--------------------------------------------------------------------------------
1 | unit FMX.ZMaterialBackButton;
2 |
3 | {
4 | author: Ravil (ZuBy) Zaripov
5 | email: rzaripov1990@gmail.com
6 | http://github.com/rzaripov1990
7 |
8 |
9 | animation by sinuke
10 | https://github.com/sinuke
11 | 2017
12 | }
13 |
14 | interface
15 |
16 | {$SCOPEDENUMS ON}
17 |
18 | uses
19 | System.SysUtils, System.Classes, System.UITypes,
20 | FMX.Types, FMX.Controls, FMX.Layouts, FMX.Objects,
21 | FMX.ZMaterialTypes;
22 |
23 | type
24 | TZMaterialBackButtonKind = (Menu, Back, Close);
25 | TZMaterialBackButtonAnimationType = (None, MenuToBack, BackToMenu, MenuToClose, CloseToMenu);
26 |
27 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
28 | TZMaterialBackButton = class(TLayout)
29 | private
30 | FLayout: TLayout;
31 | FTopLine: TRectangle;
32 | FMiddleLine: TRectangle;
33 | FBottomLine: TRectangle;
34 |
35 | FKind: TZMaterialBackButtonKind;
36 | FAnimationType: TZMaterialBackButtonAnimationType;
37 | FColor: TAlphaColor;
38 | FTopLinePosY: Single;
39 | FMiddleLinePosY: Single;
40 | FBottomLinePosY: Single;
41 |
42 | { Private declarations }
43 | procedure RestoreToMenuKind;
44 | procedure StopAllAnimations;
45 | procedure SetKind(const Value: TZMaterialBackButtonKind);
46 |
47 | procedure DoAnimateMenuToBack;
48 | procedure DoAnimateBackToMenu;
49 | procedure DoAnimateMenuToClose;
50 | procedure DoAnimateCloseToMenu;
51 | procedure SetColor(const Value: TAlphaColor);
52 | protected
53 | { Protected declarations }
54 | public
55 | constructor Create(AOwner: TComponent); override;
56 | destructor Destroy; override;
57 | { Public declarations }
58 |
59 | procedure Animate(const aAnimationType: TZMaterialBackButtonAnimationType);
60 | published
61 | { Published declarations }
62 | property Visible;
63 | property Kind: TZMaterialBackButtonKind read FKind write SetKind default TZMaterialBackButtonKind.Menu;
64 | property Color: TAlphaColor read FColor write SetColor;
65 | end;
66 |
67 | procedure Register;
68 |
69 | implementation
70 |
71 | uses
72 | FMX.Graphics, System.Types, FMX.Ani;
73 |
74 | procedure Register;
75 | begin
76 | RegisterComponents('ZMaterial', [TZMaterialBackButton]);
77 | end;
78 |
79 | { TZMaterialBackButton }
80 |
81 | constructor TZMaterialBackButton.Create(AOwner: TComponent);
82 | begin
83 | inherited Create(AOwner);
84 |
85 | HitTest := true;
86 |
87 | FAnimationType := TZMaterialBackButtonAnimationType.None;
88 | FKind := TZMaterialBackButtonKind.Menu;
89 | FColor := TAlphaColorRec.White;
90 |
91 | FLayout := TLayout.Create(Self);
92 | FLayout.Parent := Self;
93 | FLayout.Stored := false;
94 |
95 | FTopLine := TRectangle.Create(FLayout);
96 | FTopLine.Parent := FLayout;
97 | FTopLine.Stored := false;
98 |
99 | FMiddleLine := TRectangle.Create(FLayout);
100 | FMiddleLine.Parent := FLayout;
101 | FMiddleLine.Stored := false;
102 |
103 | FBottomLine := TRectangle.Create(FLayout);
104 | FBottomLine.Parent := FLayout;
105 | FBottomLine.Stored := false;
106 |
107 | RestoreToMenuKind;
108 | end;
109 |
110 | destructor TZMaterialBackButton.Destroy;
111 | begin
112 | {$IFDEF AUTOREFCOUNT}
113 | FBottomLine.DisposeOf;
114 | FBottomLine := nil;
115 | FMiddleLine.DisposeOf;
116 | FMiddleLine := nil;
117 | FTopLine.DisposeOf;
118 | FTopLine := nil;
119 | FLayout.DisposeOf;
120 | FLayout := nil;
121 | {$ELSE}
122 | FreeAndNil(FBottomLine);
123 | FreeAndNil(FMiddleLine);
124 | FreeAndNil(FTopLine);
125 | FreeAndNil(FLayout);
126 | {$ENDIF}
127 | inherited Destroy;
128 | end;
129 |
130 | procedure TZMaterialBackButton.DoAnimateMenuToBack;
131 | begin
132 | FLayout.RotationAngle := 0;
133 | TAnimator.AnimateFloat(FLayout, 'RotationAngle', 180, 0.25);
134 | TAnimator.AnimateFloat(FTopLine, 'RotationAngle', 45, 0.25);
135 | TAnimator.AnimateFloat(FBottomLine, 'RotationAngle', -45, 0.25);
136 | TAnimator.AnimateFloat(FTopLine, 'Width', 12, 0.25);
137 | TAnimator.AnimateFloat(FBottomLine, 'Width', 12, 0.25);
138 | TAnimator.AnimateFloat(FMiddleLine, 'Width', 16 - FMiddleLine.Height / 4, 0.25);
139 | TAnimator.AnimateFloat(FMiddleLine, 'Position.X', 2, 0.25);
140 | TAnimator.AnimateFloat(FTopLine, 'Position.Y', FMiddleLine.Position.Y + FMiddleLine.Height / 4 - 12 * 0.5 *
141 | cos((45 * pi) / 180), 0.25);
142 | TAnimator.AnimateFloat(FBottomLine, 'Position.Y', FMiddleLine.Position.Y - FMiddleLine.Height / 4 + 12 * 0.5 *
143 | cos((45 * pi) / 180), 0.25);
144 | TAnimator.AnimateFloat(FTopLine, 'Position.X', 9, 0.25);
145 | TAnimator.AnimateFloatWait(FBottomLine, 'Position.X', 9, 0.25);
146 | end;
147 |
148 | procedure TZMaterialBackButton.DoAnimateBackToMenu;
149 | begin
150 | TAnimator.AnimateFloatDelay(FLayout, 'RotationAngle', 360, 0.25);
151 | TAnimator.AnimateFloat(FTopLine, 'RotationAngle', 0, 0.25);
152 | TAnimator.AnimateFloat(FBottomLine, 'RotationAngle', 0, 0.25);
153 | TAnimator.AnimateFloat(FTopLine, 'Width', 18, 0.25);
154 | TAnimator.AnimateFloat(FBottomLine, 'Width', 18, 0.25);
155 | TAnimator.AnimateFloat(FMiddleLine, 'Width', 18, 0.25);
156 | TAnimator.AnimateFloat(FMiddleLine, 'Position.X', 0, 0.25);
157 | TAnimator.AnimateFloat(FTopLine, 'Position.Y', 0, 0.25);
158 | TAnimator.AnimateFloat(FBottomLine, 'Position.Y', 12, 0.25);
159 | TAnimator.AnimateFloat(FTopLine, 'Position.X', 0, 0.25);
160 | TAnimator.AnimateFloatWait(FBottomLine, 'Position.X', 0, 0.25);
161 | end;
162 |
163 | procedure TZMaterialBackButton.DoAnimateMenuToClose;
164 | begin
165 | FLayout.RotationAngle := 0;
166 | TAnimator.AnimateFloat(FLayout, 'RotationAngle', 90, 0.125);
167 | TAnimator.AnimateFloat(FTopLine, 'Position.Y', FMiddleLinePosY, 0.125);
168 | TAnimator.AnimateFloatWait(FBottomLine, 'Position.Y', FMiddleLinePosY, 0.125);
169 | TAnimator.AnimateFloat(FLayout, 'RotationAngle', 180, 0.125);
170 | FMiddleLine.Visible := false;
171 | TAnimator.AnimateFloat(FTopLine, 'RotationAngle', -45, 0.125);
172 | TAnimator.AnimateFloatWait(FBottomLine, 'RotationAngle', 45, 0.125);
173 | end;
174 |
175 | procedure TZMaterialBackButton.DoAnimateCloseToMenu;
176 | begin
177 | TAnimator.AnimateFloat(FLayout, 'RotationAngle', 270, 0.125);
178 | TAnimator.AnimateFloat(FTopLine, 'RotationAngle', 0, 0.125);
179 | TAnimator.AnimateFloatWait(FBottomLine, 'RotationAngle', 0, 0.125);
180 | FMiddleLine.RotationAngle := 0;
181 | FMiddleLine.SetBounds(0, 6, FLayout.Width, 2);
182 | FMiddleLine.Visible := true;
183 | TAnimator.AnimateFloat(FLayout, 'RotationAngle', 360, 0.125);
184 | TAnimator.AnimateFloat(FTopLine, 'Position.Y', FTopLinePosY, 0.125);
185 | TAnimator.AnimateFloatWait(FBottomLine, 'Position.Y', FBottomLinePosY, 0.125);
186 | end;
187 |
188 | procedure TZMaterialBackButton.Animate(const aAnimationType: TZMaterialBackButtonAnimationType);
189 | begin
190 | if (aAnimationType = TZMaterialBackButtonAnimationType.None) or (FAnimationType = aAnimationType) then
191 | exit;
192 |
193 | FAnimationType := aAnimationType;
194 | case FAnimationType of
195 | TZMaterialBackButtonAnimationType.MenuToBack:
196 | DoAnimateMenuToBack;
197 | TZMaterialBackButtonAnimationType.BackToMenu:
198 | DoAnimateBackToMenu;
199 | TZMaterialBackButtonAnimationType.MenuToClose:
200 | DoAnimateMenuToClose;
201 | TZMaterialBackButtonAnimationType.CloseToMenu:
202 | DoAnimateCloseToMenu;
203 | end;
204 | end;
205 |
206 | procedure TZMaterialBackButton.RestoreToMenuKind;
207 | const
208 | DefaultBounds: TRectF = (Left: 19; Top: 21; Right: 18; Bottom: 13);
209 | begin
210 | StopAllAnimations;
211 |
212 | FLayout.RotationAngle := 0;
213 | FLayout.Align := TAlignLayout.Center;
214 | FLayout.HitTest := false;
215 | FLayout.SetBounds(0, 0, DefaultBounds.Right, DefaultBounds.Bottom);
216 |
217 | FTopLine.Align := TAlignLayout.None;
218 | FTopLine.Stroke.Kind := TBrushKind.None;
219 | FTopLine.HitTest := false;
220 | FTopLine.RotationAngle := 0;
221 | FTopLine.SetBounds(0, 0, FLayout.Width, 2);
222 | FTopLine.Fill.Color := FColor;
223 |
224 | FMiddleLine.Align := TAlignLayout.None;
225 | FMiddleLine.Stroke.Kind := TBrushKind.None;
226 | FMiddleLine.HitTest := false;
227 | FMiddleLine.RotationAngle := 0;
228 | FMiddleLine.SetBounds(0, 6, FLayout.Width, 2);
229 | FMiddleLine.Fill.Color := FColor;
230 | FMiddleLine.Visible := true;
231 |
232 | FBottomLine.Align := TAlignLayout.None;
233 | FBottomLine.Stroke.Kind := TBrushKind.None;
234 | FBottomLine.HitTest := false;
235 | FBottomLine.RotationAngle := 0;
236 | FBottomLine.SetBounds(0, 12, FLayout.Width, 2);
237 | FBottomLine.Fill.Color := FColor;
238 |
239 | FTopLinePosY := FTopLine.Position.Y;
240 | FMiddleLinePosY := FMiddleLine.Position.Y;
241 | FBottomLinePosY := FBottomLine.Position.Y;
242 | end;
243 |
244 | procedure TZMaterialBackButton.SetColor(const Value: TAlphaColor);
245 | begin
246 | FColor := Value;
247 | FTopLine.Fill.Color := FColor;
248 | FMiddleLine.Fill.Color := FColor;
249 | FBottomLine.Fill.Color := FColor;
250 | end;
251 |
252 | procedure TZMaterialBackButton.SetKind(const Value: TZMaterialBackButtonKind);
253 | begin
254 | if FKind = Value then
255 | exit;
256 |
257 | RestoreToMenuKind;
258 | FKind := Value;
259 |
260 | case FKind of
261 | TZMaterialBackButtonKind.Menu:
262 | { RestoreToMenuKind };
263 | TZMaterialBackButtonKind.Back:
264 | begin
265 | FLayout.RotationAngle := 180;
266 |
267 | FTopLine.RotationAngle := 45;
268 | FTopLine.Width := 12;
269 | FTopLine.Position.X := 9;
270 | FTopLine.Position.Y := FMiddleLine.Position.Y + FMiddleLine.Height / 4 - 12 * 0.5 * cos((45 * pi) / 180);
271 |
272 | FMiddleLine.Width := 16 - FMiddleLine.Height / 4;
273 | FMiddleLine.Position.X := 2;
274 |
275 | FBottomLine.RotationAngle := -45;
276 | FBottomLine.Width := 12;
277 | FBottomLine.Position.X := 9;
278 | FBottomLine.Position.Y := FMiddleLine.Position.Y - FMiddleLine.Height / 4 + 12 * 0.5 * cos((45 * pi) / 180);
279 | end;
280 | TZMaterialBackButtonKind.Close:
281 | begin
282 | FLayout.RotationAngle := 180;
283 |
284 | FTopLine.RotationAngle := -45;
285 | FTopLine.Position.Y := FMiddleLinePosY;
286 |
287 | FMiddleLine.Visible := false;
288 |
289 | FBottomLine.RotationAngle := 45;
290 | FBottomLine.Position.Y := FMiddleLinePosY;
291 | end;
292 | end;
293 | end;
294 |
295 | procedure TZMaterialBackButton.StopAllAnimations;
296 | begin
297 | FLayout.StopPropertyAnimation('RotationAngle');
298 |
299 | FTopLine.StopPropertyAnimation('RotationAngle');
300 | FTopLine.StopPropertyAnimation('Width');
301 | FTopLine.StopPropertyAnimation('Position.Y');
302 | FTopLine.StopPropertyAnimation('Position.X');
303 |
304 | FMiddleLine.StopPropertyAnimation('RotationAngle');
305 | FMiddleLine.StopPropertyAnimation('Width');
306 | FMiddleLine.StopPropertyAnimation('Position.Y');
307 | FMiddleLine.StopPropertyAnimation('Position.X');
308 |
309 | FBottomLine.StopPropertyAnimation('RotationAngle');
310 | FBottomLine.StopPropertyAnimation('Width');
311 | FBottomLine.StopPropertyAnimation('Position.Y');
312 | FBottomLine.StopPropertyAnimation('Position.X');
313 | end;
314 |
315 | end.
316 |
--------------------------------------------------------------------------------
/Library/FMX.ZNativeDrawFigure.pas:
--------------------------------------------------------------------------------
1 | unit FMX.ZNativeDrawFigure;
2 |
3 | {
4 | author: Ravil (ZuBy) Zaripov
5 | email: rzaripov1990@gmail.com
6 | http://github.com/rzaripov1990
7 |
8 | 2017
9 | }
10 |
11 | {$I NativeDraw.inc}
12 |
13 | interface
14 |
15 | {$SCOPEDENUMS ON}
16 |
17 | uses
18 | System.SysUtils, System.Classes, System.UITypes, System.Types, System.Math.Vectors,
19 | FMX.Types, FMX.Controls, FMX.Layouts, FMX.Objects, FMX.Graphics,
20 | FMX.Graphics.Native,
21 | FMX.ZMaterialTypes;
22 |
23 | type
24 |
25 | TZCustomNativeDrawFigure = class(TControl)
26 | public type
27 | TZNativeDrawFigureKind = (Line, DiagonalLine1, DiagonalLine2, Rectangle, RoundRect, Circle, Ellipse, Arc);
28 | private
29 | { Private declarations }
30 | FFill: TBrush;
31 | FStroke: TStrokeBrush;
32 | FKind: TZNativeDrawFigureKind;
33 | FXRadius: Single;
34 | FYRadius: Single;
35 | FSides: TSides;
36 | FCorners: TCorners;
37 | FCornerType: TCornerType;
38 | FEndAngle: Single;
39 | FStartAngle: Single;
40 | procedure SetFill(const Value: TBrush);
41 | procedure SetStroke(const Value: TStrokeBrush);
42 | procedure FillStrokeChanged(Sender: TObject);
43 | procedure SetKind(const Value: TZNativeDrawFigureKind);
44 | procedure SetXRadius(const Value: Single);
45 | procedure SetYRadius(const Value: Single);
46 | function IsSidesStored: Boolean;
47 | procedure SetSides(const Value: TSides);
48 | function IsCornersStored: Boolean;
49 | procedure SetCorners(const Value: TCorners);
50 | procedure SetCornerType(const Value: TCornerType);
51 | function GetShapeRect: TRectF;
52 | procedure SetEndAngle(const Value: Single);
53 | procedure SetStartAngle(const Value: Single);
54 | protected
55 | { Protected declarations }
56 | procedure Paint; override;
57 | public
58 | { Public declarations }
59 | constructor Create(AOwner: TComponent); override;
60 | destructor Destroy; override;
61 |
62 | property Kind: TZNativeDrawFigureKind read FKind write SetKind default TZNativeDrawFigureKind.Line;
63 | property Fill: TBrush read FFill write SetFill;
64 | property Stroke: TStrokeBrush read FStroke write SetStroke;
65 | { Round Rect }
66 | property XRadius: Single read FXRadius write SetXRadius;
67 | property YRadius: Single read FYRadius write SetYRadius;
68 | { Rectangle }
69 | property Sides: TSides read FSides write SetSides stored IsSidesStored;
70 | property Corners: TCorners read FCorners write SetCorners stored IsCornersStored;
71 | property CornerType: TCornerType read FCornerType write SetCornerType default TCornerType.Round;
72 | { Arc }
73 | property StartAngle: Single read FStartAngle write SetStartAngle;
74 | property EndAngle: Single read FEndAngle write SetEndAngle;
75 | published
76 | { Published declarations }
77 | end;
78 |
79 | TZNativeDrawFigureTemplateWithEvents = class(TZCustomNativeDrawFigure)
80 | published
81 | property Align;
82 | property Anchors;
83 | property ClipChildren default False;
84 | property ClipParent default False;
85 | property Cursor default crDefault;
86 | property DragMode default TDragMode.dmManual;
87 | property EnableDragHighlight default True;
88 | property Enabled default True;
89 | property Locked default False;
90 | property Height;
91 | property HitTest default True;
92 | property Padding;
93 | property Margins;
94 | property Opacity;
95 | property PopupMenu;
96 | property Position;
97 | property RotationAngle;
98 | property RotationCenter;
99 | property Scale;
100 | property Size;
101 | property Visible default True;
102 | property Width;
103 | { Drag and Drop events }
104 | property OnDragEnter;
105 | property OnDragLeave;
106 | property OnDragOver;
107 | property OnDragDrop;
108 | property OnDragEnd;
109 | { Mouse events }
110 | property OnClick;
111 | property OnDblClick;
112 |
113 | property OnMouseDown;
114 | property OnMouseMove;
115 | property OnMouseUp;
116 | property OnMouseWheel;
117 | property OnMouseEnter;
118 | property OnMouseLeave;
119 |
120 | property OnPainting;
121 | property OnPaint;
122 | property OnResize;
123 | end;
124 |
125 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
126 | TZNativeDrawFigureLine = class(TZNativeDrawFigureTemplateWithEvents)
127 | public
128 | constructor Create(AOwner: TComponent); override;
129 | published
130 | property Stroke;
131 | end;
132 |
133 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
134 | TZNativeDrawFigureRectangle = class(TZNativeDrawFigureTemplateWithEvents)
135 | public
136 | constructor Create(AOwner: TComponent); override;
137 | published
138 | property Fill;
139 | property Stroke;
140 | property XRadius;
141 | property YRadius;
142 | property Sides;
143 | end;
144 |
145 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
146 | TZNativeDrawFigureRoundRect = class(TZNativeDrawFigureTemplateWithEvents)
147 | public
148 | constructor Create(AOwner: TComponent); override;
149 | published
150 | property Fill;
151 | property Stroke;
152 | property Corners;
153 | property CornerType;
154 | end;
155 |
156 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
157 | TZNativeDrawFigureEllipse = class(TZNativeDrawFigureTemplateWithEvents)
158 | public
159 | constructor Create(AOwner: TComponent); override;
160 | published
161 | property Fill;
162 | property Stroke;
163 | end;
164 |
165 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
166 | TZNativeDrawFigureCircle = class(TZNativeDrawFigureTemplateWithEvents)
167 | public
168 | constructor Create(AOwner: TComponent); override;
169 | published
170 | property Fill;
171 | property Stroke;
172 | end;
173 |
174 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
175 | TZNativeDrawFigureArc = class(TZNativeDrawFigureTemplateWithEvents)
176 | public
177 | constructor Create(AOwner: TComponent); override;
178 | published
179 | property Fill;
180 | property Stroke;
181 | property StartAngle;
182 | property EndAngle;
183 | end;
184 |
185 | procedure Register;
186 |
187 | implementation
188 |
189 | uses
190 | System.Math;
191 |
192 | procedure Register;
193 | begin
194 | RegisterComponents('ZMaterial', [TZNativeDrawFigureLine, TZNativeDrawFigureRectangle, TZNativeDrawFigureRoundRect,
195 | TZNativeDrawFigureEllipse, TZNativeDrawFigureCircle, TZNativeDrawFigureArc]);
196 | end;
197 |
198 | // copied from FMX.Objects \\
199 | function GetDrawingShapeRectAndSetThickness(const AFill: TBrush; const AStroke: TStrokeBrush; ALocalRect: TRectF;
200 | const Fit: Boolean; var FillShape, DrawShape: Boolean; var StrokeThicknessRestoreValue: Single): TRectF;
201 | const
202 | MinRectAreaSize = 0.01;
203 | begin
204 | FillShape := (AFill <> nil) and (AFill.Kind <> TBrushKind.None);
205 | DrawShape := (AStroke <> nil) and (AStroke.Kind <> TBrushKind.None);
206 |
207 | if Fit then
208 | Result := TRectF.Create(0, 0, 1, 1).FitInto(ALocalRect)
209 | else
210 | Result := ALocalRect;
211 |
212 | if DrawShape then
213 | begin
214 | if Result.Width < AStroke.Thickness then
215 | begin
216 | StrokeThicknessRestoreValue := AStroke.Thickness;
217 | FillShape := False;
218 | AStroke.Thickness := Min(Result.Width, Result.Height);
219 | Result.Left := (Result.Right + Result.Left) * 0.5;
220 | Result.Right := Result.Left + MinRectAreaSize;
221 | end
222 | else
223 | Result.Inflate(-AStroke.Thickness * 0.5, 0);
224 |
225 | if Result.Height < AStroke.Thickness then
226 | begin
227 | if StrokeThicknessRestoreValue < 0.0 then
228 | StrokeThicknessRestoreValue := AStroke.Thickness;
229 | FillShape := False;
230 | AStroke.Thickness := Min(Result.Width, Result.Height);
231 | Result.Top := (Result.Bottom + Result.Top) * 0.5;
232 | Result.Bottom := Result.Top + MinRectAreaSize;
233 | end
234 | else
235 | Result.Inflate(0, -AStroke.Thickness * 0.5);
236 | end;
237 | end;
238 |
239 | { TZNativeDrawFigure }
240 |
241 | constructor TZCustomNativeDrawFigure.Create(AOwner: TComponent);
242 | begin
243 | inherited Create(AOwner);
244 |
245 | FCorners := AllCorners;
246 | FXRadius := 0;
247 | FYRadius := 0;
248 | FSides := AllSides;
249 |
250 | FCornerType := TCornerType.Round;
251 |
252 | FStartAngle := 0;
253 | FEndAngle := -90;
254 |
255 | FFill := TBrush.Create(TBrushKind.Solid, $FFE0E0E0);
256 | FFill.OnChanged := FillStrokeChanged;
257 | FStroke := TStrokeBrush.Create(TBrushKind.Solid, $FF000000);
258 | FStroke.OnChanged := FillStrokeChanged;
259 |
260 | Repaint;
261 | end;
262 |
263 | destructor TZCustomNativeDrawFigure.Destroy;
264 | begin
265 | FStroke.Free;
266 | FFill.Free;
267 | inherited Destroy;
268 | end;
269 |
270 | procedure TZCustomNativeDrawFigure.FillStrokeChanged(Sender: TObject);
271 | begin
272 | if FUpdating = 0 then
273 | Repaint;
274 | end;
275 |
276 | function TZCustomNativeDrawFigure.GetShapeRect: TRectF;
277 | begin
278 | Result := Self.LocalRect;
279 | if FStroke.Kind <> TBrushKind.None then
280 | InflateRect(Result, -(FStroke.Thickness / 2), -(FStroke.Thickness / 2));
281 | end;
282 |
283 | function TZCustomNativeDrawFigure.IsCornersStored: Boolean;
284 | begin
285 | Result := FCorners <> AllCorners;
286 | end;
287 |
288 | function TZCustomNativeDrawFigure.IsSidesStored: Boolean;
289 | begin
290 | Result := FSides * AllSides <> AllSides
291 | end;
292 |
293 | procedure TZCustomNativeDrawFigure.Paint;
294 | var
295 | Off, Radius: Single;
296 | StrokeThicknessRestoreValue: Single;
297 | FillShape, DrawShape: Boolean;
298 | LShapeRect: TRectF;
299 | MidPoint: TPointF;
300 | begin
301 | StrokeThicknessRestoreValue := FStroke.Thickness;
302 |
303 | Canvas.Fill.Assign(FFill);
304 | Canvas.Stroke.Assign(FStroke);
305 |
306 | try
307 | LShapeRect := GetDrawingShapeRectAndSetThickness(FFill, FStroke, Self.LocalRect,
308 | FKind = TZNativeDrawFigureKind.Circle, FillShape, DrawShape, StrokeThicknessRestoreValue);
309 |
310 | {$IFDEF UseNativeDraw}
311 | Canvas.NativeDraw(LocalRect,
312 | procedure
313 | begin
314 | {$ENDIF}
315 | Canvas.BeginScene;
316 | try
317 | case FKind of
318 | TZNativeDrawFigureKind.Line:
319 | begin
320 | Canvas.DrawLine(PointF(0, 0), PointF(LocalRect.Width, 0), AbsoluteOpacity);
321 | end;
322 | TZNativeDrawFigureKind.DiagonalLine1:
323 | begin
324 | Canvas.DrawLine(PointF(0, LocalRect.Height), PointF(LocalRect.Width, 0), AbsoluteOpacity);
325 | end;
326 | TZNativeDrawFigureKind.DiagonalLine2:
327 | begin
328 | Canvas.DrawLine(PointF(0, 0), PointF(LocalRect.Width, LocalRect.Height), AbsoluteOpacity);
329 | end;
330 | TZNativeDrawFigureKind.Rectangle:
331 | begin
332 | if FSides <> AllSides then
333 | begin
334 | Off := LShapeRect.Left;
335 | if not(TSide.Top in FSides) then
336 | LShapeRect.Top := LShapeRect.Top - Off;
337 | if not(TSide.Left in FSides) then
338 | LShapeRect.Left := LShapeRect.Left - Off;
339 | if not(TSide.Bottom in FSides) then
340 | LShapeRect.Bottom := LShapeRect.Bottom + Off;
341 | if not(TSide.Right in FSides) then
342 | LShapeRect.Right := LShapeRect.Right + Off;
343 |
344 | if FillShape then
345 | Canvas.FillRect(LShapeRect, FXRadius, FYRadius, FCorners, AbsoluteOpacity, FFill, FCornerType);
346 | if DrawShape then
347 | Canvas.DrawRectSides(GetShapeRect, FXRadius, FYRadius, FCorners, AbsoluteOpacity, FSides, FStroke,
348 | FCornerType);
349 | end
350 | else
351 | begin
352 | if FillShape then
353 | Canvas.FillRect(LShapeRect, FXRadius, FYRadius, FCorners, AbsoluteOpacity, FFill, FCornerType);
354 | if DrawShape then
355 | Canvas.DrawRect(LShapeRect, FXRadius, FYRadius, FCorners, AbsoluteOpacity, FStroke, FCornerType);
356 | end;
357 | end;
358 | TZNativeDrawFigureKind.RoundRect:
359 | begin
360 | if Height < Width then
361 | Radius := Self.LocalRect.Height / 2
362 | else
363 | Radius := Self.LocalRect.Width / 2;
364 |
365 | if FillShape then
366 | Canvas.FillRect(LShapeRect, Radius, Radius, FCorners, AbsoluteOpacity, FFill, FCornerType);
367 | if DrawShape then
368 | Canvas.DrawRect(LShapeRect, Radius, Radius, FCorners, AbsoluteOpacity, FStroke, FCornerType);
369 | end;
370 | TZNativeDrawFigureKind.Circle:
371 | begin
372 | if FillShape then
373 | Canvas.FillEllipse(LShapeRect, AbsoluteOpacity, FFill);
374 | if DrawShape then
375 | Canvas.DrawEllipse(LShapeRect, AbsoluteOpacity, FStroke);
376 | end;
377 | TZNativeDrawFigureKind.Ellipse:
378 | begin
379 | if FillShape then
380 | Canvas.FillEllipse(LShapeRect, AbsoluteOpacity, FFill);
381 | if DrawShape then
382 | Canvas.DrawEllipse(LShapeRect, AbsoluteOpacity, FStroke);
383 | end;
384 | TZNativeDrawFigureKind.Arc:
385 | begin
386 | MidPoint := LShapeRect.CenterPoint;
387 | if FillShape then
388 | Canvas.FillArc(MidPoint, TPointF.Create(LShapeRect.Width * 0.5, LShapeRect.Height * 0.5), FStartAngle,
389 | FEndAngle, AbsoluteOpacity, FFill);
390 | if DrawShape then
391 | Canvas.DrawArc(MidPoint, TPointF.Create(LShapeRect.Width * 0.5, LShapeRect.Height * 0.5), FStartAngle,
392 | FEndAngle, AbsoluteOpacity, FStroke);
393 | end;
394 | end;
395 | finally
396 | Canvas.EndScene;
397 | end;
398 | {$IFDEF UseNativeDraw}
399 | end);
400 | {$ENDIF}
401 | finally
402 | if StrokeThicknessRestoreValue <> FStroke.Thickness then
403 | FStroke.Thickness := StrokeThicknessRestoreValue;
404 | end;
405 | end;
406 |
407 | procedure TZCustomNativeDrawFigure.SetCorners(const Value: TCorners);
408 | begin
409 | if FCorners = Value then
410 | exit;
411 |
412 | FCorners := Value;
413 | Repaint;
414 | end;
415 |
416 | procedure TZCustomNativeDrawFigure.SetCornerType(const Value: TCornerType);
417 | begin
418 | if FCornerType = Value then
419 | exit;
420 |
421 | FCornerType := Value;
422 | Repaint;
423 | end;
424 |
425 | procedure TZCustomNativeDrawFigure.SetEndAngle(const Value: Single);
426 | begin
427 | if SameValue(FEndAngle, Value, TEpsilon.Vector) then
428 | exit;
429 |
430 | FEndAngle := Value;
431 | Repaint;
432 | end;
433 |
434 | procedure TZCustomNativeDrawFigure.SetFill(const Value: TBrush);
435 | begin
436 | FFill.Assign(Value);
437 | end;
438 |
439 | procedure TZCustomNativeDrawFigure.SetKind(const Value: TZNativeDrawFigureKind);
440 | begin
441 | if FKind = Value then
442 | exit;
443 |
444 | FKind := Value;
445 | Repaint;
446 | end;
447 |
448 | procedure TZCustomNativeDrawFigure.SetSides(const Value: TSides);
449 | begin
450 | if FSides = Value then
451 | exit;
452 |
453 | FSides := Value;
454 | Repaint;
455 | end;
456 |
457 | procedure TZCustomNativeDrawFigure.SetStartAngle(const Value: Single);
458 | begin
459 | if SameValue(FStartAngle, Value, TEpsilon.Vector) then
460 | exit;
461 |
462 | FStartAngle := Value;
463 | Repaint;
464 | end;
465 |
466 | procedure TZCustomNativeDrawFigure.SetStroke(const Value: TStrokeBrush);
467 | begin
468 | FStroke.Assign(Value);
469 | end;
470 |
471 | procedure TZCustomNativeDrawFigure.SetXRadius(const Value: Single);
472 | var
473 | NewValue: Single;
474 | begin
475 | if csDesigning in ComponentState then
476 | NewValue := Min(Value, Min(Width / 2, Height / 2))
477 | else
478 | NewValue := Value;
479 |
480 | if SameValue(FXRadius, NewValue, TEpsilon.Vector) then
481 | exit;
482 |
483 | FXRadius := Value;
484 | Repaint;
485 | end;
486 |
487 | procedure TZCustomNativeDrawFigure.SetYRadius(const Value: Single);
488 | var
489 | NewValue: Single;
490 | begin
491 | if csDesigning in ComponentState then
492 | NewValue := Min(Value, Min(Width / 2, Height / 2))
493 | else
494 | NewValue := Value;
495 |
496 | if SameValue(FYRadius, NewValue, TEpsilon.Vector) then
497 | exit;
498 |
499 | FYRadius := Value;
500 | Repaint;
501 | end;
502 |
503 | { TZNativeDrawFigureLine }
504 |
505 | constructor TZNativeDrawFigureLine.Create(AOwner: TComponent);
506 | begin
507 | inherited Create(AOwner);
508 | Kind := TZNativeDrawFigureKind.Line;
509 | end;
510 |
511 | { TZNativeDrawFigureRectangle }
512 |
513 | constructor TZNativeDrawFigureRectangle.Create(AOwner: TComponent);
514 | begin
515 | inherited Create(AOwner);
516 | Kind := TZNativeDrawFigureKind.Rectangle;
517 | end;
518 |
519 | { TZNativeDrawFigureRoundRect }
520 |
521 | constructor TZNativeDrawFigureRoundRect.Create(AOwner: TComponent);
522 | begin
523 | inherited Create(AOwner);
524 | Kind := TZNativeDrawFigureKind.RoundRect;
525 | end;
526 |
527 | { TZNativeDrawFigureEllipse }
528 |
529 | constructor TZNativeDrawFigureEllipse.Create(AOwner: TComponent);
530 | begin
531 | inherited Create(AOwner);
532 | Kind := TZNativeDrawFigureKind.Ellipse;
533 | end;
534 |
535 | { TZNativeDrawFigureCircle }
536 |
537 | constructor TZNativeDrawFigureCircle.Create(AOwner: TComponent);
538 | begin
539 | inherited Create(AOwner);
540 | Kind := TZNativeDrawFigureKind.Circle;
541 | end;
542 |
543 | { TZNativeDrawFigureArc }
544 |
545 | constructor TZNativeDrawFigureArc.Create(AOwner: TComponent);
546 | begin
547 | inherited Create(AOwner);
548 | Kind := TZNativeDrawFigureKind.Arc;
549 | Fill.Kind := TBrushKind.None;
550 | end;
551 |
552 | end.
553 |
--------------------------------------------------------------------------------
/Demo/MaterialEdit/prjMaterialEdit.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 | 066ab2310ac64b09
8 |
9 |
10 | iPhone5
11 |
12 |
13 |
14 |
15 |
16 |
17 | prjMaterialEdit\
18 | prjMaterialEdit.exe
19 | ProjectOutput
20 | 0
21 |
22 |
23 | True
24 | True
25 |
26 |
27 |
28 |
29 | prjMaterialEdit.app\Contents\MacOS\
30 | libcgsqlite3.dylib
31 | DependencyModule
32 | 1
33 |
34 |
35 | True
36 |
37 |
38 | prjMaterialEdit.app\Contents\MacOS\
39 | libcgunwind.1.0.dylib
40 | DependencyModule
41 | 1
42 |
43 |
44 | True
45 |
46 |
47 |
48 |
49 | prjMaterialEdit\res\drawable-ldpi\
50 | ic_launcher.png
51 | Android_LauncherIcon36
52 | 1
53 |
54 |
55 | True
56 |
57 |
58 | prjMaterialEdit\res\drawable-ldpi\
59 | ic_launcher.png
60 | Android_LauncherIcon36
61 | 1
62 |
63 |
64 | True
65 |
66 |
67 | prjMaterialEdit\res\values\
68 | styles.xml
69 | AndroidSplashStyles
70 | 1
71 |
72 |
73 | True
74 |
75 |
76 | prjMaterialEdit\res\drawable\
77 | splash_image_def.xml
78 | AndroidSplashImageDef
79 | 1
80 |
81 |
82 | True
83 |
84 |
85 | prjMaterialEdit\res\drawable-small\
86 | splash_image.png
87 | Android_SplashImage426
88 | 1
89 |
90 |
91 | True
92 |
93 |
94 | prjMaterialEdit\res\drawable-xlarge\
95 | splash_image.png
96 | Android_SplashImage960
97 | 1
98 |
99 |
100 | True
101 |
102 |
103 | prjMaterialEdit\res\drawable-hdpi\
104 | ic_launcher.png
105 | Android_LauncherIcon72
106 | 1
107 |
108 |
109 | True
110 |
111 |
112 | prjMaterialEdit\res\drawable-large\
113 | splash_image.png
114 | Android_SplashImage640
115 | 1
116 |
117 |
118 | True
119 |
120 |
121 | prjMaterialEdit\library\lib\armeabi\
122 | libProject1.so
123 | AndroidLibnativeArmeabiFile
124 | 1
125 |
126 |
127 | True
128 |
129 |
130 | prjMaterialEdit\res\drawable-xlarge\
131 | splash_image.png
132 | Android_SplashImage960
133 | 1
134 |
135 |
136 | True
137 |
138 |
139 | prjMaterialEdit\res\drawable-hdpi\
140 | ic_launcher.png
141 | Android_LauncherIcon72
142 | 1
143 |
144 |
145 | True
146 |
147 |
148 | prjMaterialEdit\res\drawable-small\
149 | splash_image.png
150 | Android_SplashImage426
151 | 1
152 |
153 |
154 | True
155 |
156 |
157 | prjMaterialEdit\res\drawable-mdpi\
158 | ic_launcher.png
159 | Android_LauncherIcon48
160 | 1
161 |
162 |
163 | True
164 |
165 |
166 | prjMaterialEdit\library\lib\armeabi-v7a\
167 | gdbserver
168 | AndroidGDBServer
169 | 1
170 |
171 |
172 | True
173 |
174 |
175 | prjMaterialEdit\library\lib\mips\
176 | libProject1.so
177 | AndroidLibnativeMipsFile
178 | 1
179 |
180 |
181 | True
182 |
183 |
184 | prjMaterialEdit\classes\
185 | classes.dex
186 | AndroidClassesDexFile
187 | 1
188 |
189 |
190 | True
191 |
192 |
193 | prjMaterialEdit\library\lib\armeabi-v7a\
194 | gdbserver
195 | AndroidGDBServer
196 | 1
197 |
198 |
199 | True
200 |
201 |
202 | prjMaterialEdit\res\drawable\
203 | splash_image_def.xml
204 | AndroidSplashImageDef
205 | 1
206 |
207 |
208 | True
209 |
210 |
211 | prjMaterialEdit\res\values\
212 | styles.xml
213 | AndroidSplashStyles
214 | 1
215 |
216 |
217 | True
218 |
219 |
220 | prjMaterialEdit\res\drawable-xxhdpi\
221 | ic_launcher.png
222 | Android_LauncherIcon144
223 | 1
224 |
225 |
226 | True
227 |
228 |
229 | prjMaterialEdit\
230 | AndroidManifest.xml
231 | ProjectAndroidManifest
232 | 1
233 |
234 |
235 | True
236 |
237 |
238 | prjMaterialEdit\library\lib\armeabi\
239 | libProject1.so
240 | AndroidLibnativeArmeabiFile
241 | 1
242 |
243 |
244 | True
245 |
246 |
247 | prjMaterialEdit\res\drawable-xxhdpi\
248 | ic_launcher.png
249 | Android_LauncherIcon144
250 | 1
251 |
252 |
253 | True
254 |
255 |
256 | prjMaterialEdit\res\drawable-normal\
257 | splash_image.png
258 | Android_SplashImage470
259 | 1
260 |
261 |
262 | True
263 |
264 |
265 | prjMaterialEdit\library\lib\mips\
266 | libProject1.so
267 | AndroidLibnativeMipsFile
268 | 1
269 |
270 |
271 | True
272 |
273 |
274 | prjMaterialEdit\library\lib\armeabi-v7a\
275 | libprjMaterialEdit.so
276 | ProjectOutput
277 | 1
278 |
279 |
280 | True
281 | True
282 |
283 |
284 | prjMaterialEdit\res\drawable-xhdpi\
285 | ic_launcher.png
286 | Android_LauncherIcon96
287 | 1
288 |
289 |
290 | True
291 |
292 |
293 | prjMaterialEdit\library\lib\armeabi-v7a\
294 | libprjMaterialEdit.so
295 | ProjectOutput
296 | 1
297 |
298 |
299 | True
300 | True
301 |
302 |
303 | prjMaterialEdit\res\drawable-normal\
304 | splash_image.png
305 | Android_SplashImage470
306 | 1
307 |
308 |
309 | True
310 |
311 |
312 | prjMaterialEdit\res\drawable-xhdpi\
313 | ic_launcher.png
314 | Android_LauncherIcon96
315 | 1
316 |
317 |
318 | True
319 |
320 |
321 | prjMaterialEdit\res\drawable-large\
322 | splash_image.png
323 | Android_SplashImage640
324 | 1
325 |
326 |
327 | True
328 |
329 |
330 | prjMaterialEdit\
331 | AndroidManifest.xml
332 | ProjectAndroidManifest
333 | 1
334 |
335 |
336 | True
337 |
338 |
339 | prjMaterialEdit\classes\
340 | classes.dex
341 | AndroidClassesDexFile
342 | 1
343 |
344 |
345 | True
346 |
347 |
348 | prjMaterialEdit\res\drawable-mdpi\
349 | ic_launcher.png
350 | Android_LauncherIcon48
351 | 1
352 |
353 |
354 | True
355 |
356 |
357 |
358 |
359 | prjMaterialEdit.app\
360 | libPCRE.dylib
361 | DependencyModule
362 | 1
363 |
364 |
365 | True
366 |
367 |
368 | prjMaterialEdit.app\
369 | libcgunwind.1.0.dylib
370 | DependencyModule
371 | 1
372 |
373 |
374 | True
375 |
376 |
377 |
378 |
--------------------------------------------------------------------------------
/Library/FMX.ZMaterialEdit.pas:
--------------------------------------------------------------------------------
1 | unit FMX.ZMaterialEdit;
2 |
3 | {
4 | author: Ravil (ZuBy) Zaripov
5 | email: rzaripov1990@gmail.com
6 | http://github.com/rzaripov1990
7 |
8 | 2017
9 | }
10 |
11 | interface
12 |
13 | uses
14 | System.SysUtils, System.Classes, System.UITypes, System.Types,
15 | FMX.Types, FMX.Controls, FMX.Layouts, FMX.Edit, FMX.StdCtrls, FMX.Graphics,
16 | FMX.ZMaterialTypes, FMX.Objects, FMX.TextLayout;
17 |
18 | type
19 |
20 | [ComponentPlatformsAttribute(cpaAllPlatforms)]
21 | TZMaterialEdit = class(TLayout)
22 | private const
23 | Xmargin = 2;
24 | Ymargin = 1;
25 |
26 | private
27 | FEdit: TEdit;
28 | FLabel: TLabel;
29 |
30 | FAnimation: Boolean;
31 |
32 | FPromptUpTextSettings: TTextSettings;
33 | FPromptUpStylledSettings: TStyledSettings;
34 |
35 | FPromptDownTextSettings: TTextSettings;
36 | FPromptDownStylledSettings: TStyledSettings;
37 |
38 | FTextOnChangeEvent: TNotifyEvent;
39 | FTextOnTypingEvent: TNotifyEvent;
40 |
41 | procedure DoMyEnter;
42 | procedure DoMyExit;
43 | procedure DoResize;
44 |
45 | procedure OnEnterEvent(Sender: TObject);
46 | procedure OnExitEvent(Sender: TObject);
47 | procedure OnChangeEvent(Sender: TObject);
48 | procedure OnTypingEvent(Sender: TObject);
49 | procedure OnKeyUpEvent(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
50 | procedure OnKeyDownEvent(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
51 |
52 | procedure OnApplyStyleLookupPrompt(Sender: TObject);
53 | procedure OnApplyStyleLookupText(Sender: TObject);
54 |
55 | function GetAnimation: Boolean;
56 | procedure SetAnimation(const Value: Boolean);
57 |
58 | { Edit }
59 | function GetText: string;
60 | procedure SetText(const Value: string);
61 |
62 | function GetTextSettings: TTextSettings;
63 | procedure SetTextSettings(const Value: TTextSettings);
64 |
65 | function GetTextStyledSettings: TStyledSettings;
66 | procedure SetTextStyledSettings(const Value: TStyledSettings);
67 |
68 | procedure SetKeyboardType(Value: TVirtualKeyboardType);
69 | function GetKeyboardType: TVirtualKeyboardType;
70 |
71 | procedure SetReturnKeyType(Value: TReturnKeyType);
72 | function GetReturnKeyType: TReturnKeyType;
73 |
74 | procedure SetMaxLength(const Value: Integer);
75 | function GetMaxLength: Integer;
76 |
77 | procedure SetPassword(const Value: Boolean);
78 | function GetPassword: Boolean;
79 |
80 | procedure SetReadOnly(const Value: Boolean);
81 | function GetReadOnly: Boolean;
82 |
83 | procedure SetKillFocusByReturn(const Value: Boolean);
84 | function GetKillFocusByReturn: Boolean;
85 |
86 | function GetCheckSpelling: Boolean;
87 | procedure SetCheckSpelling(const Value: Boolean);
88 |
89 | procedure SetControlType(const Value: TControlType);
90 | function GetControlType: TControlType;
91 |
92 | function GetImeMode: TImeMode;
93 | procedure SetImeMode(const Value: TImeMode);
94 |
95 | function GetFilterChar: string;
96 | procedure SetFilterChar(const Value: string);
97 |
98 | function GetDisableFocusEffect: Boolean;
99 | procedure SetDisableFocusEffect(const Value: Boolean);
100 |
101 | { Label }
102 | function GetPrompt: string;
103 | procedure SetPrompt(const Value: string);
104 |
105 | function GetPromptSettings: TTextSettings;
106 | procedure SetPromptSettings(const Value: TTextSettings);
107 |
108 | function GetPromptStyledSettings: TStyledSettings;
109 | procedure SetPromptStyledSettings(const Value: TStyledSettings);
110 |
111 | function GetAutoTranslatePrompt: Boolean;
112 | procedure SetAutoTranslatePrompt(const Value: Boolean);
113 |
114 | function GetPromptUpTextSettings: TTextSettings;
115 | procedure SetPromptUpTextSettings(const Value: TTextSettings);
116 |
117 | function GetTextSettingsClass: TTextSettingsClass;
118 | protected
119 | { Protected declarations }
120 | procedure Resize; override;
121 | public
122 | { Public declarations }
123 | constructor Create(AOwner: TComponent); override;
124 | destructor Destroy; override;
125 | procedure SetFocus; overload;
126 |
127 | function GetEdit: TEdit;
128 | function GetLabel: TLabel;
129 | published
130 | { Published declarations }
131 | property Text: string read GetText write SetText;
132 | property Prompt: string read GetPrompt write SetPrompt;
133 |
134 | property TextSettings: TTextSettings read GetTextSettings write SetTextSettings;
135 | property StyledSettings: TStyledSettings read GetTextStyledSettings write SetTextStyledSettings;
136 |
137 | property TextSettingsPrompt: TTextSettings read GetPromptSettings write SetPromptSettings;
138 | property StyledSettingsPrompt: TStyledSettings read GetPromptStyledSettings write SetPromptStyledSettings;
139 |
140 | property TextSettingsPromptUp: TTextSettings read GetPromptUpTextSettings write SetPromptUpTextSettings;
141 | property StyledSettingsPromptUp: TStyledSettings read FPromptUpStylledSettings write FPromptUpStylledSettings;
142 |
143 | property Animation: Boolean read GetAnimation write SetAnimation default True;
144 |
145 | { Events }
146 | property OnApplyStyleLookup;
147 |
148 | property OnClick;
149 |
150 | property OnMouseDown;
151 | property OnMouseMove;
152 | property OnMouseUp;
153 |
154 | property OnEnter;
155 | property OnExit;
156 |
157 | property OnKeyDown;
158 | property OnKeyUp;
159 |
160 | property OnResize;
161 |
162 | property OnChange: TNotifyEvent read FTextOnChangeEvent write FTextOnChangeEvent;
163 | property OnTyping: TNotifyEvent read FTextOnTypingEvent write FTextOnTypingEvent;
164 |
165 | property AutoTranslatePrompt: Boolean read GetAutoTranslatePrompt write SetAutoTranslatePrompt default True;
166 |
167 | property DisableFocusEffect: Boolean read GetDisableFocusEffect write SetDisableFocusEffect default False;
168 | property ControlType: TControlType read GetControlType write SetControlType default TControlType.Styled;
169 | property CheckSpelling: Boolean read GetCheckSpelling write SetCheckSpelling default False;
170 | property KeyboardType: TVirtualKeyboardType read GetKeyboardType write SetKeyboardType
171 | default TVirtualKeyboardType.Default;
172 | property ReturnKeyType: TReturnKeyType read GetReturnKeyType write SetReturnKeyType default TReturnKeyType.Default;
173 | property Password: Boolean read GetPassword write SetPassword default False;
174 | property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
175 | property KillFocusByReturn: Boolean read GetKillFocusByReturn write SetKillFocusByReturn default False;
176 | property ImeMode: TImeMode read GetImeMode write SetImeMode default TImeMode.imDontCare;
177 | property FilterChar: string read GetFilterChar write SetFilterChar;
178 | property MaxLength: Integer read GetMaxLength write SetMaxLength default 0;
179 | end;
180 |
181 | procedure Register;
182 |
183 | implementation
184 |
185 | uses
186 | System.Math, FMX.Ani;
187 |
188 | procedure Register;
189 | begin
190 | RegisterComponents('ZMaterial', [TZMaterialEdit]);
191 | end;
192 |
193 | type
194 | TPromptTextSettings = class(TTextSettings)
195 | public
196 | constructor Create(const AOwner: TPersistent); override;
197 | published
198 | property Font;
199 | property FontColor;
200 | property HorzAlign;
201 | property VertAlign;
202 | property WordWrap default True;
203 | property Trimming default TTextTrimming.Character;
204 | end;
205 |
206 | { TMaterialEdit }
207 |
208 | function GetHeightLabel(const aLabel: TLabel; aFontStyle: TFontStyles; aFontSize: Single): Single;
209 | var
210 | L: TTextLayout;
211 | begin
212 | L := TTextLayoutManager.DefaultTextLayout.Create;
213 | L.BeginUpdate;
214 | try
215 | L.Text := aLabel.Text;
216 | L.MaxSize := TPointF.Create(aLabel.Width, 1000.00);
217 | L.Font := aLabel.Font;
218 | L.Font.Size := aFontSize;
219 | L.Font.Style := aFontStyle;
220 | L.WordWrap := aLabel.WordWrap;
221 | L.HorizontalAlign := aLabel.TextAlign;
222 | L.VerticalAlign := aLabel.VertTextAlign;
223 | finally
224 | L.EndUpdate;
225 | end;
226 | Result := L.Height;
227 | FreeAndNil(L);
228 | end;
229 |
230 | constructor TZMaterialEdit.Create(AOwner: TComponent);
231 | var
232 | LClass: TTextSettingsClass;
233 | begin
234 | inherited Create(AOwner);
235 |
236 | FAnimation := True;
237 |
238 | FEdit := TEdit.Create(Self);
239 | FEdit.Parent := Self;
240 | FEdit.Stored := False;
241 | FEdit.Align := TAlignLayout.Bottom;
242 | FEdit.Size.PlatformDefault := True;
243 |
244 | FEdit.OnChange := OnChangeEvent;
245 | FEdit.OnTyping := OnTypingEvent;
246 | FEdit.OnEnter := OnEnterEvent;
247 | FEdit.OnExit := OnExitEvent;
248 | FEdit.OnKeyUp := OnKeyUpEvent;
249 | FEdit.OnKeyDown := OnKeyDownEvent;
250 | FEdit.OnApplyStyleLookup := OnApplyStyleLookupText;
251 |
252 | FLabel := TLabel.Create(Self);
253 | FLabel.Parent := Self;
254 | FLabel.Stored := False;
255 | FLabel.Align := TAlignLayout.None;
256 | FLabel.Size.PlatformDefault := True;
257 | FLabel.WordWrap := False;
258 | FLabel.AutoSize := True;
259 | FLabel.HitTest := False;
260 | FLabel.StyledSettings := FLabel.StyledSettings - [TStyledSetting.Size, TStyledSetting.FontColor,
261 | TStyledSetting.Style];
262 | FLabel.BringToFront;
263 | FLabel.OnApplyStyleLookup := OnApplyStyleLookupPrompt;
264 |
265 | HitTest := False;
266 | Stored := True;
267 |
268 | LClass := GetTextSettingsClass;
269 | // if LClass = nil then
270 | // LClass := TPromptTextSettings;
271 |
272 | FPromptUpTextSettings := LClass.Create(Self);
273 | FPromptUpTextSettings.Assign(FLabel.TextSettings);
274 |
275 | FPromptDownTextSettings := LClass.Create(Self);
276 | FPromptDownTextSettings.Assign(FLabel.TextSettings);
277 |
278 | FPromptUpStylledSettings := FLabel.StyledSettings;
279 | FPromptDownStylledSettings := FLabel.StyledSettings;
280 |
281 | Height := 2 * FEdit.Height;
282 | DoResize;
283 | FLabel.Position.Y := FEdit.Position.Y + FEdit.Height / 2 - GetHeightLabel(FLabel, FPromptUpTextSettings.Font.Style,
284 | FPromptUpTextSettings.Font.Size) / 2;
285 | end;
286 |
287 | destructor TZMaterialEdit.Destroy;
288 | begin
289 | FreeAndNil(FPromptUpTextSettings);
290 | FreeAndNil(FPromptDownTextSettings);
291 | {$IFDEF AUTOREFCOUNT}
292 | FEdit.DisposeOf;
293 | FEdit := nil;
294 | FLabel.DisposeOf;
295 | FLabel := nil;
296 | {$ELSE}
297 | FreeAndNil(FEdit);
298 | FreeAndNil(FLabel);
299 | {$ENDIF}
300 | inherited;
301 | end;
302 |
303 | procedure TZMaterialEdit.OnApplyStyleLookupPrompt(Sender: TObject);
304 | begin
305 | DoResize;
306 | end;
307 |
308 | procedure TZMaterialEdit.OnApplyStyleLookupText(Sender: TObject);
309 | begin
310 | DoResize;
311 | end;
312 |
313 | procedure TZMaterialEdit.OnChangeEvent(Sender: TObject);
314 | begin
315 | if (FEdit.Text.Trim.IsEmpty) and (not FEdit.IsFocused) then
316 | DoMyExit
317 | else
318 | DoMyEnter;
319 |
320 | if Assigned(FTextOnChangeEvent) then
321 | FTextOnChangeEvent(Sender);
322 | end;
323 |
324 | procedure TZMaterialEdit.OnTypingEvent(Sender: TObject);
325 | begin
326 | if (FEdit.Text.Trim.IsEmpty) and (not FEdit.IsFocused) then
327 | DoMyExit
328 | else
329 | DoMyEnter;
330 |
331 | if Assigned(FTextOnTypingEvent) then
332 | FTextOnTypingEvent(Sender);
333 | end;
334 |
335 | procedure TZMaterialEdit.OnEnterEvent(Sender: TObject);
336 | begin
337 | DoMyEnter;
338 | end;
339 |
340 | procedure TZMaterialEdit.OnExitEvent(Sender: TObject);
341 | begin
342 | DoMyExit;
343 | end;
344 |
345 | procedure TZMaterialEdit.OnKeyDownEvent(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
346 | begin
347 | if Assigned(OnKeyDown) then
348 | OnKeyDown(Self, Key, KeyChar, Shift);
349 | end;
350 |
351 | procedure TZMaterialEdit.OnKeyUpEvent(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
352 | begin
353 | if Assigned(OnKeyUp) then
354 | OnKeyUp(Self, Key, KeyChar, Shift);
355 | end;
356 |
357 | procedure TZMaterialEdit.DoMyEnter;
358 | var
359 | NewPositionY: Single;
360 | begin
361 | NewPositionY := FEdit.Position.Y - Ymargin - GetHeightLabel(FLabel, FPromptUpTextSettings.Font.Style,
362 | FPromptUpTextSettings.Font.Size);
363 | if not SameValue(FLabel.Position.Y, NewPositionY) then
364 | begin
365 | if FAnimation then
366 | TAnimator.AnimateFloatWait(FLabel, 'Position.Y', NewPositionY, 0.08)
367 | else
368 | FLabel.Position.Y := NewPositionY;
369 | FLabel.StyledSettings := FPromptUpStylledSettings;
370 | FLabel.TextSettings.Assign(FPromptUpTextSettings);
371 | end;
372 | if Assigned(OnEnter) then
373 | OnEnter(Self);
374 | end;
375 |
376 | procedure TZMaterialEdit.DoMyExit;
377 | var
378 | NewPositionY: Single;
379 | begin
380 | NewPositionY := FEdit.Position.Y + FEdit.Height / 2 - GetHeightLabel(FLabel, FPromptDownTextSettings.Font.Style,
381 | FPromptDownTextSettings.Font.Size) / 2;
382 | if (FEdit.Text.Trim.IsEmpty) and (not SameValue(FLabel.Position.Y, NewPositionY)) then
383 | begin
384 | if FAnimation then
385 | TAnimator.AnimateFloatWait(FLabel, 'Position.Y', NewPositionY, 0.08)
386 | else
387 | FLabel.Position.Y := NewPositionY;
388 | FLabel.StyledSettings := FPromptDownStylledSettings;
389 | FLabel.TextSettings.Assign(FPromptDownTextSettings);
390 | FLabel.Repaint;
391 | end;
392 | if Assigned(OnExit) then
393 | OnExit(Self);
394 | end;
395 |
396 | procedure TZMaterialEdit.DoResize;
397 | begin
398 | // Height := FEdit.Height + FLabel.Height + (Ymargin * 4);
399 | FLabel.Width := FEdit.Width;
400 |
401 | FLabel.Position.X := Xmargin + FEdit.Position.X;
402 | if not FEdit.Text.IsEmpty then
403 | begin
404 | FLabel.Position.Y := FEdit.Position.Y - Ymargin - GetHeightLabel(FLabel, FPromptUpTextSettings.Font.Style,
405 | FPromptUpTextSettings.Font.Size);
406 | FLabel.StyledSettings := FPromptUpStylledSettings;
407 | FLabel.TextSettings.Assign(FPromptUpTextSettings);
408 | end
409 | else
410 | begin
411 | FLabel.Position.Y := FEdit.Position.Y + FEdit.Height / 2 -
412 | GetHeightLabel(FLabel, FPromptDownTextSettings.Font.Style, FPromptDownTextSettings.Font.Size) / 2;
413 | FLabel.StyledSettings := FPromptDownStylledSettings;
414 | FLabel.TextSettings.Assign(FPromptDownTextSettings);
415 | end;
416 | end;
417 |
418 | function TZMaterialEdit.GetAnimation: Boolean;
419 | begin
420 | Result := FAnimation;
421 | end;
422 |
423 | function TZMaterialEdit.GetAutoTranslatePrompt: Boolean;
424 | begin
425 | Result := FLabel.AutoTranslate;
426 | end;
427 |
428 | function TZMaterialEdit.GetCheckSpelling: Boolean;
429 | begin
430 | Result := FEdit.CheckSpelling;
431 | end;
432 |
433 | function TZMaterialEdit.GetControlType: TControlType;
434 | begin
435 | Result := FEdit.ControlType;
436 | end;
437 |
438 | function TZMaterialEdit.GetDisableFocusEffect: Boolean;
439 | begin
440 | Result := FEdit.DisableFocusEffect;
441 | end;
442 |
443 | function TZMaterialEdit.GetEdit: TEdit;
444 | begin
445 | Result := FEdit;
446 | end;
447 |
448 | function TZMaterialEdit.GetFilterChar: string;
449 | begin
450 | Result := FEdit.FilterChar;
451 | end;
452 |
453 | function TZMaterialEdit.GetImeMode: TImeMode;
454 | begin
455 | Result := FEdit.ImeMode;
456 | end;
457 |
458 | function TZMaterialEdit.GetKeyboardType: TVirtualKeyboardType;
459 | begin
460 | Result := FEdit.KeyboardType;
461 | end;
462 |
463 | function TZMaterialEdit.GetKillFocusByReturn: Boolean;
464 | begin
465 | Result := FEdit.KillFocusByReturn;
466 | end;
467 |
468 | function TZMaterialEdit.GetLabel: TLabel;
469 | begin
470 | Result := FLabel;
471 | end;
472 |
473 | function TZMaterialEdit.GetMaxLength: Integer;
474 | begin
475 | Result := FEdit.MaxLength;
476 | end;
477 |
478 | function TZMaterialEdit.GetPassword: Boolean;
479 | begin
480 | Result := FEdit.Password;
481 | end;
482 |
483 | function TZMaterialEdit.GetPrompt: string;
484 | begin
485 | Result := FLabel.Text;
486 | end;
487 |
488 | function TZMaterialEdit.GetPromptSettings: TTextSettings;
489 | begin
490 | Result := FPromptDownTextSettings;
491 | end;
492 |
493 | function TZMaterialEdit.GetPromptStyledSettings: TStyledSettings;
494 | begin
495 | Result := FLabel.StyledSettings;
496 | end;
497 |
498 | function TZMaterialEdit.GetPromptUpTextSettings: TTextSettings;
499 | begin
500 | Result := FPromptUpTextSettings;
501 | end;
502 |
503 | function TZMaterialEdit.GetReadOnly: Boolean;
504 | begin
505 | Result := FEdit.ReadOnly;
506 | end;
507 |
508 | function TZMaterialEdit.GetReturnKeyType: TReturnKeyType;
509 | begin
510 | Result := FEdit.ReturnKeyType;
511 | end;
512 |
513 | function TZMaterialEdit.GetText: string;
514 | begin
515 | Result := FEdit.Text;
516 | end;
517 |
518 | function TZMaterialEdit.GetTextSettings: TTextSettings;
519 | begin
520 | Result := FEdit.TextSettings;
521 | end;
522 |
523 | function TZMaterialEdit.GetTextSettingsClass: TTextSettingsClass;
524 | begin
525 | Result := TPromptTextSettings;
526 | end;
527 |
528 | function TZMaterialEdit.GetTextStyledSettings: TStyledSettings;
529 | begin
530 | Result := FEdit.StyledSettings;
531 | end;
532 |
533 | procedure TZMaterialEdit.Resize;
534 | begin
535 | inherited;
536 | DoResize;
537 | end;
538 |
539 | procedure TZMaterialEdit.SetAnimation(const Value: Boolean);
540 | begin
541 | FAnimation := Value;
542 | end;
543 |
544 | procedure TZMaterialEdit.SetAutoTranslatePrompt(const Value: Boolean);
545 | begin
546 | FLabel.AutoTranslate := Value;
547 | end;
548 |
549 | procedure TZMaterialEdit.SetCheckSpelling(const Value: Boolean);
550 | begin
551 | FEdit.CheckSpelling := Value;
552 | end;
553 |
554 | procedure TZMaterialEdit.SetControlType(const Value: TControlType);
555 | begin
556 | FEdit.ControlType := Value;
557 | end;
558 |
559 | procedure TZMaterialEdit.SetDisableFocusEffect(const Value: Boolean);
560 | begin
561 | FEdit.DisableFocusEffect := Value;
562 | end;
563 |
564 | procedure TZMaterialEdit.SetFilterChar(const Value: string);
565 | begin
566 | FEdit.FilterChar := Value;
567 | end;
568 |
569 | procedure TZMaterialEdit.SetFocus;
570 | begin
571 | // inherited;
572 | FEdit.SetFocus;
573 | end;
574 |
575 | procedure TZMaterialEdit.SetImeMode(const Value: TImeMode);
576 | begin
577 | FEdit.ImeMode := Value;
578 | end;
579 |
580 | procedure TZMaterialEdit.SetKeyboardType(Value: TVirtualKeyboardType);
581 | begin
582 | FEdit.KeyboardType := Value;
583 | end;
584 |
585 | procedure TZMaterialEdit.SetKillFocusByReturn(const Value: Boolean);
586 | begin
587 | FEdit.KillFocusByReturn := Value;
588 | end;
589 |
590 | procedure TZMaterialEdit.SetMaxLength(const Value: Integer);
591 | begin
592 | FEdit.MaxLength := Value;
593 | end;
594 |
595 | procedure TZMaterialEdit.SetPassword(const Value: Boolean);
596 | begin
597 | FEdit.Password := Value;
598 | end;
599 |
600 | procedure TZMaterialEdit.SetPrompt(const Value: string);
601 | begin
602 | FLabel.Text := Value;
603 | end;
604 |
605 | procedure TZMaterialEdit.SetPromptSettings(const Value: TTextSettings);
606 | begin
607 | FPromptDownTextSettings.Assign(Value);
608 | FLabel.TextSettings.Assign(FPromptDownTextSettings);
609 | DoResize;
610 | end;
611 |
612 | procedure TZMaterialEdit.SetPromptStyledSettings(const Value: TStyledSettings);
613 | begin
614 | FLabel.StyledSettings := Value;
615 | FPromptDownStylledSettings := Value;
616 | end;
617 |
618 | procedure TZMaterialEdit.SetPromptUpTextSettings(const Value: TTextSettings);
619 | begin
620 | FPromptUpTextSettings.Assign(Value);
621 | end;
622 |
623 | procedure TZMaterialEdit.SetReadOnly(const Value: Boolean);
624 | begin
625 | FEdit.ReadOnly := Value;
626 | end;
627 |
628 | procedure TZMaterialEdit.SetReturnKeyType(Value: TReturnKeyType);
629 | begin
630 | FEdit.ReturnKeyType := Value;
631 | end;
632 |
633 | procedure TZMaterialEdit.SetText(const Value: string);
634 | begin
635 | FEdit.Text := Value;
636 | end;
637 |
638 | procedure TZMaterialEdit.SetTextSettings(const Value: TTextSettings);
639 | begin
640 | FEdit.TextSettings.Assign(Value);
641 | end;
642 |
643 | procedure TZMaterialEdit.SetTextStyledSettings(const Value: TStyledSettings);
644 | begin
645 | FEdit.StyledSettings := Value;
646 | end;
647 |
648 | { TPromptTextSettings }
649 |
650 | constructor TPromptTextSettings.Create(const AOwner: TPersistent);
651 | begin
652 | inherited;
653 | WordWrap := False;
654 | Trimming := TTextTrimming.Character;
655 | end;
656 |
657 | end.
658 |
--------------------------------------------------------------------------------
/Library/RX10Berlin/pkgZMaterial.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {60D3F5B4-4F5E-4B62-B322-50555ECC76DA}
4 | pkgZMaterial.dpk
5 | 18.2
6 | FMX
7 | True
8 | Debug
9 | Win32
10 | 1
11 | Package
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Base
54 | true
55 |
56 |
57 | true
58 | Cfg_1
59 | true
60 | true
61 |
62 |
63 | true
64 | Base
65 | true
66 |
67 |
68 | pkgZMaterial
69 | author: ZuBy
70 | true
71 | All
72 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
73 | true
74 | .\$(Platform)\$(Config)
75 | .\$(Platform)\$(Config)
76 | false
77 | false
78 | false
79 | false
80 | false
81 | 310
82 |
83 |
84 | None
85 | android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
86 | rtl;fmx;$(DCC_UsePackage)
87 |
88 |
89 | None
90 | rtl;fmx;$(DCC_UsePackage)
91 |
92 |
93 | None
94 | rtl;fmx;$(DCC_UsePackage)
95 |
96 |
97 | None
98 | rtl;fmx;$(DCC_UsePackage)
99 |
100 |
101 | rtl;fmx;$(DCC_UsePackage)
102 |
103 |
104 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
105 | rtl;fmx;$(DCC_UsePackage)
106 | true
107 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
108 | Debug
109 | 1033
110 |
111 |
112 | rtl;fmx;$(DCC_UsePackage)
113 |
114 |
115 | DEBUG;$(DCC_Define)
116 | true
117 | false
118 | true
119 | true
120 | true
121 |
122 |
123 | false
124 |
125 |
126 | false
127 | RELEASE;$(DCC_Define)
128 | 0
129 | 0
130 |
131 |
132 |
133 | MainSource
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | Cfg_2
145 | Base
146 |
147 |
148 | Base
149 |
150 |
151 | Cfg_1
152 | Base
153 |
154 |
155 |
156 | Delphi.Personality.12
157 | Package
158 |
159 |
160 |
161 | pkgZMaterial.dpk
162 |
163 |
164 | TMS FMX WebGMaps Designtime
165 | Microsoft Office 2000 Sample Automation Server Wrapper Components
166 | Microsoft Office XP Sample Automation Server Wrapper Components
167 |
168 |
169 |
170 |
171 |
172 | true
173 |
174 |
175 |
176 |
177 | true
178 |
179 |
180 |
181 |
182 | true
183 |
184 |
185 |
186 |
187 | true
188 |
189 |
190 |
191 |
192 | pkgZMaterial.bpl
193 | true
194 |
195 |
196 |
197 |
198 |
199 | Contents\Resources
200 | 1
201 |
202 |
203 |
204 |
205 | classes
206 | 1
207 |
208 |
209 |
210 |
211 | Contents\MacOS
212 | 0
213 |
214 |
215 | 1
216 |
217 |
218 |
219 |
220 | 1
221 |
222 |
223 | 1
224 |
225 |
226 | 1
227 |
228 |
229 |
230 |
231 | res\drawable-xxhdpi
232 | 1
233 |
234 |
235 |
236 |
237 | library\lib\mips
238 | 1
239 |
240 |
241 |
242 |
243 | 1
244 |
245 |
246 | 1
247 |
248 |
249 | 0
250 |
251 |
252 | 1
253 |
254 |
255 | 1
256 |
257 |
258 | library\lib\armeabi-v7a
259 | 1
260 |
261 |
262 | 1
263 |
264 |
265 |
266 |
267 | 0
268 |
269 |
270 | 1
271 | .framework
272 |
273 |
274 |
275 |
276 | 1
277 |
278 |
279 | 1
280 |
281 |
282 |
283 |
284 | 1
285 |
286 |
287 | 1
288 |
289 |
290 | 1
291 |
292 |
293 |
294 |
295 | 1
296 |
297 |
298 | 1
299 |
300 |
301 | 1
302 |
303 |
304 |
305 |
306 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
307 | 1
308 |
309 |
310 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
311 | 1
312 |
313 |
314 |
315 |
316 | 1
317 |
318 |
319 | 1
320 |
321 |
322 | 1
323 |
324 |
325 |
326 |
327 |
328 | library\lib\armeabi
329 | 1
330 |
331 |
332 |
333 |
334 | 0
335 |
336 |
337 | 1
338 |
339 |
340 | 1
341 |
342 |
343 |
344 |
345 | 1
346 |
347 |
348 | 1
349 |
350 |
351 | 1
352 |
353 |
354 |
355 |
356 | res\drawable-normal
357 | 1
358 |
359 |
360 |
361 |
362 | res\drawable-xhdpi
363 | 1
364 |
365 |
366 |
367 |
368 | res\drawable-large
369 | 1
370 |
371 |
372 |
373 |
374 | 1
375 |
376 |
377 | 1
378 |
379 |
380 | 1
381 |
382 |
383 |
384 |
385 | Assets
386 | 1
387 |
388 |
389 | Assets
390 | 1
391 |
392 |
393 |
394 |
395 |
396 | res\drawable-hdpi
397 | 1
398 |
399 |
400 |
401 |
402 | library\lib\armeabi-v7a
403 | 1
404 |
405 |
406 |
407 |
408 |
409 |
410 | Assets
411 | 1
412 |
413 |
414 | Assets
415 | 1
416 |
417 |
418 |
419 |
420 | 1
421 |
422 |
423 | 1
424 |
425 |
426 | 1
427 |
428 |
429 |
430 |
431 | res\values
432 | 1
433 |
434 |
435 |
436 |
437 | res\drawable-small
438 | 1
439 |
440 |
441 |
442 |
443 | res\drawable
444 | 1
445 |
446 |
447 |
448 |
449 | 1
450 |
451 |
452 | 1
453 |
454 |
455 | 1
456 |
457 |
458 |
459 |
460 | 1
461 |
462 |
463 |
464 |
465 | res\drawable
466 | 1
467 |
468 |
469 |
470 |
471 | 0
472 |
473 |
474 | 0
475 |
476 |
477 | 0
478 |
479 |
480 | 0
481 |
482 |
483 | 0
484 |
485 |
486 | 0
487 |
488 |
489 |
490 |
491 | library\lib\armeabi-v7a
492 | 1
493 |
494 |
495 |
496 |
497 | 0
498 | .bpl
499 |
500 |
501 | 1
502 | .dylib
503 |
504 |
505 | 1
506 | .dylib
507 |
508 |
509 | 1
510 | .dylib
511 |
512 |
513 | 1
514 | .dylib
515 |
516 |
517 |
518 |
519 | res\drawable-mdpi
520 | 1
521 |
522 |
523 |
524 |
525 | res\drawable-xlarge
526 | 1
527 |
528 |
529 |
530 |
531 | res\drawable-ldpi
532 | 1
533 |
534 |
535 |
536 |
537 | 0
538 | .dll;.bpl
539 |
540 |
541 | 1
542 | .dylib
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 | False
556 | False
557 | False
558 | False
559 | False
560 | True
561 | False
562 |
563 |
564 | 12
565 |
566 |
567 |
568 |
569 |
570 |
--------------------------------------------------------------------------------
/Library/RX10Seattle/pkgZMaterial.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {60D3F5B4-4F5E-4B62-B322-50555ECC76DA}
4 | pkgZMaterial.dpk
5 | 18.2
6 | FMX
7 | True
8 | Debug
9 | Win32
10 | 1
11 | Package
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Base
54 | true
55 |
56 |
57 | true
58 | Cfg_1
59 | true
60 | true
61 |
62 |
63 | true
64 | Base
65 | true
66 |
67 |
68 | pkgZMaterial
69 | author: ZuBy
70 | true
71 | All
72 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
73 | true
74 | .\$(Platform)\$(Config)
75 | .\$(Platform)\$(Config)
76 | false
77 | false
78 | false
79 | false
80 | false
81 | 300
82 |
83 |
84 | None
85 | android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
86 | rtl;fmx;$(DCC_UsePackage)
87 |
88 |
89 | None
90 | rtl;fmx;$(DCC_UsePackage)
91 |
92 |
93 | None
94 | rtl;fmx;$(DCC_UsePackage)
95 |
96 |
97 | None
98 | rtl;fmx;$(DCC_UsePackage)
99 |
100 |
101 | rtl;fmx;$(DCC_UsePackage)
102 |
103 |
104 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
105 | rtl;fmx;$(DCC_UsePackage)
106 | true
107 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
108 | Debug
109 | 1033
110 |
111 |
112 | rtl;fmx;$(DCC_UsePackage)
113 |
114 |
115 | DEBUG;$(DCC_Define)
116 | true
117 | false
118 | true
119 | true
120 | true
121 |
122 |
123 | false
124 |
125 |
126 | false
127 | RELEASE;$(DCC_Define)
128 | 0
129 | 0
130 |
131 |
132 |
133 | MainSource
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | Cfg_2
145 | Base
146 |
147 |
148 | Base
149 |
150 |
151 | Cfg_1
152 | Base
153 |
154 |
155 |
156 | Delphi.Personality.12
157 | Package
158 |
159 |
160 |
161 | pkgZMaterial.dpk
162 |
163 |
164 | TMS FMX WebGMaps Designtime
165 | Microsoft Office 2000 Sample Automation Server Wrapper Components
166 | Microsoft Office XP Sample Automation Server Wrapper Components
167 |
168 |
169 |
170 |
171 |
172 | true
173 |
174 |
175 |
176 |
177 | true
178 |
179 |
180 |
181 |
182 | true
183 |
184 |
185 |
186 |
187 | true
188 |
189 |
190 |
191 |
192 | pkgZMaterial.bpl
193 | true
194 |
195 |
196 |
197 |
198 | 0
199 | .dll;.bpl
200 |
201 |
202 | 1
203 | .dylib
204 |
205 |
206 |
207 |
208 | Contents\Resources
209 | 1
210 |
211 |
212 |
213 |
214 | classes
215 | 1
216 |
217 |
218 |
219 |
220 | Contents\MacOS
221 | 0
222 |
223 |
224 | 1
225 |
226 |
227 |
228 |
229 | 1
230 |
231 |
232 | 1
233 |
234 |
235 | 1
236 |
237 |
238 |
239 |
240 | res\drawable-xxhdpi
241 | 1
242 |
243 |
244 |
245 |
246 | library\lib\mips
247 | 1
248 |
249 |
250 |
251 |
252 | 1
253 |
254 |
255 | 1
256 |
257 |
258 | 0
259 |
260 |
261 | 1
262 |
263 |
264 | 1
265 |
266 |
267 | library\lib\armeabi-v7a
268 | 1
269 |
270 |
271 | 1
272 |
273 |
274 |
275 |
276 | 0
277 |
278 |
279 | 1
280 | .framework
281 |
282 |
283 |
284 |
285 | 1
286 |
287 |
288 | 1
289 |
290 |
291 |
292 |
293 | 1
294 |
295 |
296 | 1
297 |
298 |
299 | 1
300 |
301 |
302 |
303 |
304 | 1
305 |
306 |
307 | 1
308 |
309 |
310 | 1
311 |
312 |
313 |
314 |
315 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
316 | 1
317 |
318 |
319 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
320 | 1
321 |
322 |
323 |
324 |
325 | 1
326 |
327 |
328 | 1
329 |
330 |
331 | 1
332 |
333 |
334 |
335 |
336 |
337 | library\lib\armeabi
338 | 1
339 |
340 |
341 |
342 |
343 | 0
344 |
345 |
346 | 1
347 |
348 |
349 | 1
350 |
351 |
352 |
353 |
354 | 1
355 |
356 |
357 | 1
358 |
359 |
360 | 1
361 |
362 |
363 |
364 |
365 | res\drawable-normal
366 | 1
367 |
368 |
369 |
370 |
371 | res\drawable-xhdpi
372 | 1
373 |
374 |
375 |
376 |
377 | res\drawable-large
378 | 1
379 |
380 |
381 |
382 |
383 | 1
384 |
385 |
386 | 1
387 |
388 |
389 | 1
390 |
391 |
392 |
393 |
394 | Assets
395 | 1
396 |
397 |
398 | Assets
399 | 1
400 |
401 |
402 |
403 |
404 |
405 | res\drawable-hdpi
406 | 1
407 |
408 |
409 |
410 |
411 | library\lib\armeabi-v7a
412 | 1
413 |
414 |
415 |
416 |
417 |
418 |
419 | Assets
420 | 1
421 |
422 |
423 | Assets
424 | 1
425 |
426 |
427 |
428 |
429 | 1
430 |
431 |
432 | 1
433 |
434 |
435 | 1
436 |
437 |
438 |
439 |
440 | res\values
441 | 1
442 |
443 |
444 |
445 |
446 | res\drawable-small
447 | 1
448 |
449 |
450 |
451 |
452 | res\drawable
453 | 1
454 |
455 |
456 |
457 |
458 | 1
459 |
460 |
461 | 1
462 |
463 |
464 | 1
465 |
466 |
467 |
468 |
469 | 1
470 |
471 |
472 |
473 |
474 | res\drawable
475 | 1
476 |
477 |
478 |
479 |
480 | 0
481 |
482 |
483 | 0
484 |
485 |
486 | 0
487 |
488 |
489 | 0
490 |
491 |
492 | 0
493 |
494 |
495 | 0
496 |
497 |
498 |
499 |
500 | library\lib\armeabi-v7a
501 | 1
502 |
503 |
504 |
505 |
506 | 0
507 | .bpl
508 |
509 |
510 | 1
511 | .dylib
512 |
513 |
514 | 1
515 | .dylib
516 |
517 |
518 | 1
519 | .dylib
520 |
521 |
522 | 1
523 | .dylib
524 |
525 |
526 |
527 |
528 | res\drawable-mdpi
529 | 1
530 |
531 |
532 |
533 |
534 | res\drawable-xlarge
535 | 1
536 |
537 |
538 |
539 |
540 | res\drawable-ldpi
541 | 1
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 | False
556 | False
557 | False
558 | False
559 | False
560 | True
561 | False
562 |
563 |
564 | 12
565 |
566 |
567 |
568 |
569 |
570 |
--------------------------------------------------------------------------------
/Library/RX10Godzilla/pkgZMaterial.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {60D3F5B4-4F5E-4B62-B322-50555ECC76DA}
4 | pkgZMaterial.dpk
5 | 18.2
6 | FMX
7 | True
8 | Debug
9 | Win32
10 | 1
11 | Package
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Base
54 | true
55 |
56 |
57 | true
58 | Cfg_1
59 | true
60 | true
61 |
62 |
63 | true
64 | Base
65 | true
66 |
67 |
68 | pkgZMaterial
69 | author: ZuBy
70 | true
71 | All
72 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
73 | true
74 | .\$(Platform)\$(Config)
75 | .\$(Platform)\$(Config)
76 | false
77 | false
78 | false
79 | false
80 | false
81 | 320
82 |
83 |
84 | None
85 | android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
86 | rtl;fmx;$(DCC_UsePackage)
87 |
88 |
89 | None
90 | rtl;fmx;$(DCC_UsePackage)
91 |
92 |
93 | None
94 | rtl;fmx;$(DCC_UsePackage)
95 |
96 |
97 | None
98 | rtl;fmx;$(DCC_UsePackage)
99 |
100 |
101 | rtl;fmx;$(DCC_UsePackage)
102 |
103 |
104 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
105 | rtl;fmx;$(DCC_UsePackage)
106 | true
107 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
108 | Debug
109 | 1033
110 |
111 |
112 | rtl;fmx;$(DCC_UsePackage)
113 |
114 |
115 | DEBUG;$(DCC_Define)
116 | true
117 | false
118 | true
119 | true
120 | true
121 |
122 |
123 | false
124 |
125 |
126 | false
127 | RELEASE;$(DCC_Define)
128 | 0
129 | 0
130 |
131 |
132 |
133 | MainSource
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | Cfg_2
145 | Base
146 |
147 |
148 | Base
149 |
150 |
151 | Cfg_1
152 | Base
153 |
154 |
155 |
156 | Delphi.Personality.12
157 | Package
158 |
159 |
160 |
161 | pkgZMaterial.dpk
162 |
163 |
164 | TMS FMX WebGMaps Designtime
165 | Microsoft Office 2000 Sample Automation Server Wrapper Components
166 | Microsoft Office XP Sample Automation Server Wrapper Components
167 |
168 |
169 |
170 |
171 |
172 | true
173 |
174 |
175 |
176 |
177 | true
178 |
179 |
180 |
181 |
182 | true
183 |
184 |
185 |
186 |
187 | true
188 |
189 |
190 |
191 |
192 | pkgZMaterial.bpl
193 | true
194 |
195 |
196 |
197 |
198 | 0
199 | .dll;.bpl
200 |
201 |
202 | 1
203 | .dylib
204 |
205 |
206 |
207 |
208 | Contents\Resources
209 | 1
210 |
211 |
212 |
213 |
214 | classes
215 | 1
216 |
217 |
218 |
219 |
220 | Contents\MacOS
221 | 0
222 |
223 |
224 | 1
225 |
226 |
227 |
228 |
229 | 1
230 |
231 |
232 | 1
233 |
234 |
235 | 1
236 |
237 |
238 |
239 |
240 | res\drawable-xxhdpi
241 | 1
242 |
243 |
244 |
245 |
246 | library\lib\mips
247 | 1
248 |
249 |
250 |
251 |
252 | 1
253 |
254 |
255 | 1
256 |
257 |
258 | 0
259 |
260 |
261 | 1
262 |
263 |
264 | 1
265 |
266 |
267 | library\lib\armeabi-v7a
268 | 1
269 |
270 |
271 | 1
272 |
273 |
274 |
275 |
276 | 0
277 |
278 |
279 | 1
280 | .framework
281 |
282 |
283 |
284 |
285 | 1
286 |
287 |
288 | 1
289 |
290 |
291 |
292 |
293 | 1
294 |
295 |
296 | 1
297 |
298 |
299 | 1
300 |
301 |
302 |
303 |
304 | 1
305 |
306 |
307 | 1
308 |
309 |
310 | 1
311 |
312 |
313 |
314 |
315 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
316 | 1
317 |
318 |
319 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
320 | 1
321 |
322 |
323 |
324 |
325 | 1
326 |
327 |
328 | 1
329 |
330 |
331 | 1
332 |
333 |
334 |
335 |
336 |
337 | library\lib\armeabi
338 | 1
339 |
340 |
341 |
342 |
343 | 0
344 |
345 |
346 | 1
347 |
348 |
349 | 1
350 |
351 |
352 |
353 |
354 | 1
355 |
356 |
357 | 1
358 |
359 |
360 | 1
361 |
362 |
363 |
364 |
365 | res\drawable-normal
366 | 1
367 |
368 |
369 |
370 |
371 | res\drawable-xhdpi
372 | 1
373 |
374 |
375 |
376 |
377 | res\drawable-large
378 | 1
379 |
380 |
381 |
382 |
383 | 1
384 |
385 |
386 | 1
387 |
388 |
389 | 1
390 |
391 |
392 |
393 |
394 | Assets
395 | 1
396 |
397 |
398 | Assets
399 | 1
400 |
401 |
402 |
403 |
404 |
405 | res\drawable-hdpi
406 | 1
407 |
408 |
409 |
410 |
411 | library\lib\armeabi-v7a
412 | 1
413 |
414 |
415 |
416 |
417 |
418 |
419 | Assets
420 | 1
421 |
422 |
423 | Assets
424 | 1
425 |
426 |
427 |
428 |
429 | 1
430 |
431 |
432 | 1
433 |
434 |
435 | 1
436 |
437 |
438 |
439 |
440 | res\values
441 | 1
442 |
443 |
444 |
445 |
446 | res\drawable-small
447 | 1
448 |
449 |
450 |
451 |
452 | res\drawable
453 | 1
454 |
455 |
456 |
457 |
458 | 1
459 |
460 |
461 | 1
462 |
463 |
464 | 1
465 |
466 |
467 |
468 |
469 | 1
470 |
471 |
472 |
473 |
474 | res\drawable
475 | 1
476 |
477 |
478 |
479 |
480 | 0
481 |
482 |
483 | 0
484 |
485 |
486 | 0
487 |
488 |
489 | 0
490 |
491 |
492 | 0
493 |
494 |
495 | 0
496 |
497 |
498 |
499 |
500 | library\lib\armeabi-v7a
501 | 1
502 |
503 |
504 |
505 |
506 | 0
507 | .bpl
508 |
509 |
510 | 1
511 | .dylib
512 |
513 |
514 | 1
515 | .dylib
516 |
517 |
518 | 1
519 | .dylib
520 |
521 |
522 | 1
523 | .dylib
524 |
525 |
526 |
527 |
528 | res\drawable-mdpi
529 | 1
530 |
531 |
532 |
533 |
534 | res\drawable-xlarge
535 | 1
536 |
537 |
538 |
539 |
540 | res\drawable-ldpi
541 | 1
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 | False
556 | False
557 | False
558 | False
559 | False
560 | True
561 | False
562 |
563 |
564 | 12
565 |
566 |
567 |
568 |
569 |
570 |
--------------------------------------------------------------------------------
/Demo/MaterialActionButton/prjMaterialActionButton.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 | 066ab2310ac64b09
8 |
9 |
10 | A8F72BBE-64E3-4724-99CA-F0ECBD1975C4
11 |
12 |
13 |
14 |
15 |
16 |
17 | prjMaterialActionButton\
18 | prjMaterialActionButton.exe
19 | ProjectOutput
20 | 0
21 |
22 |
23 | True
24 | True
25 |
26 |
27 |
28 |
29 | prjMaterialActionButton.app\Contents\MacOS\
30 | libcgsqlite3.dylib
31 | DependencyModule
32 | 1
33 |
34 |
35 | True
36 |
37 |
38 | prjMaterialActionButton.app\Contents\MacOS\
39 | libcgunwind.1.0.dylib
40 | DependencyModule
41 | 1
42 |
43 |
44 | True
45 |
46 |
47 |
48 |
49 | prjMaterialActionButton\res\drawable-ldpi\
50 | ic_launcher.png
51 | Android_LauncherIcon36
52 | 1
53 |
54 |
55 | True
56 |
57 |
58 | prjMaterialActionButton\res\drawable-hdpi\
59 | ic_launcher.png
60 | Android_LauncherIcon72
61 | 1
62 |
63 |
64 | True
65 |
66 |
67 | prjMaterialActionButton\res\drawable-small\
68 | splash_image.png
69 | Android_SplashImage426
70 | 1
71 |
72 |
73 | True
74 |
75 |
76 | prjMaterialActionButton\library\lib\mips\
77 | libprjMaterialActionButton.so
78 | AndroidLibnativeMipsFile
79 | 1
80 |
81 |
82 | True
83 |
84 |
85 | prjMaterialActionButton\res\drawable\
86 | splash_image_def.xml
87 | AndroidSplashImageDef
88 | 1
89 |
90 |
91 | True
92 |
93 |
94 | prjMaterialActionButton\
95 | AndroidManifest.xml
96 | ProjectAndroidManifest
97 | 1
98 |
99 |
100 | True
101 |
102 |
103 | prjMaterialActionButton\res\drawable-xxhdpi\
104 | ic_launcher.png
105 | Android_LauncherIcon144
106 | 1
107 |
108 |
109 | True
110 |
111 |
112 | prjMaterialActionButton\library\lib\armeabi\
113 | libprjMaterialActionButton.so
114 | AndroidLibnativeArmeabiFile
115 | 1
116 |
117 |
118 | True
119 |
120 |
121 | prjMaterialActionButton\library\lib\armeabi-v7a\
122 | libprjMaterialActionButton.so
123 | ProjectOutput
124 | 1
125 |
126 |
127 | True
128 | True
129 |
130 |
131 | prjMaterialActionButton\res\drawable-xhdpi\
132 | ic_launcher.png
133 | Android_LauncherIcon96
134 | 1
135 |
136 |
137 | True
138 |
139 |
140 | prjMaterialActionButton\res\drawable-large\
141 | splash_image.png
142 | Android_SplashImage640
143 | 1
144 |
145 |
146 | True
147 |
148 |
149 | prjMaterialActionButton\res\drawable-xlarge\
150 | splash_image.png
151 | Android_SplashImage960
152 | 1
153 |
154 |
155 | True
156 |
157 |
158 | prjMaterialActionButton\res\drawable-mdpi\
159 | ic_launcher.png
160 | Android_LauncherIcon48
161 | 1
162 |
163 |
164 | True
165 |
166 |
167 | prjMaterialActionButton\library\lib\armeabi-v7a\
168 | gdbserver
169 | AndroidGDBServer
170 | 1
171 |
172 |
173 | True
174 |
175 |
176 | prjMaterialActionButton\classes\
177 | classes.dex
178 | AndroidClassesDexFile
179 | 1
180 |
181 |
182 | True
183 |
184 |
185 | prjMaterialActionButton\res\values\
186 | styles.xml
187 | AndroidSplashStyles
188 | 1
189 |
190 |
191 | True
192 |
193 |
194 | prjMaterialActionButton\res\drawable-normal\
195 | splash_image.png
196 | Android_SplashImage470
197 | 1
198 |
199 |
200 | True
201 |
202 |
203 |
204 |
205 | prjMaterialActionButton.app\
206 | FM_ApplicationIcon_144x144.png
207 | iPad_AppIcon144
208 | 0
209 |
210 |
211 | True
212 |
213 |
214 | prjMaterialActionButton.app\
215 | FM_SpotlightSearchIcon_58x58.png
216 | iPhone_Spotlight58
217 | 0
218 |
219 |
220 | True
221 |
222 |
223 | prjMaterialActionButton.app\
224 | FM_SpotlightSearchIcon_100x100.png
225 | iPad_SpotLight100
226 | 0
227 |
228 |
229 | True
230 |
231 |
232 | prjMaterialActionButton.app\
233 | FM_SpotlightSearchIcon_40x40.png
234 | iPad_SpotLight40
235 | 0
236 |
237 |
238 | True
239 |
240 |
241 | prjMaterialActionButton.app\
242 | FM_ApplicationIcon_60x60.png
243 | iPhone_AppIcon60
244 | 0
245 |
246 |
247 | True
248 |
249 |
250 | prjMaterialActionButton.app\
251 | FM_ApplicationIcon_114x114.png
252 | iPhone_AppIcon114
253 | 0
254 |
255 |
256 | True
257 |
258 |
259 | prjMaterialActionButton.app\
260 | Default-Portrait@2x.png
261 | iPad_Launch1536
262 | 1
263 |
264 |
265 | True
266 |
267 |
268 | prjMaterialActionButton.app\
269 | FM_ApplicationIcon_152x152.png
270 | iPad_AppIcon152
271 | 0
272 |
273 |
274 | True
275 |
276 |
277 | prjMaterialActionButton.app\
278 | Default-736h@3x.png
279 | iPhone_Launch1242
280 | 0
281 |
282 |
283 | True
284 |
285 |
286 | prjMaterialActionButton.app\
287 | Default-667h@2x.png
288 | iPhone_Launch750
289 | 0
290 |
291 |
292 | True
293 |
294 |
295 | prjMaterialActionButton.app\
296 | Default~ipad.png
297 | iPad_Launch768
298 | 1
299 |
300 |
301 | True
302 |
303 |
304 | prjMaterialActionButton.app\
305 | libcgunwind.1.0.dylib
306 | DependencyModule
307 | 1
308 |
309 |
310 | True
311 |
312 |
313 | prjMaterialActionButton.app\
314 | FM_ApplicationIcon_72x72.png
315 | iPad_AppIcon72
316 | 0
317 |
318 |
319 | True
320 |
321 |
322 | prjMaterialActionButton.app\
323 | Default-Portrait~ipad.png
324 | iPad_Launch768x1024
325 | 0
326 |
327 |
328 | True
329 |
330 |
331 | prjMaterialActionButton.app\
332 | Default@2x.png
333 | iPhone_Launch640
334 | 1
335 |
336 |
337 | True
338 |
339 |
340 | prjMaterialActionButton.app\
341 | FM_SpotlightSearchIcon_40x40.png
342 | iPhone_Spotlight40
343 | 0
344 |
345 |
346 | True
347 |
348 |
349 | prjMaterialActionButton.app\
350 | prjMaterialActionButton
351 | ProjectOutput
352 | 1
353 |
354 |
355 | True
356 | True
357 |
358 |
359 | prjMaterialActionButton.app\
360 | prjMaterialActionButton.entitlements
361 | ProjectiOSEntitlements
362 | 0
363 |
364 |
365 | True
366 |
367 |
368 | prjMaterialActionButton.app\
369 | Default-Landscape@2x~ipad.png
370 | iPad_Launch2048x1536
371 | 0
372 |
373 |
374 | True
375 |
376 |
377 | prjMaterialActionButton.app\
378 | FM_ApplicationIcon_87x87.png
379 | iPhone_AppIcon87
380 | 0
381 |
382 |
383 | True
384 |
385 |
386 | prjMaterialActionButton.app\
387 | Default-Landscape~ipad.png
388 | iPad_Launch1024x768
389 | 0
390 |
391 |
392 | True
393 |
394 |
395 | prjMaterialActionButton.app\
396 | Default.png
397 | iPhone_Launch320
398 | 1
399 |
400 |
401 | True
402 |
403 |
404 | prjMaterialActionButton.app\
405 | FM_ApplicationIcon_180x180.png
406 | iPhone_AppIcon180
407 | 0
408 |
409 |
410 | True
411 |
412 |
413 | prjMaterialActionButton.app\
414 | FM_ApplicationIcon_76x76.png
415 | iPad_AppIcon76
416 | 0
417 |
418 |
419 | True
420 |
421 |
422 | prjMaterialActionButton.app\
423 | libPCRE.dylib
424 | DependencyModule
425 | 1
426 |
427 |
428 | True
429 |
430 |
431 | prjMaterialActionButton.app\
432 | FM_SettingIcon_58x58.png
433 | iPad_Setting58
434 | 0
435 |
436 |
437 | True
438 |
439 |
440 | prjMaterialActionButton.app\
441 | FM_SpotlightSearchIcon_80x80.png
442 | iPhone_Spotlight80
443 | 0
444 |
445 |
446 | True
447 |
448 |
449 | prjMaterialActionButton.app\
450 | FM_SpotlightSearchIcon_80x80.png
451 | iPad_SpotLight80
452 | 0
453 |
454 |
455 | True
456 |
457 |
458 | prjMaterialActionButton.app\
459 | Default-Portrait@2x~ipad.png
460 | iPad_Launch1536x2048
461 | 0
462 |
463 |
464 | True
465 |
466 |
467 | prjMaterialActionButton.app\
468 | Default-Landscape-736h@3x.png
469 | iPhone_Launch2208
470 | 0
471 |
472 |
473 | True
474 |
475 |
476 | prjMaterialActionButton.app\
477 | FM_ApplicationIcon_120x120.png
478 | iPhone_AppIcon120
479 | 0
480 |
481 |
482 | True
483 |
484 |
485 | prjMaterialActionButton.app\
486 | Info.plist
487 | ProjectiOSInfoPList
488 | 1
489 |
490 |
491 | True
492 |
493 |
494 | prjMaterialActionButton.app\
495 | FM_ApplicationIcon_57x57.png
496 | iPhone_AppIcon57
497 | 0
498 |
499 |
500 | True
501 |
502 |
503 | prjMaterialActionButton.app\
504 | Default-Landscape@2x.png
505 | iPad_Launch2048
506 | 1
507 |
508 |
509 | True
510 |
511 |
512 | prjMaterialActionButton.app\
513 | FM_SpotlightSearchIcon_50x50.png
514 | iPad_SpotLight50
515 | 0
516 |
517 |
518 | True
519 |
520 |
521 | prjMaterialActionButton.app\
522 | Default-568h@2x.png
523 | iPhone_Launch640x1136
524 | 1
525 |
526 |
527 | True
528 |
529 |
530 | prjMaterialActionButton.app\
531 | FM_SpotlightSearchIcon_29x29.png
532 | iPhone_Spotlight29
533 | 0
534 |
535 |
536 | True
537 |
538 |
539 | prjMaterialActionButton.app\
540 | FM_SettingIcon_29x29.png
541 | iPad_Setting29
542 | 0
543 |
544 |
545 | True
546 |
547 |
548 | prjMaterialActionButton.app\
549 | Default-Landscape.png
550 | iPad_Launch1024
551 | 1
552 |
553 |
554 | True
555 |
556 |
557 |
558 |
--------------------------------------------------------------------------------