From 26d048055d2d963eefc912a3da5b203c6998cf19 Mon Sep 17 00:00:00 2001 From: Zeus Date: Wed, 6 Nov 2024 14:04:51 +0100 Subject: [PATCH] Update README.md --- README.md | 14 ++- .../alfmxcontrolsdemogetitongoogleplay.png | Bin 14227 -> 0 bytes .../alfmxcontrolsdemoqrcodeplaystore.png | Bin 7976 -> 0 bytes Source/Alcinoe.FMX.DynamicScrollBox.pas | 109 ++++++++++++++++++ 4 files changed, 121 insertions(+), 2 deletions(-) delete mode 100644 References/DocImages/alfmxcontrolsdemogetitongoogleplay.png delete mode 100644 References/DocImages/alfmxcontrolsdemoqrcodeplaystore.png create mode 100644 Source/Alcinoe.FMX.DynamicScrollBox.pas diff --git a/README.md b/README.md index c095e5ae1..1a475abcb 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,23 @@ FireMonkey applications with ease, showcasing advanced features and custom styling capabilities.

- Alcinoe Firemonkey Controls Demo - Alcinoe Firemonkey Controls Demo + + Alcinoe Firemonkey Controls Demo + + + Alcinoe Firemonkey Controls Demo +

#### KisKis #### +KisKis is a dating app crafted in Delphi using the Alcinoe framework, +offering a sleek, modern, and responsive platform for connecting people. +Leveraging Alcinoe's advanced UI controls and optimized performance +capabilities, KisKis delivers an engaging and seamless user experience, +making meaningful connections more accessible and enjoyable. + diff --git a/References/DocImages/alfmxcontrolsdemogetitongoogleplay.png b/References/DocImages/alfmxcontrolsdemogetitongoogleplay.png deleted file mode 100644 index fac7db81a2cbdd9488a6c72cbccca04004d958f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14227 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 R=kT{|QzJ{mTDW`M{{X+y7)<~G diff --git a/Source/Alcinoe.FMX.DynamicScrollBox.pas b/Source/Alcinoe.FMX.DynamicScrollBox.pas new file mode 100644 index 000000000..2314f0741 --- /dev/null +++ b/Source/Alcinoe.FMX.DynamicScrollBox.pas @@ -0,0 +1,109 @@ +unit Alcinoe.FMX.DynamicScrollBox; + +interface + +{$I Alcinoe.inc} + +uses + System.Classes, + System.Types, + System.UITypes, + System.Messaging, + System.Generics.Collections, + FMX.layouts, + FMX.Types, + FMX.Controls, + Alcinoe.FMX.Controls, + ALcinoe.FMX.Common, + Alcinoe.FMX.StdCtrls, + Alcinoe.FMX.ScrollEngine; + +type + +// A view implements a scrollable area (either horizontal or vertical) +//TView = Class(Tobject) + //property Data: TALJSONNodeW read GetData write Fdata; + //property ScrollEngine: TALScrollEngine read fScrollEngine; + //property Items[Index: Integer]: TMFAppDynamicScrollBoxItem read GetItem; +//End; + + + {*************************************} + TALDynamicScrollBox = class(TALControl) + public + type + // ------------------------------------------------ + // An Item area represents a non-scrollable section + TItem = Class(Tobject) + //property Data: TALJSONNodeW read GetData write Fdata; + //property ItemIndex: Integer read FItemIndex write SetItemIndex; + //property EphemeralLayout: TMFAppDynamicScrollBoxItemEphemeralLayout read FEphemeralLayout; + End; + // ------- + // TButton + TButton = class(TALButton) + protected + procedure SetParent(const Value: TFmxObject); override; + procedure HandleSizeChanged; override; + public + constructor Create(AOwner: TComponent); override; + end; + private + protected + public + end; + +procedure Register; + +implementation + +uses + System.SysUtils, + System.Math, + System.Math.Vectors, + {$IFDEF ALDPK} + DesignIntf, + {$ENDIF} + FMX.Platform, + FMX.Consts, + FMX.Effects, + FMX.utils, + FMX.Ani, + Alcinoe.StringUtils, + Alcinoe.FMX.Objects, + Alcinoe.Common; + +{*****************} +procedure Register; +begin + RegisterComponents('Alcinoe', [TALDynamicScrollBox]); + {$IFDEF ALDPK} + UnlistPublishedProperty(TALDynamicScrollBox, 'Size'); + UnlistPublishedProperty(TALDynamicScrollBox, 'StyleName'); + UnlistPublishedProperty(TALDynamicScrollBox, 'OnTap'); + {$ENDIF} +end; + +{*****************************************************************} +constructor TALDynamicScrollBox.TButton.Create(AOwner: TComponent); +begin + inherited create(nil); +end; + +{***********************************************************************} +procedure TALDynamicScrollBox.TButton.SetParent(const Value: TFmxObject); +begin + raise Exception.Create('Setting a parent for TALDynamicScrollBox.TButton is not allowed'); +end; + +{******************************************************} +procedure TALDynamicScrollBox.TButton.HandleSizeChanged; +begin + // do nothing +end; + + +initialization + RegisterFmxClasses([TALDynamicScrollBox]); + +end.