From b984541d5f1855bd4bc6ec70cf887a38b06a055f Mon Sep 17 00:00:00 2001 From: alepmedeiros Date: Tue, 2 Mar 2021 13:50:22 -0300 Subject: [PATCH] alter repo --- .gitignore | 2 +- ProjectGroup1.groupproj | 72 ++ README.md | 11 +- Router4Delphi.dpk | 16 +- Router4Delphi.dproj | 272 ++++- Router4Delphi.dproj.local | 32 +- Router4Delphi.identcache | Bin 19215 -> 1025 bytes .../Demo/Router4DelphiDemo.View.Principal.fmx | 11 + .../Demo/Router4DelphiDemo.View.Principal.pas | 24 + Samples/FMX/Demo/Router4DelphiDemo.dpr | 19 + Samples/FMX/Demo/Router4DelphiDemo.dproj | 910 ++++++++++++++++ Samples/FMX/Demo/Router4DelphiDemo.res | Bin 0 -> 112160 bytes ...ter4DelphiDemo.View.Components.Sidebar.fmx | 60 ++ ...ter4DelphiDemo.View.Components.Sidebar.pas | 39 + .../Router4DelphiDemo.Views.Layouts.Main.fmx | 56 + .../Router4DelphiDemo.Views.Layouts.Main.pas | 61 ++ ...Router4DelphiDemo.View.Pages.Cadastros.fmx | 27 + ...Router4DelphiDemo.View.Pages.Cadastros.pas | 36 + .../Router4DelphiDemo.View.Pages.Index.fmx | 27 + .../Router4DelphiDemo.View.Pages.Index.pas | 47 + .../Router4DelphiDemo.View.Principal.fmx | 18 + .../Router4DelphiDemo.View.Principal.pas | 36 + .../Routers/Router4DelphiDemo.View.Router.pas | 45 + .../SimpleDemo.View.Components.Button01.fmx | 47 + .../SimpleDemo.View.Components.Button01.pas | 85 ++ .../SimpleDemo.View.Page.Cadastros.Sub.fmx | 27 + .../SimpleDemo.View.Page.Cadastros.Sub.pas | 45 + .../SimpleDemo.View.Page.Cadastros.fmx | 74 ++ .../SimpleDemo.View.Page.Cadastros.pas | 114 ++ .../SimpleDemo.View.Page.Principal.fmx | 47 + .../SimpleDemo.View.Page.Principal.pas | 69 ++ .../SimpleDemo/SimpleDemo.View.Principal.fmx | 71 ++ .../SimpleDemo/SimpleDemo.View.Principal.pas | 79 ++ Samples/FMX/SimpleDemo/SimpleDemo.dpr | 19 + Samples/FMX/SimpleDemo/SimpleDemo.dproj | 904 ++++++++++++++++ Samples/FMX/SimpleDemo/SimpleDemo.res | Bin 0 -> 112124 bytes Samples/VCL/Main.dfm | 41 + Samples/VCL/Main.pas | 57 + Samples/VCL/Router.dpr | 19 + Samples/VCL/Router.dproj | 986 ++++++++++++++++++ Samples/VCL/Router.res | Bin 0 -> 59508 bytes Samples/VCL/pages/View.Page.Customer.dfm | 26 + Samples/VCL/pages/View.Page.Customer.pas | 36 + Samples/VCL/pages/View.Page.Main.Cadastro.dfm | 62 ++ Samples/VCL/pages/View.Page.Main.Cadastro.pas | 93 ++ Samples/VCL/pages/View.Page.Product.dfm | 12 + Samples/VCL/pages/View.Page.Product.pas | 35 + Samples/VCL/pages/View.Page.Template.dfm | 65 ++ Samples/VCL/pages/View.Page.Template.pas | 68 ++ src/Router4D.Helper.pas | 37 + src/Router4D.History.pas | 199 +++- src/Router4D.Interfaces.pas | 38 +- src/Router4D.Link.pas | 69 +- src/Router4D.Props.pas | 2 + src/Router4D.Render.pas | 33 +- src/Router4D.Sidebar.pas | 118 +-- src/Router4D.Switch.pas | 2 + src/Router4D.Utils.pas | 2 + src/Router4D.inc | 1 + src/Router4D.pas | 6 + 60 files changed, 5219 insertions(+), 190 deletions(-) create mode 100644 ProjectGroup1.groupproj create mode 100644 Samples/FMX/Demo/Router4DelphiDemo.View.Principal.fmx create mode 100644 Samples/FMX/Demo/Router4DelphiDemo.View.Principal.pas create mode 100644 Samples/FMX/Demo/Router4DelphiDemo.dpr create mode 100644 Samples/FMX/Demo/Router4DelphiDemo.dproj create mode 100644 Samples/FMX/Demo/Router4DelphiDemo.res create mode 100644 Samples/FMX/Demo/Views/Components/Router4DelphiDemo.View.Components.Sidebar.fmx create mode 100644 Samples/FMX/Demo/Views/Components/Router4DelphiDemo.View.Components.Sidebar.pas create mode 100644 Samples/FMX/Demo/Views/Layouts/Router4DelphiDemo.Views.Layouts.Main.fmx create mode 100644 Samples/FMX/Demo/Views/Layouts/Router4DelphiDemo.Views.Layouts.Main.pas create mode 100644 Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.fmx create mode 100644 Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.pas create mode 100644 Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.fmx create mode 100644 Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.pas create mode 100644 Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.fmx create mode 100644 Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.pas create mode 100644 Samples/FMX/Demo/Views/Routers/Router4DelphiDemo.View.Router.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.fmx create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.fmx create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.fmx create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.fmx create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.fmx create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.pas create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.dpr create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.dproj create mode 100644 Samples/FMX/SimpleDemo/SimpleDemo.res create mode 100644 Samples/VCL/Main.dfm create mode 100644 Samples/VCL/Main.pas create mode 100644 Samples/VCL/Router.dpr create mode 100644 Samples/VCL/Router.dproj create mode 100644 Samples/VCL/Router.res create mode 100644 Samples/VCL/pages/View.Page.Customer.dfm create mode 100644 Samples/VCL/pages/View.Page.Customer.pas create mode 100644 Samples/VCL/pages/View.Page.Main.Cadastro.dfm create mode 100644 Samples/VCL/pages/View.Page.Main.Cadastro.pas create mode 100644 Samples/VCL/pages/View.Page.Product.dfm create mode 100644 Samples/VCL/pages/View.Page.Product.pas create mode 100644 Samples/VCL/pages/View.Page.Template.dfm create mode 100644 Samples/VCL/pages/View.Page.Template.pas create mode 100644 src/Router4D.Helper.pas create mode 100644 src/Router4D.inc diff --git a/.gitignore b/.gitignore index 9532800..acd27c1 100644 --- a/.gitignore +++ b/.gitignore @@ -66,4 +66,4 @@ __recovery/ *.stat # Boss dependency manager vendor folder https://github.com/HashLoad/boss -modules/ +modules/ \ No newline at end of file diff --git a/ProjectGroup1.groupproj b/ProjectGroup1.groupproj new file mode 100644 index 0000000..ef74e0c --- /dev/null +++ b/ProjectGroup1.groupproj @@ -0,0 +1,72 @@ + + + {7038A3EC-BD85-4AA8-B65E-783D12D02F7F} + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 995e560..97ee0fc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Router4Delphi -Framework para Criação de Rotas de Telas para FMX +Framework para Criação de Rotas de Telas para FMX e VCL -O Router4Delphi tem o objetivo de facilitar a chamada de telas e embed de Layouts em aplicações FMX, reduzindo o acoplamento das telas de dando mais dinâmismo e práticidade na construção de interfaces ricas em Delphi +O Router4Delphi tem o objetivo de facilitar a chamada de telas e embed de Layouts em aplicações FMX, e Panels em aplicações VCL, reduzindo o acoplamento das telas de dando mais dinâmismo e práticidade na construção de interfaces ricas em Delphi ## Instalação @@ -13,14 +13,16 @@ Para utilizar o Router4Delphi para criar suas rotas, você deve realizar a uses ## Criação de uma Tela para Roteamento -Para que o sistema de Rotas funcione você deve criar um novo formulário FMX e Implementar a Interface iRouter4DComponent ela pertence a unit Router4D.Interfaces portanto a mesma deve ser incluida nas suas Units. +Para que o sistema de Rotas funcione você deve criar um novo formulário FMX ou VCL e Implementar a Interface iRouter4DComponent ela pertence a unit Router4D.Interfaces portanto a mesma deve ser incluida nas suas Units. -Toda a construção das telas baseadas em rotas utilizar TLayouts para embedar as chamadas das telas, dessa forma é preciso que sua nova tela tenha um TLayout principal e todos os demais componentes devem ser incluídos dentro desse layout. +Toda a construção das telas baseadas em rotas utilizar TLayouts e TPanels para embedar as chamadas das telas, dessa forma é preciso que sua nova tela tenha um TLayout ou um TPanel principal e todos os demais componentes devem ser incluídos dentro desse layout ou panel. A Implementação da Interface iRouter4DComponent requer a declaração de dois métodos ( Render e UnRender ), o Render é chamado sempre que uma rota aciona a tela, e o UnRender sempre que ela saí de exibição. Abaixo o Código de uma tela simples implementando a interface iRouter4DComponent e pronta para ser utilizada. +#### Exemplo em FMX + Crie um Novo Formulario na sua Aplicação, inclua nele um Layout alinhado AlClient e implemente os métodos como abaixo. ```delphi @@ -357,4 +359,3 @@ TRouter4D .ItemHeigth(60) .RenderToListBox; ``` - diff --git a/Router4Delphi.dpk b/Router4Delphi.dpk index 224658b..066db10 100644 --- a/Router4Delphi.dpk +++ b/Router4Delphi.dpk @@ -36,22 +36,24 @@ requires DbxCommonDriver, FireDAC, FireDACCommonDriver, - FireDACCommon; + FireDACCommon, + vcl; contains + DuckListU in 'src\DuckListU.pas', + EventBus.Core in 'src\EventBus.Core.pas', + EventBus.Subscribers in 'src\EventBus.Subscribers.pas', + ObjectsMappers in 'src\ObjectsMappers.pas', Router4D.History in 'src\Router4D.History.pas', Router4D.Interfaces in 'src\Router4D.Interfaces.pas', Router4D.Link in 'src\Router4D.Link.pas', Router4D in 'src\Router4D.pas', Router4D.Props in 'src\Router4D.Props.pas', + Router4D.Render in 'src\Router4D.Render.pas', Router4D.Switch in 'src\Router4D.Switch.pas', Router4D.Utils in 'src\Router4D.Utils.pas', - DuckListU in 'src\DuckListU.pas', - EventBus.Core in 'src\EventBus.Core.pas', - EventBus.Subscribers in 'src\EventBus.Subscribers.pas', - ObjectsMappers in 'src\ObjectsMappers.pas', RTTIUtilsU in 'src\RTTIUtilsU.pas', - Router4D.Sidebar in 'src\Router4D.Sidebar.pas', - Router4D.Render in 'src\Router4D.Render.pas'; + Router4D.Helper in 'src\Router4D.Helper.pas', + Router4D.Sidebar in 'src\Router4D.Sidebar.pas'; end. diff --git a/Router4Delphi.dproj b/Router4Delphi.dproj index 46ce556..36a460f 100644 --- a/Router4Delphi.dproj +++ b/Router4Delphi.dproj @@ -1,8 +1,8 @@  - {3810FA8C-A44A-4F47-AEB3-80819D3485B2} + {AC59E0D2-C9EA-4482-B4D9-D663FB283EB2} Router4Delphi.dpk - 19.0 + 18.8 FMX True Debug @@ -103,20 +103,22 @@ + + + + + + - - - - + - Cfg_2 Base @@ -138,13 +140,6 @@ Router4Delphi.dpk - - False - False - False - True - False - @@ -161,7 +156,7 @@ true - + Router4Delphi.bpl true @@ -533,63 +528,267 @@ 0 - + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 @@ -614,7 +813,6 @@ - 1 @@ -715,6 +913,12 @@ + + False + False + True + False + 12 diff --git a/Router4Delphi.dproj.local b/Router4Delphi.dproj.local index 741add1..d576f03 100644 --- a/Router4Delphi.dproj.local +++ b/Router4Delphi.dproj.local @@ -1,32 +1,2 @@  - - - 2020/07/13 22:38:51.000.784,=rtl.dcp - 2020/07/13 22:38:58.000.612,C:\Users\thuli\Documents\Embarcadero\Studio\Projects\Router4Delphi.dproj=C:\Users\thuli\Documents\Embarcadero\Studio\Projects\Package1.dproj - 2020/07/13 22:39:07.000.751,D:\Projetos\Frameworks\Router4Delphi\Router4Delphi.dproj=C:\Users\thuli\Documents\Embarcadero\Studio\Projects\Router4Delphi.dproj - 2020/07/13 22:39:18.000.950,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.pas - 2020/07/13 22:39:18.000.846,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.History.pas - 2020/07/13 22:39:18.000.879,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Interfaces.pas - 2020/07/13 22:39:18.000.985,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Props.pas - 2020/07/13 22:39:18.000.922,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Link.pas - 2020/07/13 22:39:19.000.075,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Utils.pas - 2020/07/13 22:39:19.000.046,=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Switch.pas - 2020/07/13 22:39:42.000.878,=D:\Projetos\Frameworks\Router4Delphi\src\EventBus.Core.pas - 2020/07/13 22:39:42.000.911,=D:\Projetos\Frameworks\Router4Delphi\src\EventBus.Subscribers.pas - 2020/07/13 22:39:42.000.975,=D:\Projetos\Frameworks\Router4Delphi\src\ObjectsMappers.pas - 2020/07/13 22:39:42.000.838,=D:\Projetos\Frameworks\Router4Delphi\src\DuckListU.pas - 2020/07/13 22:39:43.000.018,=D:\Projetos\Frameworks\Router4Delphi\src\RTTIUtilsU.pas - 2020/07/13 22:39:54.000.821,=FireDAC.dcp - 2020/07/13 22:39:54.000.880,=FireDACCommonDriver.dcp - 2020/07/13 22:39:54.000.735,=dbrtl.dcp - 2020/07/13 22:39:54.000.681,=soaprtl.dcp - 2020/07/13 22:39:54.000.780,=DbxCommonDriver.dcp - 2020/07/13 22:39:54.000.598,=xmlrtl.dcp - 2020/07/13 22:39:54.000.644,=fmx.dcp - 2020/07/13 22:39:54.000.918,=FireDACCommon.dcp - 2020/07/14 20:23:48.000.027,=D:\Projetos\Frameworks\Router4Delphi\Unit1.pas - 2020/07/14 20:23:58.000.724,D:\Projetos\Frameworks\Router4Delphi\Unit1.pas=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Sidebar.pas - 2020/07/14 20:52:39.000.123,=D:\Projetos\Frameworks\Router4Delphi\Unit1.pas - 2020/07/14 20:52:54.000.533,D:\Projetos\Frameworks\Router4Delphi\Unit1.pas=D:\Projetos\Frameworks\Router4Delphi\src\Router4D.Render.pas - - + diff --git a/Router4Delphi.identcache b/Router4Delphi.identcache index 5dea59ecc3b69bf7e3bccb67dd8104c86bfc1dc3..1d66d653c204e1da5e99d1f148922f58cb220c88 100644 GIT binary patch literal 1025 zcmbu8$qK?S5Qh5(zDd9ZH}qmFC@4y+w_e(G#At0o7MHg-h~|)7rkG=3zRdS$rV~Zc zFrMan$uFR}T0Y?>YM!UuXpn;hYH?<{lGNRh4QsAM6v|e*Gj4}iSu98&GDks{cWCs& zD3X~{QOQb>$|vEB94Y1!d_+s5?7=iW`;ZyR=$AEFH#YNAK_L(tp+LLx0#vJQA#Az< zql;p=X1pKnp{f%@uN$WH(N6*=;2u9}RtExoR14|hu>O<>Jxp-*-^nK{>%rygPZPUX XA~0#$NyaKDi(p?`j%W%^6)xQyNOwUC literal 19215 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 + + {4B24F7C2-9744-436B-9B23-4088395571E2} + 19.0 + FMX + True + Debug + Win32 + 32787 + Application + Router4DelphiDemo.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + Router4DelphiDemo + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;IWBootstrapD104;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;Intraweb_15_D10_4;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;TBGWebCharts;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;IWBootstrap4D104;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + true + 1033 + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
ViewPrincipal
+ fmx +
+ +
MainLayout
+ fmx +
+ +
ComponentSideBar
+ fmx +
+ + +
PageIndex
+ fmx +
+ +
PageCadastros
+ fmx +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + Router4DelphiDemo.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + True + True + False + False + False + False + False + True + True + + + + + true + + + + + true + + + + + true + + + + + Router4DelphiDemo.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + +
diff --git a/Samples/FMX/Demo/Router4DelphiDemo.res b/Samples/FMX/Demo/Router4DelphiDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..40531bb73c0de6f884d5d552c9710c1caa4a1198 GIT binary patch literal 112160 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
  • 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.SetElement(Layout3); + + Layout2.RemoveObject(0); + Layout2.AddObject( + TComponentSideBar.Create(Self).Layout1 + ) +end; + +end. diff --git a/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.fmx b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.fmx new file mode 100644 index 0000000..2aae809 --- /dev/null +++ b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.fmx @@ -0,0 +1,27 @@ +object PageCadastros: TPageCadastros + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Client + StyledSettings = [Family, Style, FontColor] + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 30.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Cadastros' + end + end +end diff --git a/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.pas b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.pas new file mode 100644 index 0000000..c52d845 --- /dev/null +++ b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Cadastros.pas @@ -0,0 +1,36 @@ +unit Router4DelphiDemo.View.Pages.Cadastros; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, + Router4D.Interfaces; + +type + TPageCadastros = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Label1: TLabel; + private + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + end; + +var + PageCadastros: TPageCadastros; + +implementation + +{$R *.fmx} + +{ TForm2 } + +function TPageCadastros.Render: TFMXObject; +begin + Result := Layout1; +end; + +end. diff --git a/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.fmx b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.fmx new file mode 100644 index 0000000..736b05f --- /dev/null +++ b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.fmx @@ -0,0 +1,27 @@ +object PageIndex: TPageIndex + Left = 0 + Top = 0 + Caption = 'Form5' + ClientHeight = 609 + ClientWidth = 940 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Contents + Size.Width = 940.000000000000000000 + Size.Height = 609.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Client + StyledSettings = [Family, Style, FontColor] + Size.Width = 940.000000000000000000 + Size.Height = 609.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 30.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Home' + end + end +end diff --git a/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.pas b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.pas new file mode 100644 index 0000000..8ef997b --- /dev/null +++ b/Samples/FMX/Demo/Views/Pages/Router4DelphiDemo.View.Pages.Index.pas @@ -0,0 +1,47 @@ +unit Router4DelphiDemo.View.Pages.Index; + +interface + +uses + System.SysUtils, + System.Types, + System.UITypes, + System.Classes, + System.Variants, + FMX.Types, + FMX.Controls, + FMX.Forms, + FMX.Graphics, + FMX.Dialogs, + FMX.Layouts, + Router4D.Interfaces, FMX.Controls.Presentation, FMX.StdCtrls; + +type + TPageIndex = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Label1: TLabel; + private + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + end; + +var + PageIndex: TPageIndex; + +implementation + +uses + Router4D, + Router4DelphiDemo.Views.Layouts.Main; + +{$R *.fmx} + +function TPageIndex.Render: TFMXObject; +begin + Result := Layout1; + //TRouter4D.Render.GetElement(Layout1); +end; + +end. diff --git a/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.fmx b/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.fmx new file mode 100644 index 0000000..250be62 --- /dev/null +++ b/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.fmx @@ -0,0 +1,18 @@ +object ViewPrincipal: TViewPrincipal + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 612 + ClientWidth = 925 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Contents + Size.Width = 925.000000000000000000 + Size.Height = 612.000000000000000000 + Size.PlatformDefault = False + end +end diff --git a/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.pas b/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.pas new file mode 100644 index 0000000..31b1fb0 --- /dev/null +++ b/Samples/FMX/Demo/Views/Router4DelphiDemo.View.Principal.pas @@ -0,0 +1,36 @@ +unit Router4DelphiDemo.View.Principal; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts; + +type + TViewPrincipal = class(TForm) + Layout1: TLayout; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + ViewPrincipal: TViewPrincipal; + +implementation + +uses + Router4D, + Router4DelphiDemo.Views.Layouts.Main, + Router4DelphiDemo.View.Router; + +{$R *.fmx} + +procedure TViewPrincipal.FormCreate(Sender: TObject); +begin + TRouter4D.Render.SetElement(Layout1, Layout1); +end; + +end. diff --git a/Samples/FMX/Demo/Views/Routers/Router4DelphiDemo.View.Router.pas b/Samples/FMX/Demo/Views/Routers/Router4DelphiDemo.View.Router.pas new file mode 100644 index 0000000..873d9b8 --- /dev/null +++ b/Samples/FMX/Demo/Views/Routers/Router4DelphiDemo.View.Router.pas @@ -0,0 +1,45 @@ +unit Router4DelphiDemo.View.Router; + +interface + +type + TRouters = class + private + public + constructor Create; + destructor Destroy; override; + end; + +var + Routers : TRouters; + +implementation + +uses + Router4D, + Router4DelphiDemo.View.Pages.Index, + Router4DelphiDemo.Views.Layouts.Main, + Router4DelphiDemo.View.Pages.Cadastros; + +{ TRouters } + +constructor TRouters.Create; +begin + TRouter4D.Switch.Router('Home', TPageIndex); + TRouter4D.Switch.Router('Cadastros', TPageCadastros); + TRouter4D.Switch.Router('main', TMainLayout); +end; + +destructor TRouters.Destroy; +begin + + inherited; +end; + +initialization + Routers := TRouters.Create; + +finalization + Routers.Free; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.fmx b/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.fmx new file mode 100644 index 0000000..5e2f102 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.fmx @@ -0,0 +1,47 @@ +object ComponentButton01: TComponentButton01 + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + DesignerMasterStyle = 0 + object Layout1: TLayout + Position.X = 232.000000000000000000 + Position.Y = 120.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 81.000000000000000000 + Size.PlatformDefault = False + object Line1: TLine + Align = Bottom + LineType = Bottom + Position.Y = 80.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Thickness = 5.000000000000000000 + end + object Label1: TLabel + Align = Contents + StyledSettings = [Family, Style, FontColor] + Size.Width = 121.000000000000000000 + Size.Height = 81.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 20.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Button' + end + object SpeedButton1: TSpeedButton + Align = Contents + Opacity = 0.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 81.000000000000000000 + Size.PlatformDefault = False + Text = 'SpeedButton1' + OnClick = SpeedButton1Click + end + end +end diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.pas b/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.pas new file mode 100644 index 0000000..b216709 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Components.Button01.pas @@ -0,0 +1,85 @@ +unit SimpleDemo.View.Components.Button01; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.Layouts, + Router4D.Interfaces, + Router4D.Props; + +type + TComponentButton01 = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Line1: TLine; + Label1: TLabel; + SpeedButton1: TSpeedButton; + procedure FormCreate(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + procedure UnRender; + [Subscribe] + procedure Props ( aValue : TProps); + function createButton(aLabel : String) : TFMXObject; + end; + +var + ComponentButton01: TComponentButton01; + +implementation + +{$R *.fmx} + +{ TComponentButton01 } + +function TComponentButton01.createButton(aLabel: String): TFMXObject; +begin + Result := Layout1; + Label1.Text := aLabel; + Layout1.Align := TAlignLayout.Left; + Line1.Visible := False; + Self.TagString := aLabel; +end; + +procedure TComponentButton01.FormCreate(Sender: TObject); +begin + GlobalEventBus.RegisterSubscriber(Self); +end; + +procedure TComponentButton01.Props(aValue: TProps); +begin + Line1.Visible := False; + + if (aValue.PropString = Label1.Text) and + (aValue.Key = 'Button01') then + Line1.Visible := True; + + aValue.Free; +end; + +function TComponentButton01.Render: TFMXObject; +begin + Result := Layout1; +end; + +procedure TComponentButton01.SpeedButton1Click(Sender: TObject); +begin + Line1.Visible := True; + GlobalEventBus.Post( + TProps.Create + .PropString(Label1.Text) + .Key('Button01') + ); +end; + +procedure TComponentButton01.UnRender; +begin + // +end; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.fmx b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.fmx new file mode 100644 index 0000000..6183324 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.fmx @@ -0,0 +1,27 @@ +object SubCadastros: TSubCadastros + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Contents + StyledSettings = [Family, Style, FontColor] + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 30.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Sub-Cadastros' + end + end +end diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.pas b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.pas new file mode 100644 index 0000000..9d4e29a --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.Sub.pas @@ -0,0 +1,45 @@ +unit SimpleDemo.View.Page.Cadastros.Sub; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, + Router4D.Interfaces; + +type + TSubCadastros = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Label1: TLabel; + private + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + procedure UnRender; + end; + +var + SubCadastros: TSubCadastros; + +implementation + +uses + Router4D.History; + +{$R *.fmx} + +{ TSubCadastros } + +function TSubCadastros.Render: TFMXObject; +begin + Result := Layout1; +end; + +procedure TSubCadastros.UnRender; +begin + // +end; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.fmx b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.fmx new file mode 100644 index 0000000..ec1abf1 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.fmx @@ -0,0 +1,74 @@ +object PageCadastros: TPageCadastros + Left = 0 + Top = 0 + Caption = 'Form3' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + object Layout2: TLayout + Align = Left + Size.Width = 177.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + Visible = False + object Rectangle1: TRectangle + Align = Contents + Fill.Color = xFF36414A + Size.Width = 177.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object Layout3: TLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 399.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Contents + StyledSettings = [Family, Style, FontColor] + Size.Width = 640.000000000000000000 + Size.Height = 399.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 30.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Cadastros' + end + object Button1: TButton + Anchors = [] + Position.X = 243.682922363281300000 + Position.Y = 215.990631103515600000 + Size.Width = 145.000000000000000000 + Size.Height = 41.000000000000000000 + Size.PlatformDefault = False + Text = 'Voltar para Home' + OnClick = Button1Click + end + object Edit1: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Anchors = [] + Position.X = 243.682922363281300000 + Position.Y = 257.240631103515600000 + Size.Width = 145.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + end + end + object Layout4: TLayout + Align = Top + Size.Width = 640.000000000000000000 + Size.Height = 81.000000000000000000 + Size.PlatformDefault = False + end + end +end diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.pas b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.pas new file mode 100644 index 0000000..622f81f --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Cadastros.pas @@ -0,0 +1,114 @@ +unit SimpleDemo.View.Page.Cadastros; + +interface + +uses + System.SysUtils, + System.Types, + System.UITypes, + System.Classes, + System.Variants, + FMX.Types, + FMX.Controls, + FMX.Forms, + FMX.Graphics, + FMX.Dialogs, + FMX.Controls.Presentation, + FMX.StdCtrls, + FMX.Layouts, + Router4D.Interfaces, + Router4D.Props, FMX.Edit, FMX.Objects; + +type + TPageCadastros = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Label1: TLabel; + Button1: TButton; + Edit1: TEdit; + Layout2: TLayout; + Layout3: TLayout; + Rectangle1: TRectangle; + Layout4: TLayout; + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + procedure CreateMenuSuperior; + procedure CreateRouters; + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + procedure UnRender; + [Subscribe] + procedure Props ( aValue : TProps); + end; + +var + PageCadastros: TPageCadastros; + +implementation + +uses + Router4D, SimpleDemo.View.Page.Cadastros.Sub, SimpleDemo.View.Page.Principal, + SimpleDemo.View.Components.Button01; + +{$R *.fmx} + +{ TPageCadastros } + +procedure TPageCadastros.Button1Click(Sender: TObject); +begin + TRouter4D.Link.&To('Inicio'); +end; + +procedure TPageCadastros.FormCreate(Sender: TObject); +begin + CreateRouters; + CreateMenuSuperior; +end; + +procedure TPageCadastros.Props(aValue: TProps); +begin + if (aValue.PropString <> '') and (aValue.Key = 'TelaCadastro') then + Label1.Text := aValue.PropString; + + aValue.Free; +end; + +procedure TPageCadastros.CreateRouters; +begin + TRouter4D.Switch.Router('Clientes', TPagePrincipal, 'cadastros'); + TRouter4D.Switch.Router('Fornecedores', TSubCadastros, 'cadastros'); + TRouter4D.Switch.Router('Produtos', TSubCadastros, 'cadastros'); +end; + +procedure TPageCadastros.CreateMenuSuperior; +begin + Layout4.AddObject( + TComponentButton01.Create(Self) + .createButton('Clientes') + ); + + Layout4.AddObject( + TComponentButton01.Create(Self) + .createButton('Produtos') + ); + + Layout4.AddObject( + TComponentButton01.Create(Self) + .createButton('Fornecedores') + ); +end; + +function TPageCadastros.Render: TFMXObject; +begin + Label1.Text := 'Cadastros'; + Result := Layout1; +end; + +procedure TPageCadastros.UnRender; +begin + // +end; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.fmx b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.fmx new file mode 100644 index 0000000..fe00aa9 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.fmx @@ -0,0 +1,47 @@ +object PagePrincipal: TPagePrincipal + Left = 0 + Top = 0 + Caption = 'Form3' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Client + StyledSettings = [Family, Style, FontColor] + Size.Width = 640.000000000000000000 + Size.Height = 480.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 30.000000000000000000 + TextSettings.HorzAlign = Center + Text = 'Home' + end + object Button1: TButton + Anchors = [] + Position.X = 240.000000000000000000 + Position.Y = 264.000000000000000000 + Size.Width = 169.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + Text = 'Cadastros Simples' + OnClick = Button1Click + end + object Button2: TButton + Anchors = [] + Position.X = 240.000000000000000000 + Position.Y = 304.000000000000000000 + Size.Width = 169.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + Text = 'Cadastros com Props' + OnClick = Button2Click + end + end +end diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.pas b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.pas new file mode 100644 index 0000000..135f72a --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Page.Principal.pas @@ -0,0 +1,69 @@ +unit SimpleDemo.View.Page.Principal; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, + Router4D.Interfaces; + +type + TPagePrincipal = class(TForm, iRouter4DComponent) + Layout1: TLayout; + Label1: TLabel; + Button1: TButton; + Button2: TButton; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + function Render : TFMXObject; + procedure UnRender; + end; + +var + PagePrincipal: TPagePrincipal; + +implementation + +uses + Router4D, + Router4D.Props; + +{$R *.fmx} + +{ TPagePrincipal } + +procedure TPagePrincipal.Button1Click(Sender: TObject); +begin + TRouter4D.Link.&To('Cadastros'); +end; + +procedure TPagePrincipal.Button2Click(Sender: TObject); +begin + TRouter4D.Link + .&To( + 'Cadastros', + TProps + .Create + .PropString( + 'Olá Router4D, Seu Cadastro Recebeu as Props' + ) + .Key('TelaCadastro') + ); +end; + +function TPagePrincipal.Render: TFMXObject; +begin + Result := Layout1; +end; + +procedure TPagePrincipal.UnRender; +begin + // +end; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.fmx b/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.fmx new file mode 100644 index 0000000..266c1a1 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.fmx @@ -0,0 +1,71 @@ +object Form2: TForm2 + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 586 + ClientWidth = 875 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnShow = FormShow + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Client + Size.Width = 875.000000000000000000 + Size.Height = 586.000000000000000000 + Size.PlatformDefault = False + object Layout2: TLayout + Align = Top + Size.Width = 875.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Rectangle1: TRectangle + Align = Contents + Fill.Color = xFF36414A + Size.Width = 875.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object Label1: TLabel + Align = Contents + StyledSettings = [Family, Style] + Margins.Right = 10.000000000000000000 + Size.Width = 865.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 15.000000000000000000 + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Trailing + Text = 'Router4D - SimpleDemo' + end + end + object Layout4: TLayout + Align = Client + Size.Width = 705.000000000000000000 + Size.Height = 536.000000000000000000 + Size.PlatformDefault = False + end + object Layout3: TLayout + Align = Left + Position.Y = 50.000000000000000000 + Size.Width = 170.000000000000000000 + Size.Height = 536.000000000000000000 + Size.PlatformDefault = False + object Rectangle2: TRectangle + Align = Contents + Fill.Color = xFF2D2F32 + Size.Width = 170.000000000000000000 + Size.Height = 536.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object Layout5: TLayout + Align = Client + Size.Width = 170.000000000000000000 + Size.Height = 536.000000000000000000 + Size.PlatformDefault = False + end + end + end +end diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.pas b/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.pas new file mode 100644 index 0000000..8915fd7 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.View.Principal.pas @@ -0,0 +1,79 @@ +unit SimpleDemo.View.Principal; + +interface + +uses + System.SysUtils, + System.Types, + System.UITypes, + System.Classes, + System.Variants, + FMX.Types, + FMX.Controls, + FMX.Forms, + FMX.Graphics, + FMX.Dialogs, + FMX.Controls.Presentation, + FMX.StdCtrls, + FMX.ListBox, + FMX.Layouts, + FMX.Objects, FMX.Edit, FMX.SearchBox, FMX.MultiView; + +type + TForm2 = class(TForm) + Layout1: TLayout; + Layout2: TLayout; + Layout3: TLayout; + Layout4: TLayout; + Rectangle1: TRectangle; + Rectangle2: TRectangle; + Label1: TLabel; + Layout5: TLayout; + procedure FormShow(Sender: TObject); + private + procedure RegisterRouters; + procedure createSideBar; + { Private declarations } + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +uses + Router4D, + SimpleDemo.View.Page.Cadastros, + SimpleDemo.View.Page.Principal; + +{$R *.fmx} + +procedure TForm2.FormShow(Sender: TObject); +begin + RegisterRouters; + TRouter4D.Render.SetElement(Layout4, Layout1); +end; + +procedure TForm2.RegisterRouters; +begin + TRouter4D.Switch.Router('Inicio', TPagePrincipal); + TRouter4D.Switch.Router('Cadastros', TPageCadastros); + TRouter4D.Switch.Router('Configuracoes', TPageCadastros); + createSideBar; +end; + +procedure TForm2.createSideBar; +begin + TRouter4D + .SideBar + .MainContainer(Layout5) + .LinkContainer(Layout4) + .FontSize(15) + .FontColor(4294967295) + .ItemHeigth(60) + .RenderToListBox; +end; + +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.dpr b/Samples/FMX/SimpleDemo/SimpleDemo.dpr new file mode 100644 index 0000000..a78e4b5 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.dpr @@ -0,0 +1,19 @@ +program SimpleDemo; + +uses + System.StartUpCopy, + FMX.Forms, + SimpleDemo.View.Principal in 'SimpleDemo.View.Principal.pas' {Form2}, + SimpleDemo.View.Page.Principal in 'SimpleDemo.View.Page.Principal.pas' {PagePrincipal}, + SimpleDemo.View.Page.Cadastros in 'SimpleDemo.View.Page.Cadastros.pas' {PageCadastros}, + SimpleDemo.View.Page.Cadastros.Sub in 'SimpleDemo.View.Page.Cadastros.Sub.pas' {SubCadastros}, + SimpleDemo.View.Components.Button01 in 'SimpleDemo.View.Components.Button01.pas' {ComponentButton01}; + +{$R *.res} + +begin + ReportMemoryLeaksOnShutdown := True; + Application.Initialize; + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.dproj b/Samples/FMX/SimpleDemo/SimpleDemo.dproj new file mode 100644 index 0000000..3ff4b34 --- /dev/null +++ b/Samples/FMX/SimpleDemo/SimpleDemo.dproj @@ -0,0 +1,904 @@ + + + {3AD0DA23-7F3C-401B-92FF-B74A312EBB37} + 19.0 + FMX + True + Debug + Win32 + 32787 + Application + SimpleDemo.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + SimpleDemo + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;IWBootstrapD104;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;Intraweb_15_D10_4;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;TBGWebCharts;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;IWBootstrap4D104;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + true + 1033 + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
    Form2
    + fmx +
    + +
    PagePrincipal
    + fmx +
    + +
    PageCadastros
    + fmx +
    + +
    SubCadastros
    + fmx +
    + +
    ComponentButton01
    + fmx +
    + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
    + + Delphi.Personality.12 + Application + + + + SimpleDemo.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + True + True + True + True + + + + + true + + + + + true + + + + + true + + + + + SimpleDemo.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + +
    diff --git a/Samples/FMX/SimpleDemo/SimpleDemo.res b/Samples/FMX/SimpleDemo/SimpleDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..c0b549e7323fc252088a965a7d52f76e40579455 GIT binary patch literal 112124 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 D!FW0x literal 0 HcmV?d00001 diff --git a/Samples/VCL/Main.dfm b/Samples/VCL/Main.dfm new file mode 100644 index 0000000..780d095 --- /dev/null +++ b/Samples/VCL/Main.dfm @@ -0,0 +1,41 @@ +object fMain: TfMain + Left = 0 + Top = 0 + Caption = 'fMain' + ClientHeight = 678 + ClientWidth = 1178 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object pnlBackground: TPanel + Left = 0 + Top = 0 + Width = 1178 + Height = 678 + Align = alClient + TabOrder = 0 + object pnlMain: TPanel + Left = 1 + Top = 1 + Width = 192 + Height = 676 + Align = alLeft + TabOrder = 0 + end + object pnlEmbed: TPanel + Left = 193 + Top = 1 + Width = 984 + Height = 676 + Align = alClient + TabOrder = 1 + end + end +end diff --git a/Samples/VCL/Main.pas b/Samples/VCL/Main.pas new file mode 100644 index 0000000..aa3855a --- /dev/null +++ b/Samples/VCL/Main.pas @@ -0,0 +1,57 @@ +unit Main; + +interface + +uses + Winapi.Windows, + Winapi.Messages, + System.SysUtils, + System.Variants, + System.Classes, + Vcl.Graphics, + Vcl.Controls, + Vcl.Forms, + Vcl.Dialogs, + Vcl.ExtCtrls, + Router4D, + View.Page.Main.Cadastro, + Vcl.StdCtrls; + +type + TfMain = class(TForm) + pnlBackground: TPanel; + pnlMain: TPanel; + pnlEmbed: TPanel; + procedure FormCreate(Sender: TObject); + private + procedure RegisterRouters; + public + { Public declarations } + end; + +var + fMain: TfMain; + +implementation + +{$R *.dfm} + +uses + View.Page.Customer, + View.Page.Product; + +procedure TfMain.FormCreate(Sender: TObject); +begin + RegisterRouters; + TRouter4D.Render.SetElement(pnlEmbed, pnlBackground); +end; + +procedure TfMain.RegisterRouters; +begin + TRouter4D.Switch.Router('Start', TfViewPageMainCadastro); + TRouter4D.Switch.Router('Product', TfViewPageProduct); + TRouter4D.Switch.Router('Customer', TfViewPageCustomer); +end; + +end. + diff --git a/Samples/VCL/Router.dpr b/Samples/VCL/Router.dpr new file mode 100644 index 0000000..b005de3 --- /dev/null +++ b/Samples/VCL/Router.dpr @@ -0,0 +1,19 @@ +program Router; + +uses + Vcl.Forms, + Main in 'Main.pas' {fMain}, + View.Page.Main.Cadastro in 'pages\View.Page.Main.Cadastro.pas' {fViewPageMainCadastro}, + View.Page.Template in 'pages\View.Page.Template.pas' {fViewPageTemplate}, + View.Page.Product in 'pages\View.Page.Product.pas' {fViewPageProduct}, + View.Page.Customer in 'pages\View.Page.Customer.pas' {fViewPageCustomer}; + +{$R *.res} + +begin + ReportMemoryLeaksOnShutdown := True; + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TfMain, fMain); + Application.Run; +end. diff --git a/Samples/VCL/Router.dproj b/Samples/VCL/Router.dproj new file mode 100644 index 0000000..fbe6103 --- /dev/null +++ b/Samples/VCL/Router.dproj @@ -0,0 +1,986 @@ + + + {9FEAC6BC-4355-42BF-B09D-4FDF02CFA779} + 18.8 + VCL + Router.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + Router + + + DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;StyleControls_dxe103Rio;vclFireDAC;IndySystem;AqEdit;AqButton;ZComponent;ZCore;tethering;svnui;AqEnterAsTab;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;ZDbc;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;ZParseSql;bindcomp;appanalytics;dsnap;ZPlain;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;TeeUI;Weather;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;AqComboBox;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + + + DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;StyleControls_dxe103Rio;vclFireDAC;IndySystem;ZComponent;ZCore;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;ZDbc;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;ZParseSql;bindcomp;appanalytics;dsnap;ZPlain;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + + MainSource + + +

    fMain
    + dfm + + +
    fViewPageMainCadastro
    + dfm +
    + +
    fViewPageTemplate
    + dfm +
    + +
    fViewPageProduct
    + dfm +
    + +
    fViewPageCustomer
    + dfm +
    + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + Delphi.Personality.12 + Application + + + + Router.dpr + + + + + + Router.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + True + False + + + 12 + + + + + diff --git a/Samples/VCL/Router.res b/Samples/VCL/Router.res new file mode 100644 index 0000000000000000000000000000000000000000..750406aeb34d92b04c17e369106563c15fa70d85 GIT binary patch literal 59508 zcmce81wd6v`}ZXTL{yBm6;u#JNfEIC5fm^$5ClmHQKVE#X(>@kxjJC*Lb z_nvR&vR7GOch`O2{eQDN%(;`liSx`;M-&Q$q6QH`HX?ZZLs%fdms5f|;0FjSsIA2K zN(%(+;86l4hLQ(=`B9?aNf0HBx(j{_g17ANCh9Rt3shvm)nP%g15_75WCs`^A`TQOXp67U z2im+uDdGCj2K_w+Z8dSjh=M0wkfQ?1U|>O!ZE7ch%YV74J}Zg|)WJs-N(i+d)E5D* zwE(^ss7ELbfQ}E>mlDX+0CiQsUqw*z0w8#VQpWYE1@eC!n+b<`qc3HEN(tb)i|bJZ z*WZuz*>PC^SpP@FKjMYR2*6H3H2Br|zM3c$4Q?my<7T1>)=VAL+`L{}iHC@vfX$)? z{U8X@w=+RW`Tb1LgEC4GVI2b8U-0k?K}_^MrM|A7nwGkHtb&Y8g@TN11$d5mp{@Od zm-qV4zv{xq%38(O%WKN*!w1Cftuyjm;{)Dd=YC)E33_YxVgA02Kf3S4)013 z*3<3Z+Tq*dQ&?vAwg4L$7KYfrx08l_ynAQ2BRMf~GA61LVfl-;oBN25slsMwWR8i8 zOOPkT#jBJS6(jNw+YrsCBLL$h;^H`gsK^f?*Dm!Su1*sO``Jz$CNsk?h@9jgh%MO0 z`g$ZhG+ZVjE-pMPy$E3hbBy~mi)5wGBX&09NKf}Fu5EhiJQDhG8c}~djEoGgBNy4a z5JuWIBtNGVn;0MO9}yN_;^UEth4^6mx0YXVW64MiAT!fwU5CkY_5xh=g#} zdTBuck{F*L8XupywV}3lBr&!UdyB6FhaKYovv~VPCpJF199>gc*<)yEOajk9LtXv- z?v4)RqklD4>~<$2db|IpQS43^7Svg5X>7ujmzD{@w)oJ|)~-J^Fn}#CYR76mt-;>C z*@@h}+4pNPpi5wyd-tQ(iWJ z8R#Fy%+Ab!{U7dXYiYf?xy_Hy4fPEq)6>πGL{YinyMtE;QY3kwS_<6p<`W@qO> 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 literal 0 HcmV?d00001 diff --git a/Samples/VCL/pages/View.Page.Customer.dfm b/Samples/VCL/pages/View.Page.Customer.dfm new file mode 100644 index 0000000..d56040c --- /dev/null +++ b/Samples/VCL/pages/View.Page.Customer.dfm @@ -0,0 +1,26 @@ +inherited fViewPageCustomer: TfViewPageCustomer + Caption = 'fViewPageCustomer' + PixelsPerInch = 96 + TextHeight = 13 + inherited pnlBackground: TPanel + ExplicitWidth = 715 + ExplicitHeight = 463 + inherited lblTitle: TLabel + Width = 242 + Caption = 'Cadastro de Clientes' + ExplicitWidth = 242 + end + inherited btnBack: TButton + TabOrder = 1 + ExplicitTop = 415 + end + object edt1: TEdit + Left = 16 + Top = 120 + Width = 121 + Height = 21 + TabOrder = 0 + Text = 'edt1' + end + end +end diff --git a/Samples/VCL/pages/View.Page.Customer.pas b/Samples/VCL/pages/View.Page.Customer.pas new file mode 100644 index 0000000..a582019 --- /dev/null +++ b/Samples/VCL/pages/View.Page.Customer.pas @@ -0,0 +1,36 @@ +unit View.Page.Customer; + +interface + +uses + Winapi.Windows, + Winapi.Messages, + System.SysUtils, + System.Variants, + System.Classes, + Vcl.Graphics, + Vcl.Controls, + Vcl.Forms, + Vcl.Dialogs, + View.Page.Template, + Vcl.ExtCtrls, + Vcl.StdCtrls; + +type + TfViewPageCustomer = class(TfViewPageTemplate) + edt1: TEdit; + private + { Private declarations } + public + { Public declarations } + end; + +var + fViewPageCustomer: TfViewPageCustomer; + +implementation + +{$R *.dfm} + +end. + diff --git a/Samples/VCL/pages/View.Page.Main.Cadastro.dfm b/Samples/VCL/pages/View.Page.Main.Cadastro.dfm new file mode 100644 index 0000000..9cb10b4 --- /dev/null +++ b/Samples/VCL/pages/View.Page.Main.Cadastro.dfm @@ -0,0 +1,62 @@ +object fViewPageMainCadastro: TfViewPageMainCadastro + Left = 0 + Top = 0 + Align = alClient + BorderStyle = bsNone + Caption = 'fViewPageMainCadastro' + ClientHeight = 484 + ClientWidth = 799 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object pnlAll: TPanel + Left = 0 + Top = 0 + Width = 799 + Height = 484 + Align = alClient + TabOrder = 0 + object btnProduct: TButton + Left = 24 + Top = 32 + Width = 153 + Height = 25 + Caption = 'Product' + TabOrder = 0 + OnClick = btnProductClick + end + object btnProductProp: TButton + Left = 24 + Top = 63 + Width = 153 + Height = 25 + Caption = 'Product With Prop' + TabOrder = 1 + OnClick = btnProductPropClick + end + object btnCustomer: TButton + Left = 24 + Top = 104 + Width = 153 + Height = 25 + Caption = 'Customer' + TabOrder = 2 + OnClick = btnCustomerClick + end + object btnCustomerWithProps: TButton + Left = 24 + Top = 135 + Width = 153 + Height = 25 + Caption = 'Customer With Prop' + TabOrder = 3 + OnClick = btnCustomerWithPropsClick + end + end +end diff --git a/Samples/VCL/pages/View.Page.Main.Cadastro.pas b/Samples/VCL/pages/View.Page.Main.Cadastro.pas new file mode 100644 index 0000000..c399916 --- /dev/null +++ b/Samples/VCL/pages/View.Page.Main.Cadastro.pas @@ -0,0 +1,93 @@ +unit View.Page.Main.Cadastro; + +interface + +uses + Winapi.Windows, + Winapi.Messages, + System.SysUtils, + System.Variants, + System.Classes, + Vcl.Graphics, + Vcl.Controls, + Vcl.Forms, + Vcl.Dialogs, + Vcl.ExtCtrls, + Router4D.Interfaces, + Vcl.StdCtrls, Router4D, Router4D.Props; + +type + TfViewPageMainCadastro = class(TForm, iRouter4DComponent) + pnlAll: TPanel; + btnProduct: TButton; + btnProductProp: TButton; + btnCustomer: TButton; + btnCustomerWithProps: TButton; + procedure btnProductClick(Sender: TObject); + procedure btnProductPropClick(Sender: TObject); + procedure btnCustomerClick(Sender: TObject); + procedure btnCustomerWithPropsClick(Sender: TObject); + private + function Render: TForm; + procedure UnRender; + public + { Public declarations } + end; + +var + fViewPageMainCadastro: TfViewPageMainCadastro; + +implementation + +{$R *.dfm} + +procedure TfViewPageMainCadastro.btnCustomerClick(Sender: TObject); +begin + TRouter4D.Link.&To('Customer'); +end; + +procedure TfViewPageMainCadastro.btnCustomerWithPropsClick(Sender: TObject); +begin + TRouter4D.Link + .&To( + 'Customer', + TProps + .Create + .PropString( + 'Olá Customer, Seu Cadastro Recebeu as Props' + ) + .Key('TelaCadastro') + ); +end; + +procedure TfViewPageMainCadastro.btnProductClick(Sender: TObject); +begin + TRouter4D.Link.&To('Product'); +end; + +procedure TfViewPageMainCadastro.btnProductPropClick(Sender: TObject); +begin + TRouter4D.Link + .&To( + 'Product', + TProps + .Create + .PropString( + 'Olá Product, Seu Cadastro Recebeu as Props' + ) + .Key('TelaCadastro') + ); +end; + +function TfViewPageMainCadastro.Render: TForm; +begin + Result := Self; +end; + +procedure TfViewPageMainCadastro.UnRender; +begin + +end; + +end. + diff --git a/Samples/VCL/pages/View.Page.Product.dfm b/Samples/VCL/pages/View.Page.Product.dfm new file mode 100644 index 0000000..a1d1eef --- /dev/null +++ b/Samples/VCL/pages/View.Page.Product.dfm @@ -0,0 +1,12 @@ +inherited fViewPageProduct: TfViewPageProduct + Caption = 'fViewPageProduct' + PixelsPerInch = 96 + TextHeight = 13 + inherited pnlBackground: TPanel + ExplicitWidth = 715 + ExplicitHeight = 463 + inherited btnBack: TButton + ExplicitTop = 415 + end + end +end diff --git a/Samples/VCL/pages/View.Page.Product.pas b/Samples/VCL/pages/View.Page.Product.pas new file mode 100644 index 0000000..6a021b0 --- /dev/null +++ b/Samples/VCL/pages/View.Page.Product.pas @@ -0,0 +1,35 @@ +unit View.Page.Product; + +interface + +uses + Winapi.Windows, + Winapi.Messages, + System.SysUtils, + System.Variants, + System.Classes, + Vcl.Graphics, + Vcl.Controls, + Vcl.Forms, + Vcl.Dialogs, + View.Page.Template, + Vcl.ExtCtrls, + Vcl.StdCtrls; + +type + TfViewPageProduct = class(TfViewPageTemplate) + private + { Private declarations } + public + { Public declarations } + end; + +var + fViewPageProduct: TfViewPageProduct; + +implementation + +{$R *.dfm} + +end. + diff --git a/Samples/VCL/pages/View.Page.Template.dfm b/Samples/VCL/pages/View.Page.Template.dfm new file mode 100644 index 0000000..27d2fd0 --- /dev/null +++ b/Samples/VCL/pages/View.Page.Template.dfm @@ -0,0 +1,65 @@ +object fViewPageTemplate: TfViewPageTemplate + Left = 0 + Top = 0 + Align = alClient + BorderStyle = bsNone + Caption = 'fViewPageTemplate' + ClientHeight = 463 + ClientWidth = 715 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object pnlBackground: TPanel + Left = 0 + Top = 0 + Width = 715 + Height = 463 + Align = alClient + TabOrder = 0 + DesignSize = ( + 715 + 463) + object lblTitle: TLabel + Left = 16 + Top = 24 + Width = 142 + Height = 33 + Caption = 'Cadastro de' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object lblSubtitle: TLabel + Left = 16 + Top = 67 + Width = 70 + Height = 19 + Caption = 'lblSubtitle' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object btnBack: TButton + Left = 16 + Top = 415 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Voltar' + TabOrder = 0 + OnClick = btnBackClick + end + end +end diff --git a/Samples/VCL/pages/View.Page.Template.pas b/Samples/VCL/pages/View.Page.Template.pas new file mode 100644 index 0000000..711a3cf --- /dev/null +++ b/Samples/VCL/pages/View.Page.Template.pas @@ -0,0 +1,68 @@ +unit View.Page.Template; + +interface + +uses + Winapi.Windows, + Winapi.Messages, + System.SysUtils, + System.Variants, + System.Classes, + Vcl.Graphics, + Vcl.Controls, + Vcl.Forms, + Vcl.Dialogs, + Router4D.Interfaces, + Vcl.ExtCtrls, + Vcl.StdCtrls, + Router4D.Props, + Router4D; + +type + TfViewPageTemplate = class(TForm, IRouter4DComponent) + pnlBackground: TPanel; + btnBack: TButton; + lblTitle: TLabel; + lblSubtitle: TLabel; + procedure btnBackClick(Sender: TObject); + private + function Render: TForm; + procedure UnRender; + public + [Subscribe] + procedure Props(AValue: TProps); + end; + +var + fViewPageTemplate: TfViewPageTemplate; + +implementation + +{$R *.dfm} + +{ TfViewPageTemplate } + +procedure TfViewPageTemplate.btnBackClick(Sender: TObject); +begin + TRouter4D.Link.&To('Start'); +end; + +procedure TfViewPageTemplate.Props(AValue: TProps); +begin + lblSubtitle.Caption := AValue.PropString; + + AValue.Free; +end; + +function TfViewPageTemplate.Render: TForm; +begin + Result := Self; +end; + +procedure TfViewPageTemplate.UnRender; +begin + +end; + +end. + diff --git a/src/Router4D.Helper.pas b/src/Router4D.Helper.pas new file mode 100644 index 0000000..11a96b7 --- /dev/null +++ b/src/Router4D.Helper.pas @@ -0,0 +1,37 @@ +unit Router4D.Helper; + +interface + +uses + System.Classes, + Vcl.ExtCtrls, + Vcl.Forms, + Vcl.Controls; + +type + TRouter4DHelper = class helper for TPanel + public + procedure RemoveObject; overload; + procedure AddObject(AValue: TForm); + end; + +implementation + +procedure TRouter4DHelper.AddObject(AValue: TForm); +begin + AValue.Parent := Self; + AValue.Show; +end; + +procedure TRouter4DHelper.RemoveObject; +var + lIndex: Integer; +begin + for lIndex := Self.ControlCount - 1 downto 0 do + begin + if (Self.Controls[lIndex] is TForm) then + (Self.Controls[lIndex] as TForm).Close; + end; +end; + +end. diff --git a/src/Router4D.History.pas b/src/Router4D.History.pas index 044c648..1dc718e 100644 --- a/src/Router4D.History.pas +++ b/src/Router4D.History.pas @@ -1,14 +1,21 @@ unit Router4D.History; +{$I Router4D.inc} + interface uses Classes, SysUtils, + {$IFDEF HAS_FMX} FMX.Forms, + FMX.Types, + {$ELSE} + Vcl.Forms, + Vcl.ExtCtrls, + {$ENDIF} System.Generics.Collections, Router4D.Interfaces, - FMX.Types, Router4D.Props; type @@ -22,29 +29,50 @@ type TRouter4DHistory = class private FListCache : TObjectDictionary; + {$IFDEF HAS_FMX} FListCacheContainer : TObjectDictionary; - FListCache2 : TDictionary; FMainRouter : TFMXObject; FIndexRouter : TFMXObject; + {$ELSE} + FListCacheContainer : TObjectDictionary; + FMainRouter : TPanel; + FIndexRouter : TPanel; + {$ENDIF} + FListCache2 : TDictionary; FInstanteObject : iRouter4DComponent; + FListCacheOrder : TList; + FIndexCache : Integer; procedure CreateInstancePersistent( aPath : String); + procedure CacheKeyNotify(Sender: TObject; const Key: string; Action: TCollectionNotification); public constructor Create; destructor Destroy; override; + {$IFDEF HAS_FMX} function MainRouter ( aValue : TFMXObject ) : TRouter4DHistory; overload; function MainRouter : TFMXObject; overload; function IndexRouter ( aValue : TFMXObject ) : TRouter4DHistory; overload; function IndexRouter : TFMXObject; overload; + function AddHistoryConteiner ( aKey : String; aObject : TFMXObject) : TRouter4DHistory; overload; + function GetHistoryContainer ( aKey : String ) : TFMXObject; + {$ELSE} + function MainRouter ( aValue : TPanel ) : TRouter4DHistory; overload; + function MainRouter : TPanel; overload; + function IndexRouter ( aValue : TPanel ) : TRouter4DHistory; overload; + function IndexRouter : TPanel; overload; + function AddHistoryConteiner ( aKey : String; aObject : TPanel) : TRouter4DHistory; overload; + function GetHistoryContainer ( aKey : String ) : TPanel; + {$ENDIF} function AddHistory ( aKey : String; aObject : TObject ) : iRouter4DComponent; overload; function AddHistory ( aKey : String; aObject : TPersistentClass ) : iRouter4DComponent; overload; function AddHistory ( aKey : String; aObject : TPersistentClass; aSBKey : String; isVisible : Boolean ) : iRouter4DComponent; overload; - function AddHistoryConteiner ( aKey : String; aObject : TFMXObject) : TRouter4DHistory; overload; - function GetHistoryContainer ( aKey : String ) : TFMXObject; function RemoveHistory ( aKey : String ) : TRouter4DHistory; function GetHistory ( aKey : String ) : iRouter4DComponent; function RoutersList : TDictionary; function RoutersListPersistent : TDictionary; function InstanteObject : iRouter4DComponent; + function GoBack : String; + function BreadCrumb(aDelimiter: char = '/') : String; + function IndexCache : Integer; end; var @@ -54,6 +82,111 @@ implementation { TRouter4DHistory } +{$IFDEF HAS_FMX} +function TRouter4DHistory.MainRouter(aValue: TFMXObject): TRouter4DHistory; +begin + Result := Self; + FMainRouter := aValue; +end; + +function TRouter4DHistory.MainRouter: TFMXObject; +begin + Result := FMainRouter; +end; + +function TRouter4DHistory.IndexRouter(aValue: TFMXObject): TRouter4DHistory; +begin + Result := Self; + FIndexRouter := aValue; +end; + +function TRouter4DHistory.IndexRouter: TFMXObject; +begin + Result := FIndexRouter; +end; + +function TRouter4DHistory.AddHistoryConteiner( aKey : String; aObject : TFMXObject) : TRouter4DHistory; +var + auxObject : TFMXObject; +begin + Result := Self; + if not FListCacheContainer.TryGetValue(aKey, auxObject) then + FListCacheContainer.TryAdd(aKey, aObject); +end; + +function TRouter4DHistory.GetHistoryContainer(aKey: String): TFMXObject; +begin + FListCacheContainer.TryGetValue(aKey, Result); +end; +{$ELSE} +function TRouter4DHistory.MainRouter(aValue: TPanel): TRouter4DHistory; +begin + Result := Self; + FMainRouter := aValue; +end; + +function TRouter4DHistory.MainRouter: TPanel; +begin + Result := FMainRouter; +end; + +function TRouter4DHistory.IndexRouter(aValue: TPanel): TRouter4DHistory; +begin + Result := Self; + FIndexRouter := aValue; +end; + +function TRouter4DHistory.IndexRouter: TPanel; +begin + Result := FIndexRouter; +end; + +function TRouter4DHistory.AddHistoryConteiner( aKey : String; aObject : TPanel) : TRouter4DHistory; +var + auxObject : TPanel; +begin + Result := Self; + if not FListCacheContainer.TryGetValue(aKey, auxObject) then + FListCacheContainer.TryAdd(aKey, aObject); +end; + +function TRouter4DHistory.GetHistoryContainer(aKey: String): TPanel; +begin + FListCacheContainer.TryGetValue(aKey, Result); +end; + +{$ENDIF} + +function TRouter4DHistory.IndexCache: Integer; +begin + Result := Self.FIndexCache; +end; + +function TRouter4DHistory.BreadCrumb(aDelimiter: char): String; +var + i : integer; +begin + Result := ''; + + if Self.FIndexCache = -1 then + Exit; + + Result := Self.FListCacheOrder[Self.FIndexCache]; + + for i := Self.FIndexCache-1 downto 0 do + begin + Result := Self.FListCacheOrder[i] + ADelimiter + Result; + end; +end; + +function TRouter4DHistory.GoBack: String; +begin + if Self.FIndexCache > 0 then + Dec(Self.FIndexCache); + + Result := Self.FListCacheOrder[Self.FIndexCache]; +end; + function TRouter4DHistory.AddHistory( aKey : String; aObject : TObject ) : iRouter4DComponent; var mKey : String; @@ -79,9 +212,6 @@ function TRouter4DHistory.AddHistory(aKey: String; var CachePersistent : TCachePersistent; begin - //if not Supports(aObject, iRouter4DComponent, Result) then - //raise Exception.Create('Form not Implement iRouter4DelphiComponent Interface'); - CachePersistent.FPatch := aKey; CachePersistent.FisVisible := True; CachePersistent.FPersistentClass := aObject; @@ -103,20 +233,36 @@ begin try FListCache2.TryAdd(aKey, CachePersistent); except end; end; -function TRouter4DHistory.AddHistoryConteiner( aKey : String; aObject : TFMXObject) : TRouter4DHistory; -var - auxObject : TFMXObject; +procedure TRouter4DHistory.CacheKeyNotify(Sender: TObject; const Key: string; + Action: TCollectionNotification); begin - Result := Self; - if not FListCacheContainer.TryGetValue(aKey, auxObject) then - FListCacheContainer.TryAdd(aKey, aObject); + inherited; + + case Action of + cnAdded: + begin + Self.FListCacheOrder.Add(Key); + Self.FIndexCache := Self.FListCacheOrder.Count-1; + end; + + cnRemoved: + begin + Self.FListCacheOrder.Remove(Key); + Self.FIndexCache := Self.FListCacheOrder.Count-1; + end; + end; + end; constructor TRouter4DHistory.Create; begin FListCache := TObjectDictionary.Create; FListCache2 := TDictionary.Create; + {$IFDEF HAS_FMX} FListCacheContainer := TObjectDictionary.Create; + {$ELSE} + FListCacheContainer := TObjectDictionary.Create; + {$ENDIF} end; procedure TRouter4DHistory.CreateInstancePersistent( aPath : String); @@ -160,32 +306,11 @@ begin FInstanteObject := Result; end; -function TRouter4DHistory.GetHistoryContainer(aKey: String): TFMXObject; -begin - FListCacheContainer.TryGetValue(aKey, Result); -end; - -function TRouter4DHistory.IndexRouter: TFMXObject; -begin - Result := FIndexRouter; -end; - function TRouter4DHistory.InstanteObject: iRouter4DComponent; begin Result := FInstanteObject; end; -function TRouter4DHistory.IndexRouter(aValue: TFMXObject): TRouter4DHistory; -begin - Result := Self; - FIndexRouter := aValue; -end; - -function TRouter4DHistory.MainRouter: TFMXObject; -begin - Result := FMainRouter; -end; - function TRouter4DHistory.RemoveHistory(aKey: String): TRouter4DHistory; begin Result := Self; @@ -202,12 +327,6 @@ begin Result := FListCache2; end; -function TRouter4DHistory.MainRouter(aValue: TFMXObject): TRouter4DHistory; -begin - Result := Self; - FMainRouter := aValue; -end; - initialization Router4DHistory := TRouter4DHistory.Create; diff --git a/src/Router4D.Interfaces.pas b/src/Router4D.Interfaces.pas index b105ba8..8eb3fed 100644 --- a/src/Router4D.Interfaces.pas +++ b/src/Router4D.Interfaces.pas @@ -1,5 +1,7 @@ unit Router4D.Interfaces; +{$I Router4D.inc} + interface uses @@ -7,7 +9,12 @@ uses System.Generics.Collections, System.UITypes, SysUtils, + {$IFDEF HAS_FMX} FMX.Types, + {$ELSE} + Vcl.ExtCtrls, + Vcl.Forms, + {$ENDIF} Router4D.Props; type @@ -18,7 +25,11 @@ type iRouter4DComponent = interface ['{C605AEFB-36DC-4952-A3D9-BA372B998BC3}'] + {$IFDEF HAS_FMX} function Render : TFMXObject; + {$ElSE} + function Render : TForm; + {$ENDIF} procedure UnRender; end; @@ -29,17 +40,26 @@ type iRouter4DLink = interface ['{3C80F86A-D6B8-470C-A30E-A82E620F6F1D}'] + {$IFDEF HAS_FMX} function &To ( aPatch : String; aComponent : TFMXObject ) : iRouter4DLink; overload; + function Animation ( aAnimation : TProc ) : iRouter4DLink; + {$ELSE} + function &To ( aPatch : String; aComponent : TPanel ) : iRouter4DLink; overload; + function Animation ( aAnimation : TProc ) : iRouter4DLink; + {$ENDIF} function &To ( aPatch : String) : iRouter4DLink; overload; function &To ( aPatch : String; aProps : TProps; aKey : String = '') : iRouter4DLink; overload; function &To ( aPatch : String; aNameContainer : String) : iRouter4DLink; overload; - function Animation ( aAnimation : TProc ) : iRouter4DLink; function IndexLink ( aPatch : String ) : iRouter4DLink; end; iRouter4DRender = interface ['{2BD026ED-3A92-44E9-8CD4-38E80CB2F000}'] + {$IFDEF HAS_FMX} function SetElement ( aComponent : TFMXObject; aIndexComponent : TFMXObject = nil ) : iRouter4DRender; + {$ELSE} + function SetElement ( aComponent : TPanel; aIndexComponent : TPanel = nil ) : iRouter4DRender; + {$ENDIF} end; iRouter4DSwitch = interface @@ -51,15 +71,23 @@ type iRouter4DSidebar = interface ['{B4E8C229-A801-4FCA-AF7B-DEF8D0EE5DFE}'] function Name ( aValue : String ) : iRouter4DSidebar; overload; + {$IFDEF HAS_FMX} function MainContainer ( aValue : TFMXObject ) : iRouter4DSidebar; overload; - function Name : String; overload; function MainContainer : TFMXObject; overload; + function LinkContainer ( aValue : TFMXObject ) : iRouter4DSidebar; + function Animation ( aAnimation : TProc ) : iRouter4DSidebar; + function RenderToListBox : iRouter4DSidebar; + {$ELSE} + function MainContainer ( aValue : TPanel ) : iRouter4DSidebar; overload; + function MainContainer : TPanel; overload; + function LinkContainer ( aValue : TPanel ) : iRouter4DSidebar; + function Animation ( aAnimation : TProc ) : iRouter4DSidebar; + {$ENDIF} + function Name : String; overload; function FontSize ( aValue : Integer ) : iRouter4DSidebar; function FontColor ( aValue : TAlphaColor ) : iRouter4DSidebar; function ItemHeigth ( aValue : Integer ) : iRouter4DSidebar; - function LinkContainer ( aValue : TFMXObject ) : iRouter4DSidebar; - function RenderToListBox : iRouter4DSidebar; - function Animation ( aAnimation : TProc ) : iRouter4DSidebar; + end; implementation diff --git a/src/Router4D.Link.pas b/src/Router4D.Link.pas index 7a35f91..0390a40 100644 --- a/src/Router4D.Link.pas +++ b/src/Router4D.Link.pas @@ -1,10 +1,17 @@ unit Router4D.Link; +{$I Router4D.inc} + interface uses + {$IFDEF HAS_FMX} FMX.Types, FMX.Layouts, + {$ELSE} + Vcl.ExtCtrls, + Router4D.Helper, + {$ENDIF} SysUtils, Router4D.Interfaces, Router4D.Props; @@ -12,13 +19,22 @@ uses type TRouter4DLink = class(TInterfacedObject, iRouter4DLink) private + {$IFDEF HAS_FMX} FAnimation : TProc; + {$ELSE} + FAnimation : TProc; + {$ENDIF} public constructor Create; destructor Destroy; override; class function New : iRouter4DLink; + {$IFDEF HAS_FMX} function Animation ( aAnimation : TProc ) : iRouter4DLink; function &To ( aPatch : String; aComponent : TFMXObject ) : iRouter4DLink; overload; + {$ELSE} + function Animation ( aAnimation : TProc ) : iRouter4DLink; + function &To ( aPatch : String; aComponent : TPanel ) : iRouter4DLink; overload; + {$ENDIF} function &To ( aPatch : String) : iRouter4DLink; overload; function &To ( aPatch : String; aProps : TProps; aKey : String = '') : iRouter4DLink; overload; function &To ( aPatch : String; aNameContainer : String) : iRouter4DLink; overload; @@ -31,6 +47,13 @@ implementation uses Router4D.History; +{$IFDEF HAS_FMX} +function TRouter4DLink.Animation(aAnimation: TProc): iRouter4DLink; +begin + Result := Self; + FAnimation := aAnimation; +end; + function TRouter4DLink.&To( aPatch : String; aComponent : TFMXObject ) : iRouter4DLink; begin Result := Self; @@ -43,15 +66,43 @@ begin .Render ); end; +{$ELSE} +function TRouter4DLink.Animation(aAnimation: TProc): iRouter4DLink; +begin + Result := Self; + FAnimation := aAnimation; +end; + +function TRouter4DLink.&To( aPatch : String; aComponent : TPanel ) : iRouter4DLink; +begin + Result := Self; + aComponent.RemoveObject; + Router4DHistory.InstanteObject.UnRender; + aComponent + .AddObject( + Router4DHistory + .GetHistory(aPatch) + .Render + ); +end; +{$ENDIF} function TRouter4DLink.&To(aPatch, aNameContainer: String): iRouter4DLink; var + {$IFDEF HAS_FMX} aContainer : TFMXObject; + {$ELSE} + aContainer : TPanel; + {$ENDIF} begin Result := Self; Router4DHistory.InstanteObject.UnRender; aContainer := Router4DHistory.GetHistoryContainer(aNameContainer); + {$IFDEF HAS_FMX} aContainer.RemoveObject(0); + {$ELSE} + aContainer.RemoveObject; + {$ENDIF} aContainer .AddObject( @@ -65,12 +116,6 @@ begin end; -function TRouter4DLink.Animation(aAnimation: TProc): iRouter4DLink; -begin - Result := Self; - FAnimation := aAnimation; -end; - constructor TRouter4DLink.Create; begin @@ -85,7 +130,11 @@ end; function TRouter4DLink.IndexLink(aPatch: String): iRouter4DLink; begin Result := Self; + {$IFDEF HAS_FMX} Router4DHistory.IndexRouter.RemoveObject(0); + {$ELSE} + Router4DHistory.IndexRouter.RemoveObject; + {$ENDIF} Router4DHistory.InstanteObject.UnRender; Router4DHistory .IndexRouter @@ -103,7 +152,11 @@ end; function TRouter4DLink.&To(aPatch: String) : iRouter4DLink; begin Result := Self; + {$IFDEF HAS_FMX} Router4DHistory.MainRouter.RemoveObject(0); + {$ELSE} + Router4DHistory.MainRouter.RemoveObject; + {$ENDIF} Router4DHistory.InstanteObject.UnRender; Router4DHistory .MainRouter @@ -121,7 +174,11 @@ end; function TRouter4DLink.&To(aPatch: String; aProps: TProps; aKey : String = '') : iRouter4DLink; begin Result := Self; + {$IFDEF HAS_FMX} Router4DHistory.MainRouter.RemoveObject(0); + {$ELSE} + Router4DHistory.MainRouter.RemoveObject; + {$ENDIF} Router4DHistory.InstanteObject.UnRender; Router4DHistory .MainRouter diff --git a/src/Router4D.Props.pas b/src/Router4D.Props.pas index ff69b6e..08c12da 100644 --- a/src/Router4D.Props.pas +++ b/src/Router4D.Props.pas @@ -16,6 +16,8 @@ unit Router4D.Props; +{$I Router4D.inc} + interface uses diff --git a/src/Router4D.Render.pas b/src/Router4D.Render.pas index 24e6d4c..b99690e 100644 --- a/src/Router4D.Render.pas +++ b/src/Router4D.Render.pas @@ -1,10 +1,17 @@ unit Router4D.Render; +{$I Router4D.inc} + interface uses - Router4D.Interfaces, - FMX.Types; + {$IFDEF HAS_FMX} + FMX.Types, + {$ELSE} + Vcl.ExtCtrls, + Router4D.Helper, + {$ENDIF} + Router4D.Interfaces; type TRouter4DRender = class(TInterfacedObject, iRouter4DRender) @@ -15,7 +22,11 @@ type constructor Create(Parent : iRouter4DComponent); destructor Destroy; override; class function New(Parent : iRouter4DComponent) : iRouter4DRender; + {$IFDEF HAS_FMX} function SetElement ( aComponent : TFMXObject; aIndexComponent : TFMXObject = nil ) : iRouter4DRender; + {$ELSE} + function SetElement ( aComponent : TPanel; aIndexComponent : TPanel = nil ) : iRouter4DRender; + {$ENDIF} end; implementation @@ -36,6 +47,7 @@ begin inherited; end; +{$IFDEF HAS_FMX} function TRouter4DRender.SetElement( aComponent : TFMXObject; aIndexComponent : TFMXObject = nil ) : iRouter4DRender; begin Result := Self; @@ -49,8 +61,23 @@ begin aComponent.RemoveObject(0); aComponent.AddObject(FParent.Render); end; - end; +{$ELSE} +function TRouter4DRender.SetElement( aComponent : TPanel; aIndexComponent : TPanel = nil ) : iRouter4DRender; +begin + Result := Self; + Router4DHistory.MainRouter(aComponent); + + if aIndexComponent <> nil then + Router4DHistory.IndexRouter(aIndexComponent); + + if Assigned(FParent) then + begin + aComponent.RemoveObject; + aComponent.AddObject(FParent.Render); + end; +end; +{$ENDIF} class function TRouter4DRender.New( Parent: iRouter4DComponent): iRouter4DRender; diff --git a/src/Router4D.Sidebar.pas b/src/Router4D.Sidebar.pas index bc8a301..b4335e1 100644 --- a/src/Router4D.Sidebar.pas +++ b/src/Router4D.Sidebar.pas @@ -6,41 +6,41 @@ uses Classes, SysUtils, FMX.Types, + FMX.ListBox, + FMX.SearchBox, + FMX.Layouts, Router4D.Interfaces, - System.UITypes; + System.UITypes; type TRouter4DSidebar = class(TInterfacedObject, iRouter4DSidebar) private FName : String; FMainContainer : TFMXObject; + FLinkContainer : TFMXObject; + FAnimation : TProc; FFontSize : Integer; FFontColor : TAlphaColor; FItemHeigth : Integer; - FLinkContainer : TFMXObject; - FAnimation : TProc; public constructor Create; destructor Destroy; override; class function New : iRouter4DSidebar; function Animation ( aAnimation : TProc ) : iRouter4DSidebar; - function Name ( aValue : String ) : iRouter4DSidebar; overload; function MainContainer ( aValue : TFMXObject ) : iRouter4DSidebar; overload; - function Name : String; overload; function MainContainer : TFMXObject; overload; + function LinkContainer ( aValue : TFMXObject ) : iRouter4DSidebar; + function RenderToListBox : iRouter4DSidebar; + function Name ( aValue : String ) : iRouter4DSidebar; overload; + function Name : String; overload; function FontSize ( aValue : Integer ) : iRouter4DSidebar; function FontColor ( aValue : TAlphaColor ) : iRouter4DSidebar; function ItemHeigth ( aValue : Integer ) : iRouter4DSidebar; - function LinkContainer ( aValue : TFMXObject ) : iRouter4DSidebar; - function RenderToListBox : iRouter4DSidebar; end; implementation uses - FMX.ListBox, - FMX.SearchBox, - FMX.Layouts, Router4D, Router4D.History, Router4D.Utils; @@ -54,36 +54,6 @@ begin FAnimation := aAnimation; end; -constructor TRouter4DSidebar.Create; -begin - FName := 'SBIndex'; - FLinkContainer := Router4DHistory.MainRouter; -end; - -destructor TRouter4DSidebar.Destroy; -begin - - inherited; -end; - -function TRouter4DSidebar.FontColor(aValue: TAlphaColor): iRouter4DSidebar; -begin - Result := Self; - FFontColor := aValue; -end; - -function TRouter4DSidebar.FontSize(aValue: Integer): iRouter4DSidebar; -begin - Result := Self; - FFontSize := aValue; -end; - -function TRouter4DSidebar.ItemHeigth(aValue: Integer): iRouter4DSidebar; -begin - Result := Self; - FItemHeigth := aValue; -end; - function TRouter4DSidebar.LinkContainer(aValue: TFMXObject): iRouter4DSidebar; begin Result := Self; @@ -101,38 +71,24 @@ begin Result := FMainContainer; end; -function TRouter4DSidebar.Name(aValue: String): iRouter4DSidebar; -begin - Result := Self; - FName := aValue; -end; - -function TRouter4DSidebar.Name: String; -begin - Result := FName; -end; - -class function TRouter4DSidebar.New: iRouter4DSidebar; -begin - Result := Self.Create; -end; - function TRouter4DSidebar.RenderToListBox: iRouter4DSidebar; var aListBox : TListBox; aListBoxItem : TListBoxItem; - aItem : TCachePersistent; AListBoxSearch : TSearchBox; + aItem : TCachePersistent; begin aListBox := TListBox.Create(FMainContainer); aListBox.Align := TAlignLayout.Client; - aListBox.ItemHeight := FItemHeigth; + aListBox.StyleLookup := 'transparentlistboxstyle'; aListBox.BeginUpdate; AListBoxSearch := TSearchBox.Create(aListBox); AListBoxSearch.Height := FItemHeigth - 25; + aListBox.ItemHeight := FItemHeigth; + aListBox.AddObject(AListBoxSearch); for aItem in Router4DHistory.RoutersListPersistent.Values do @@ -179,4 +135,50 @@ begin FMainContainer.AddObject(aListBox); end; +constructor TRouter4DSidebar.Create; +begin + FName := 'SBIndex'; + FLinkContainer := Router4DHistory.MainRouter; +end; + +destructor TRouter4DSidebar.Destroy; +begin + + inherited; +end; + +function TRouter4DSidebar.FontColor(aValue: TAlphaColor): iRouter4DSidebar; +begin + Result := Self; + FFontColor := aValue; +end; + +function TRouter4DSidebar.FontSize(aValue: Integer): iRouter4DSidebar; +begin + Result := Self; + FFontSize := aValue; +end; + +function TRouter4DSidebar.ItemHeigth(aValue: Integer): iRouter4DSidebar; +begin + Result := Self; + FItemHeigth := aValue; +end; + +function TRouter4DSidebar.Name(aValue: String): iRouter4DSidebar; +begin + Result := Self; + FName := aValue; +end; + +function TRouter4DSidebar.Name: String; +begin + Result := FName; +end; + +class function TRouter4DSidebar.New: iRouter4DSidebar; +begin + Result := Self.Create; +end; + end. diff --git a/src/Router4D.Switch.pas b/src/Router4D.Switch.pas index cfa3c93..53b189f 100644 --- a/src/Router4D.Switch.pas +++ b/src/Router4D.Switch.pas @@ -1,5 +1,7 @@ unit Router4D.Switch; +{$I Router4D.inc} + interface uses diff --git a/src/Router4D.Utils.pas b/src/Router4D.Utils.pas index a2abf54..013cfcd 100644 --- a/src/Router4D.Utils.pas +++ b/src/Router4D.Utils.pas @@ -1,5 +1,7 @@ unit Router4D.Utils; +{$I Router4D.inc} + interface uses diff --git a/src/Router4D.inc b/src/Router4D.inc new file mode 100644 index 0000000..90c4bdb --- /dev/null +++ b/src/Router4D.inc @@ -0,0 +1 @@ +{$DEFINE HAS_FMX} \ No newline at end of file diff --git a/src/Router4D.pas b/src/Router4D.pas index f718b67..654773a 100644 --- a/src/Router4D.pas +++ b/src/Router4D.pas @@ -1,5 +1,7 @@ unit Router4D; +{$I Router4D.inc} + interface uses @@ -8,7 +10,11 @@ uses System.Rtti, System.TypInfo, SysUtils, + {$IFDEF HAS_FMX} FMX.Types, + {$ELSE} + Vcl.ExtCtrls, + {$ENDIF} Router4D.Interfaces, Router4D.History, Router4D.Render,