From 84893c0593a99b95b690c08de7f206d3acbd40c3 Mon Sep 17 00:00:00 2001 From: Jason Southwell Date: Tue, 18 Oct 2022 10:28:26 -0500 Subject: [PATCH 1/4] New Camera and Barcode demo combined --- .gitignore | 1 + .../AndroidManifest.template.xml | 50 + Demos/BarcodeAndCamera/BC.Forms.Main.fmx | 92 + Demos/BarcodeAndCamera/BC.Forms.Main.pas | 206 ++ .../BarcodeAndCamera.deployproj | 722 +++++++ Demos/BarcodeAndCamera/BarcodeAndCamera.dpr | 14 + Demos/BarcodeAndCamera/BarcodeAndCamera.dproj | 1722 +++++++++++++++++ 7 files changed, 2807 insertions(+) create mode 100644 Demos/BarcodeAndCamera/AndroidManifest.template.xml create mode 100644 Demos/BarcodeAndCamera/BC.Forms.Main.fmx create mode 100644 Demos/BarcodeAndCamera/BC.Forms.Main.pas create mode 100644 Demos/BarcodeAndCamera/BarcodeAndCamera.deployproj create mode 100644 Demos/BarcodeAndCamera/BarcodeAndCamera.dpr create mode 100644 Demos/BarcodeAndCamera/BarcodeAndCamera.dproj diff --git a/.gitignore b/.gitignore index 1ff4c9f7..14d4162d 100644 --- a/.gitignore +++ b/.gitignore @@ -95,3 +95,4 @@ ThirdParty/Firebase/iOS/Firebase.6.* **/Service/*.java **/Service/JavaClasses dbgout.log +Thumbs.db diff --git a/Demos/BarcodeAndCamera/AndroidManifest.template.xml b/Demos/BarcodeAndCamera/AndroidManifest.template.xml new file mode 100644 index 00000000..d2bc4fdd --- /dev/null +++ b/Demos/BarcodeAndCamera/AndroidManifest.template.xml @@ -0,0 +1,50 @@ + + + + +<%uses-permission%> + + +<%queries-child-elements%> + + +<%provider%> +<%application-meta-data%> +<%uses-libraries%> +<%services%> + + + + + + + + + + + +<%activity%> +<%receivers%> + + + diff --git a/Demos/BarcodeAndCamera/BC.Forms.Main.fmx b/Demos/BarcodeAndCamera/BC.Forms.Main.fmx new file mode 100644 index 00000000..fa4b2b5a --- /dev/null +++ b/Demos/BarcodeAndCamera/BC.Forms.Main.fmx @@ -0,0 +1,92 @@ +object frmMain: TfrmMain + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 664 + ClientWidth = 392 + Fill.Kind = Solid + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnClose = FormClose + OnShow = FormShow + DesignerMasterStyle = 0 + object BottomLayout: TLayout + Align = Bottom + Padding.Left = 4.000000000000000000 + Padding.Top = 4.000000000000000000 + Padding.Right = 4.000000000000000000 + Padding.Bottom = 4.000000000000000000 + Position.Y = 592.000000000000000000 + Size.Width = 392.000000000000000000 + Size.Height = 72.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object txtFlash: TText + Align = Left + Position.X = 4.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 64.000000000000000000 + Size.PlatformDefault = False + Text = #55357#56614 + TextSettings.Font.Size = 40.000000000000000000 + OnClick = txtFlashClick + object ShadowEffect1: TShadowEffect + Distance = 3.000000000000000000 + Direction = 45.000000000000000000 + Softness = 0.200000002980232200 + Opacity = 0.600000023841857900 + ShadowColor = claBlack + end + end + object txtSwap: TText + Align = Right + Position.X = 338.000000000000000000 + Position.Y = 4.000000000000000000 + RotationAngle = 75.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 64.000000000000000000 + Size.PlatformDefault = False + Text = #8635 + TextSettings.Font.Size = 60.000000000000000000 + OnClick = txtSwapClick + object ShadowEffect2: TShadowEffect + Distance = 3.000000000000000000 + Direction = 45.000000000000000000 + Softness = 0.200000002980232200 + Opacity = 0.600000023841857900 + ShadowColor = claBlack + end + end + object txtScans: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + ReadOnly = True + Align = Client + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Size.Width = 268.000000000000000000 + Size.Height = 64.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + OnClick = txtScansClick + Viewport.Width = 264.000000000000000000 + Viewport.Height = 60.000000000000000000 + end + end + object loCamera: TLayout + Align = Client + Size.Width = 392.000000000000000000 + Size.Height = 592.000000000000000000 + Size.PlatformDefault = False + TabOrder = 1 + end + object tmrCapture: TTimer + Enabled = False + Interval = 200 + OnTimer = tmrCaptureTimer + Left = 184 + Top = 320 + end +end diff --git a/Demos/BarcodeAndCamera/BC.Forms.Main.pas b/Demos/BarcodeAndCamera/BC.Forms.Main.pas new file mode 100644 index 00000000..381948d7 --- /dev/null +++ b/Demos/BarcodeAndCamera/BC.Forms.Main.pas @@ -0,0 +1,206 @@ +unit BC.Forms.Main; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Effects, + FMX.Objects, FMX.Layouts, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, + FMX.Controls.Presentation, DW.NativeImage, DW.BarcodeReader, DW.Camera, + System.Permissions, DW.Permissions.Helpers, DW.Types; + +type + TfrmMain = class(TForm) + BottomLayout: TLayout; + txtFlash: TText; + ShadowEffect1: TShadowEffect; + txtSwap: TText; + ShadowEffect2: TShadowEffect; + txtScans: TMemo; + loCamera: TLayout; + tmrCapture: TTimer; + procedure txtSwapClick(Sender: TObject); + procedure txtFlashClick(Sender: TObject); + procedure txtScansClick(Sender: TObject); + procedure tmrCaptureTimer(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + FCamera : TCamera; + FIsScanning: Boolean; + FProcessTime: TDateTime; + procedure ReaderBarcodeHandler(Sender: TObject; const ABarcodes: TBarcodes; const AError: string); + procedure StartCamera; + procedure StopCamera; + procedure TryToStartCamera; + procedure CameraAuthorizationStatusHandler(Sender: TObject; const AStatus: TAuthorizationStatus); + procedure CameraImageCapturedHandler(Sender: TObject; const AImageStream: TStream); + procedure CameraStatusChangeHandler(Sender: TObject); + procedure CameraFrameAvailableHandler(Sender: TObject; const AFrame: TBitmap); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.fmx} + +uses + System.DateUtils, DW.Consts.Android, FMX.Media, FMX.Clipboard, FMX.Platform; + +const + cProcessImageRateDefault = 500; // Every 500 milliseconds + + +procedure TfrmMain.CameraAuthorizationStatusHandler(Sender: TObject; + const AStatus: TAuthorizationStatus); +begin + if AStatus = TAuthorizationStatus.Authorized then + StartCamera; +end; + +procedure TfrmMain.CameraFrameAvailableHandler(Sender: TObject; + const AFrame: TBitmap); +begin + // Camera frame available as a bitmap, here. Only works with the conditional define: USEGL +end; + +procedure TfrmMain.CameraImageCapturedHandler(Sender: TObject; + const AImageStream: TStream); +begin + var bmp := TBitmap.Create; + try + try + bmp.LoadFromStream(AImageStream); + try + if (bmp.Width = 0) or (bmp.Height = 0) then + exit; + var bc := TBarcodeReader.Create; + try + bc.Formats := [TBarcodeFormat.All]; + bc.OnBarcode := ReaderBarcodeHandler; + bc.Scan(bmp); + finally + bc.Free; + end; + finally + tmrCapture.Enabled := True; + end; + except + on e: exception do + ShowMessage(e.Message); + end; + finally + bmp.Free; + end; +end; + +procedure TfrmMain.CameraStatusChangeHandler(Sender: TObject); +begin +// +end; + +constructor TfrmMain.Create(AOwner: TComponent); +begin + inherited; + FCamera := TCamera.Create; + FCamera.CameraPosition := TDevicePosition.Back; + FCamera.OnImageCaptured := CameraImageCapturedHandler; + FCamera.OnAuthorizationStatus := CameraAuthorizationStatusHandler; + FCamera.OnStatusChange := CameraStatusChangeHandler; + FCamera.OnFrameAvailable := CameraFrameAvailableHandler; + FCamera.PreviewControl.Parent := loCamera; +end; + +destructor TfrmMain.Destroy; +begin + StopCamera; + FCamera.Free; + inherited; +end; + +procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); +begin + StopCamera; +end; + +procedure TfrmMain.FormShow(Sender: TObject); +begin + TryToStartCamera; +end; + +procedure TfrmMain.ReaderBarcodeHandler(Sender: TObject; + const ABarcodes: TBarcodes; const AError: string); +begin + if Length(ABarcodes) > 0 then + begin + var + LBarcode: TBarcode; + for LBarcode in ABarcodes do + txtScans.Lines.Insert(0,Format('%s - (%s)', [LBarcode.Value, LBarcode.FormatDescription])); + end; +end; + +procedure TfrmMain.StartCamera; +begin + if FIsScanning then + exit; + + FCamera.IsActive := True; + FIsScanning := True; + tmrCapture.Enabled := True; +end; + +procedure TfrmMain.StopCamera; +begin + if not FIsScanning then + exit; + FCamera.IsActive := False; + FIsScanning := False; +end; + +procedure TfrmMain.tmrCaptureTimer(Sender: TObject); +begin + tmrCapture.Enabled := False; + if FCamera.IsActive then + FCamera.CaptureImage + else + tmrCapture.Enabled := True; +end; + +procedure TfrmMain.TryToStartCamera; +begin + if not FIsScanning then + FCamera.RequestPermission +end; + +procedure TfrmMain.txtFlashClick(Sender: TObject); +begin + if FCamera.FlashMode = TFlashMode.FlashOn then + FCamera.FlashMode := TFlashMode.FlashOff + else + FCamera.FlashMode := TFlashMode.FlashOn; +end; + +procedure TfrmMain.txtScansClick(Sender: TObject); +var + clip : IFMXExtendedClipboardService; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXExtendedClipboardService, clip) then + clip.SetText(txtScans.Text); + +end; + +procedure TfrmMain.txtSwapClick(Sender: TObject); +begin + if FCamera.CameraPosition = TDevicePosition.Front then + FCamera.CameraPosition := TDevicePosition.Back + else + FCamera.CameraPosition := TDevicePosition.Front; +end; + +end. diff --git a/Demos/BarcodeAndCamera/BarcodeAndCamera.deployproj b/Demos/BarcodeAndCamera/BarcodeAndCamera.deployproj new file mode 100644 index 00000000..695f087c --- /dev/null +++ b/Demos/BarcodeAndCamera/BarcodeAndCamera.deployproj @@ -0,0 +1,722 @@ + + + + 12 + + + 17043840 + + + + + + + + BarcodeAndCamera\ + BarcodeAndCamera.exe + ProjectOutput + 0 + + + True + True + + + + + BarcodeAndCamera\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + BarcodeAndCamera\classes\ + BarcodeAndCamera.classes + AndroidClasses + 64 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + BarcodeAndCamera\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + BarcodeAndCamera\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + BarcodeAndCamera\library\lib\arm64-v8a\ + libBarcodeAndCamera.so + ProjectOutput + 1 + + + True + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + BarcodeAndCamera\classes\ + BarcodeAndCamera.classes + AndroidClasses + 64 + + + True + + + BarcodeAndCamera\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + BarcodeAndCamera\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + BarcodeAndCamera\library\lib\arm64-v8a\ + libBarcodeAndCamera.so + ProjectOutput + 1 + + + True + True + + + BarcodeAndCamera\library\lib\mips\ + libBarcodeAndCamera.so + AndroidLibnativeMipsFile + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + BarcodeAndCamera\library\lib\mips\ + libBarcodeAndCamera.so + AndroidLibnativeMipsFile + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi-v7a\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiv7aFile + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + BarcodeAndCamera\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi-v7a\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiv7aFile + 1 + + + True + + + BarcodeAndCamera\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + BarcodeAndCamera\res\values-v21\ + styles.xml + AndroidSplashStylesV21 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + + + BarcodeAndCamera\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + BarcodeAndCamera\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + BarcodeAndCamera\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + BarcodeAndCamera\classes\ + BarcodeAndCamera.classes + AndroidClasses + 64 + + + True + + + BarcodeAndCamera\library\lib\armeabi-v7a\ + libBarcodeAndCamera.so + ProjectOutput + 1 + + + True + True + + + BarcodeAndCamera\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + BarcodeAndCamera\res\values-v21\ + styles.xml + AndroidSplashStylesV21 + 1 + + + True + + + BarcodeAndCamera\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + BarcodeAndCamera\classes\ + BarcodeAndCamera.classes + AndroidClasses + 64 + + + True + + + BarcodeAndCamera\library\lib\armeabi\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi\ + libBarcodeAndCamera.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + BarcodeAndCamera\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + BarcodeAndCamera\library\lib\mips\ + libBarcodeAndCamera.so + AndroidLibnativeMipsFile + 1 + + + True + + + BarcodeAndCamera\library\lib\mips\ + libBarcodeAndCamera.so + AndroidLibnativeMipsFile + 1 + + + True + + + BarcodeAndCamera\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + BarcodeAndCamera\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + BarcodeAndCamera\library\lib\armeabi-v7a\ + libBarcodeAndCamera.so + ProjectOutput + 1 + + + True + True + + + BarcodeAndCamera\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + BarcodeAndCamera\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + + + + + + diff --git a/Demos/BarcodeAndCamera/BarcodeAndCamera.dpr b/Demos/BarcodeAndCamera/BarcodeAndCamera.dpr new file mode 100644 index 00000000..be44b391 --- /dev/null +++ b/Demos/BarcodeAndCamera/BarcodeAndCamera.dpr @@ -0,0 +1,14 @@ +program BarcodeAndCamera; + +uses + System.StartUpCopy, + FMX.Forms, + BC.Forms.Main in 'BC.Forms.Main.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/Demos/BarcodeAndCamera/BarcodeAndCamera.dproj b/Demos/BarcodeAndCamera/BarcodeAndCamera.dproj new file mode 100644 index 00000000..8018b731 --- /dev/null +++ b/Demos/BarcodeAndCamera/BarcodeAndCamera.dproj @@ -0,0 +1,1722 @@ + + + {5488469C-494F-4CB9-9769-18B1EEEF4658} + 19.5 + FMX + True + Debug + Android64 + 32784 + Application + BarcodeAndCamera.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + 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 + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + 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 + BarcodeAndCamera + ..\..\controls;..\..\include;..\..\features\barcode;..\..\API;..\..\Core;..\..\features\camera;$(DCC_UnitSearchPath) + + + chimera.pubsub.runtime;fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;RadiantShapesFmx_Design;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FMXSignature;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;cocinasync_flux_fmx;CustomIPTransport;DBXInterBaseDriver;IndySystem;cocinasync;RadiantShapesFmx;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;FrameStandPackage_10_4;dsnap;CloudService;FMXTee;DataSnapNativeClient;ideal.pos.api;chimera.json.runtime;soaprtl;Ape;cocinasync_flux;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=No 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_LauncherIcon_192x192.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 + annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar + 1 + False + #000000 + + + chimera.pubsub.runtime;fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;RadiantShapesFmx_Design;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;edbrun;FMXSignature;hclcore_xe104;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;htmlcompfm_xe104;inet;DataSnapCommon;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;htmlcomp_xe104;IndySystem;cocinasync;RadiantShapesFmx;bindcomp;FireDACCommon;htmledit_xe104;IndyCore;RESTBackendComponents;bindcompdbx;GridViewD10;rtl;htmleditcore_xe104;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;htmleditfm_xe104;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;FrameStandPackage_10_4;dsnap;CloudService;FMXTee;DataSnapNativeClient;ideal.pos.api;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=No 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_LauncherIcon_192x192.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 + annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar + 1 + False + #000000 + + + IdealProcessPanel;fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;RadiantShapesFmx_Design;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;edbrun;FMXSignature;hclcore_xe104;FireDACSqliteDriver;DbxClientDriver;soapmidas;VirtualDBTreeEx_10_4;fmxFireDAC;dbexpress;htmlcompfm_xe104;inet;DataSnapCommon;fmxase;TMSFMXPackPkgDXE14;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;htmlcomp_xe104;IndySystem;cocinasync;RadiantShapesFmx;bindcomp;FireDACCommon;htmledit_xe104;IndyCore;RESTBackendComponents;tmswizdXE8;bindcompdbx;GridViewD10;rtl;tmsdXE8;htmleditcore_xe104;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;htmleditfm_xe104;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;tmsxlsdXE8;dsnap;tmsexdxe8;CloudService;FMXTee;DataSnapNativeClient;chimera.json.runtime;soaprtl;Ape;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;dsnap;CloudService;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + DataSnapServer;fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;RadiantShapesFmx_Design;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;DBXFirebirdDriver;edbrun;FMXSignature;hclcore_xe104;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;fmxFireDAC;dbexpress;htmlcompfm_xe104;DBXMySQLDriver;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DBXInterBaseDriver;htmlcomp_xe104;FireDACMongoDBDriver;IndySystem;RadiantShapesFmx;FireDACTDataDriver;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;htmledit_xe104;IndyCore;RESTBackendComponents;bindcompdbx;GridViewD10;rtl;FireDACMySQLDriver;htmleditcore_xe104;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;htmleditfm_xe104;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;FrameStandPackage_10_4;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;DBXInformixDriver;fmxobj;FMXTee;DataSnapNativeClient;ideal.pos.api;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + DataSnapServer;fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;DBXFirebirdDriver;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;fmxFireDAC;dbexpress;DBXMySQLDriver;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;DBXInformixDriver;fmxobj;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + chimera.pubsub.indy.runtime;cocinasync_fmx;RaizeComponentsVcl;vclwinx;DataSnapServer;IdealProcessPanel;chimera.pubsub.runtime;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;cocinasync.vcl;appanalytics;IndyProtocols;vclx;RadiantShapesFmx_Design;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;emsedge;bindcompfmx;cocinasync_flux_vcl;DBXFirebirdDriver;edbrun;FMXSignature;hclcore_xe104;inetdb;FECPersonPanel;lang.project.fmx;lang.project;FireDACSqliteDriver;DbxClientDriver;Ideal.Firemonkey;FireDACASADriver;Tee;soapmidas;VirtualDBTreeEx_10_4;vclactnband;TeeUI;fmxFireDAC;dbexpress;FireDACInfxDriver;htmlcompfm_xe104;KastriAdMob;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;TMSFMXPackPkgDXE14;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;TeeDB;cocinasync_flux_fmx;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;IdealVCL;cocinasync_console;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;htmlcomp_xe104;FireDACMongoDBDriver;IndySystem;cocinasync;GradientPanel;RadiantShapesFmx;KastriFMX;FireDACTDataDriver;vcldb;VirtualTreesR;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;IdealFECButtonPkg;htmledit_xe104;IndyCore;RESTBackendComponents;tmswizdXE8;bindcompdbx;GridViewD10;rtl;FireDACMySQLDriver;FireDACADSDriver;RaizeComponentsVclDb;lang.project.vcl;tmsdXE8;htmleditcore_xe104;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;htmleditfm_xe104;DBXSybaseASEDriver;DBXDb2Driver;chimera.pubsub.webbroker.runtime;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;IdealTimeSelector;tmsxlsdXE8;FrameStandPackage_10_4;bindcompvcl;dsnap;tmsexdxe8;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;fmxobj;bindcompvclsmp;FMXTee;DataSnapNativeClient;CEF4Delphi;ideal.pos.api;chimera.json.runtime;DatasnapConnectorsFreePascal;soaprtl;Ape;cocinasync_flux;soapserver;FireDACIBDriver;$(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 + + + RaizeComponentsVcl;vclwinx;DataSnapServer;chimera.pubsub.runtime;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;RadiantShapesFmx_Design;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;emsedge;bindcompfmx;DBXFirebirdDriver;FMXSignature;hclcore_xe104;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;FireDACInfxDriver;htmlcompfm_xe104;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;htmlcomp_xe104;FireDACMongoDBDriver;IndySystem;cocinasync;RadiantShapesFmx;FireDACTDataDriver;vcldb;VirtualTreesR;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;htmledit_xe104;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RaizeComponentsVclDb;htmleditcore_xe104;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;htmleditfm_xe104;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;FrameStandPackage_10_4;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;fmxobj;bindcompvclsmp;FMXTee;DataSnapNativeClient;chimera.json.runtime;DatasnapConnectorsFreePascal;soaprtl;Ape;soapserver;FireDACIBDriver;$(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 + true + true + + + 1 + False + + + 1 + False + disabled + + + false + PerMonitorV2 + + + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + 1 + False + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
frmMain
+ fmx +
+ + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + BarcodeAndCamera.dpr + + + CocinAsync Asynchronous Library for Delphi + Chimera JSON Runtime + Chimera Pubsub for Webbroker Runtime + Chimera Pubsub Runtime + Chimera Pubsub for Indy Runtime + TFrameStand and TFormStand Runtime Package + TurboPack DOSCommand Runtime Package for CBuilder + ElevateDB Run-Time Package + Lang Manager VCL Runtime + Language Manager Runtime + Lang Manager FMX Runtime + (untitled) + Embarcadero C++Builder Office 2000 Servers Package + Embarcadero C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + false + splash_image.png + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + libBarcodeAndCamera.so + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + 64 + true + + + + + true + + + + + libBarcodeAndCamera.so + true + + + + + true + + + + + styles.xml + true + + + + + true + + + + + 64 + true + + + + + true + + + + + libBarcodeAndCamera.so + true + + + + + true + + + + + true + + + + + 64 + true + + + + + true + + + + + libBarcodeAndCamera.so + true + + + + + true + + + + + styles.xml + true + + + + + true + + + + + 64 + true + + + + + true + + + + + libBarcodeAndCamera.so + true + + + + + true + + + + + BarcodeAndCamera.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 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 + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 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\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 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\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 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 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + + True + True + False + False + False + False + False + False + + + 12 + + + + +
From 37fddf04b1cc7af416247935884a4750559ebe55 Mon Sep 17 00:00:00 2001 From: Jason Southwell Date: Tue, 18 Oct 2022 13:49:40 -0500 Subject: [PATCH 2/4] Add exposure slider and background barcode scanning --- Demos/BarcodeAndCamera/BC.Forms.Main.fmx | 154 +++++++++++++++++++++-- Demos/BarcodeAndCamera/BC.Forms.Main.pas | 67 +++++++--- 2 files changed, 195 insertions(+), 26 deletions(-) diff --git a/Demos/BarcodeAndCamera/BC.Forms.Main.fmx b/Demos/BarcodeAndCamera/BC.Forms.Main.fmx index fa4b2b5a..0e0aa21f 100644 --- a/Demos/BarcodeAndCamera/BC.Forms.Main.fmx +++ b/Demos/BarcodeAndCamera/BC.Forms.Main.fmx @@ -17,9 +17,9 @@ object frmMain: TfrmMain Padding.Top = 4.000000000000000000 Padding.Right = 4.000000000000000000 Padding.Bottom = 4.000000000000000000 - Position.Y = 592.000000000000000000 + Position.Y = 544.000000000000000000 Size.Width = 392.000000000000000000 - Size.Height = 72.000000000000000000 + Size.Height = 120.000000000000000000 Size.PlatformDefault = False TabOrder = 0 object txtFlash: TText @@ -27,7 +27,7 @@ object frmMain: TfrmMain Position.X = 4.000000000000000000 Position.Y = 4.000000000000000000 Size.Width = 50.000000000000000000 - Size.Height = 64.000000000000000000 + Size.Height = 68.000000000000000000 Size.PlatformDefault = False Text = #55357#56614 TextSettings.Font.Size = 40.000000000000000000 @@ -46,7 +46,7 @@ object frmMain: TfrmMain Position.Y = 4.000000000000000000 RotationAngle = 75.000000000000000000 Size.Width = 50.000000000000000000 - Size.Height = 64.000000000000000000 + Size.Height = 68.000000000000000000 Size.PlatformDefault = False Text = #8635 TextSettings.Font.Size = 60.000000000000000000 @@ -67,18 +67,156 @@ object frmMain: TfrmMain Margins.Left = 8.000000000000000000 Margins.Right = 8.000000000000000000 Size.Width = 268.000000000000000000 - Size.Height = 64.000000000000000000 + Size.Height = 68.000000000000000000 Size.PlatformDefault = False TabOrder = 2 OnClick = txtScansClick - Viewport.Width = 264.000000000000000000 - Viewport.Height = 60.000000000000000000 + Viewport.Width = 268.000000000000000000 + Viewport.Height = 68.000000000000000000 + end + object ExposureSlider: TNativeSlider + Align = Bottom + MaxImage.PNG = { + 89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2 + AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 09B449444154785EED9C6D8C1D551DC6CF99B9F7D65AA45D015F8212B24D37F1 + 9DFAC12AD86AC20762A24114DA622B064C2C4413F960304509608C25443F6882 + 502346A19A5D6A110831E18384B254BA35D9DAE8076D6D53C504022DA58196F6 + DE3B33FE9E39E72E77EF7697EEBD67F68E7A9FE4BFE7CCFFCC9D79CE33E77DCE + AC196080010618608001FA04EBC3D221CBCC526CB5E2D69A71EC789E50329452 + 40841BC6AE495373A58EA3C83C8280BFC50EE5270C303710EEDA7ADDFC131133 + 99E2F2F9E45221F261D9701EC2BDCBC75522153FCF1D950B651550C87C28B4C7 + 4B85320BD8DE3E97B6B32BAB8012AC53C0528A5856015FA4E77DCEC7D50B2BFE + 923B2A17820848231F63152C54299944B4DFD1FBBE2ED330463E97D41BC4D173 + 8DBDAB2704C93064346E5BCA38ED2F58D3BBBB863249A09EF8621D73CDC30447 + 097BEE4CB8A6C4FB10D73A8EF57F5CC9F86C73B36976637B93C46C83DCB04FEA + 195C4B253B484911C44D1CC5559CC5DD272D3C7CE6864584301FF09E3E6D1A10 + 7C00622BFD69A58138899B38B6F87AEEAA3DC11ED259839B56444A4FB345A865 + 10FD39E125FED4BE435CE0747F3B4719DC27958655FCA9F346D76D2037D56F63 + 44FC2544D6D56AD349E0BF97C67FB3DA1AEF9A1359767B946513556B2B9486C5 + C44F5B6B17E59D1CF19438EDDFEB699635136B5735ACBD33CD7FF82680E732B8 + 6C81CB8DDE9583CEA951A99831FCD773C835BB6B5F7BEE4420380CC13B20F265 + EFCAC113DF8DEF87D80EEF9A1369BAF11DC69C5AC33319A178BC1B1753B7F4ED + 2E357A993F7422F679AEBCDF98B73C1D45DB5E746973036E5FC4BE15C7E6E3DE + 9503DF8370BBA3D78E24542F7C0984BE01A1AF7A9704FC23C7B7614F7AD70CA4 + E9BAE5FCFA0A7E7F5996A5B445D110F125D822631A58B5EACE6C348853248DEC + 84B5E9316BA343C477918527A268ECA03B6F26E07539F63D04BCD4BBE4BB9FDF + DE03B7BDDED5358208287811BF46A80E2481DC4384BF263CEAD32940AE9A20DC + 08C16A4ADAA7D3345B55A9D81508A4149DA9533C5AF1769A8AAB66374CB3991D + 88223BC1859FC2318E9094CECE7BE58B101B08D712C6F8F7625BE1B54FE9BD22 + 988002C4976197133D86ED6B89D742965D730EA27D8C92F605DACDF5B55AEC57 + 583A853B1BB484547B961CA53D1BA5643E8C727BACDDFE5A9EE0E145FC083684 + 787FC05EC9130220A8807301E19801AC5B4766BE1DC7157AE8445E97D833948D + 9866A3B1971279B7B563630819EAE27362C1044CD3ABBF9324F606AA6BB081F6 + 99D06C2607E338FA45146DFF8177158AC21613D40EB930B34EBCEC3A275E91CF + CC9A4AA5B29C07755D9AAEDDAC7BCBDBE252040A2D81AECD339FA347FEFE1BE2 + 155DB3DC3D5C498CBF4B4D7EBCB34D0C89C24AA0A00E234DED2D0B279EA07BA8 + 24C6CBE9E16F1107E72F068509A8A18A7A5BD761080BD2A67BB87BC57175A538 + F861532128B004666B18AA5CEB7ADB7E21A12A9BF544F2F7CB45A0100135C3A0 + ED5B53AB55988A2D64C9EB446634D6A41A3360D7AC273C0A2A81D915B43FCC3D + FB29DE1BD06C479CFC6150142220A5EF32373D3BAB05938291D2A1D815E2E41D + 411154402D496955450B036E6E5B8612280E55B8A5C38EDBED41F31C58C00954 + 3BB546AB2AE5287D2DA4708B96316B5EED3886435001DD62A8D6F3CC927294BE + 16F225E873888C388EE130E74C0421F4BE800678DABE14FD46EF6827AD3507B0 + 29A534F360E0BCC5AD50471794A71446A65E4F5FAA54B2D12832B7B6CF4CC89F + 5E73D25E9B8F62709EF6E4F52670029B75D1755601B9A8F6E76D428CAF136A73 + 8F2EACF32D249EC31EC1B670F1233A5F48D30DE766597D6B14D9CF70DAD2E95C + FA897C16743C4DCDEFAD3DB5298A1E7BD5F9F37C9E8FFF56EC4AECBD7279D39A + E20B958AB987702B76C65713B356612EBC9A0B7EBE5A3517D56A0CA76A66910F + AB5C546FE36EE29C8BB1A92A616D1DA6D950BD6E6ADE551AC0496DDF50EB3D8B + 20EECA0379B9517952DEDAF3AABC4B03CEF9A4FFC90C046D03FF1F31AB8014D9 + 7155D346C3FC8BA757C74EFBB0C1133BC413FB29E71CC6A6E66A5956A3E8DB63 + 3CBDBA779506706A101CD31B3EE7C9F3A8B77187C9CB7DCA93F2D69E57E55D1A + 70CE33FE2733306B1B28507467EB44F4464C9DC83FB0A986EE7FB0133942FEF6 + 60F3EF44BA41967DF6AD59B6E4E66633BBA95A8DDE5326011B8DE4DFCC48A835 + 277F6CEDE3277D42CF08DA06EAA5B731C97E9ED889C0CFA6475875A92A75FB1D + C770082AA0760CE8A5B7DEDB06BE748F88E096BE424B38EE38864321C52449D6 + EA7DF097DCE5DB9B947EC0716038F29B387E6883F3854321C5842ABC4B2FBDCB + 510A23BD1F51B3B2CB3B82A2A01C6ABB85DDED0FFA8E288AF788933F0C8A4204 + D45E151AED9DDA31E0AA50BF6019BE24DA94F4D45CFB677A4191756C9C01EAA8 + 760CF40FB1711CCCB83B0E8FC204D4461FED55D1760BE759C892E8EE9524750D + F677B4361D1581425B79AACE1EED55D14B6EEF7141A170BDAEEE49DB77374317 + DABFE250588E3445E2E96780A9D2DACD49927EA55289475A192C062E3B8C00FE + 1EC7E657D68EDD050928382E7962602C4491C831D85CD423ACFDC09638B6DA64 + 449BA8EDD4219F9DAE55A1CD4B27DD7E98F7DFE5FCC5236809A4AAB436586A03 + E39F998D4CDB6099A61B9718736A55311B2CD3516BA31DD4D83F9D6183E53B09 + B473763155F9092CD862423001114E5B7C3729E43045BC31C237DBE2FBA9344D + 56A569BCA256ABC2A553C856BC9DA613AE5E6F6451941CA0A3D016DF9DC6349E + 8EA28799FD74DECB5C48B091F02A42ADFF4DC0E967847F537AAF082220E45642 + 5A9BCC6FF0AE6E3799AB046B4B5CBEA45E77CBF0F962A81638C9B43699BFA685 + 81796C32D72EFDDBE854B4C53707C73F81D7BD2144EC5940C8681F8C3E73D8E8 + 5D39BAFBCCA1AE4D40FE33077B3EF1A13C31DF739D1DA1583D4F9C315D6D7C1E + 9F395C8FDD8C801FF6AE1CF8EE83DB9D88F882777585AE054434FDB6C00F6DDE + 865EAFE68D1CF194385572FE1FDAC0E342B8EA439B69DFB150A24F304BD986B0 + D33EC0593040EABFE6532F787E024EA39D3CE1FE2CE145D8C2CF377553ACF363 + C33A441F205E1AF15A40C44BE1B6A3C555C6F193F8F559ED820DE7660002FADC + F5596C12420F4226D840996B05FDDC15AE1F84E376B8EEC37672FC4D9FD43582 + F4C25EB473B1BFD2E695FA836B445B4CF03EAEF5B2BF6EFFE14B4AB04FFEC9E4 + 0825E547340927658ACBE7937B82387AAEFD5C672B1688B5BED13007C964DE56 + 292E9F4F2E15FAD778CE8D0B104C1B7D72F8B85E7A970E6515506D5D7B7BD779 + 5C1A945540A153C052A2CC02B67748413AA7225056013564999AA3FAF8B4A5B1 + B2A0944F969E57BBC2AEA6F368FD03C64711B194FF80B1B4550301B5C538DF19 + 8A70CF60A5FC17A0030C30C000030C30407F60CC7F00F78619EB88BF352C0000 + 000049454E44AE426082} + MinImage.PNG = { + 89504E470D0A1A0A0000000D4948445200000040000000400806000000AA6971 + DE000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 053B49444154785EED9B4D8C144514C7ABAA7B267E25EE2A973D68D488170907 + 3E62B86D88BA5C205122100F4683120CE0858B1F67E062BC48D80535EC49B38A + 68E0A6444F1A0EAE07178CF211144D56A3C96E3C60D8E9EEF2FFEF7E833DEB08 + 3353D5DDBB99F925B5F5EAD5CCBC57AFABBA3EBA570D183060403FA3252F1D6B + D51D482F53D65A8D235D4B2BFA05347E12C932C5B13A2EEAFEA1D150179A01A0 + 2CEAD231925741DE76657E54198025416501C04DEF6F115BE4B2A9AEEB19352E + 22E509119707B8710D2589DA847C85A87A02DF7F80498A3D411FC4972151150B + 0D2D2CA8ABC8EDF5EBEA4FE46BA5AA74685B7CB0E253F1419068A7D317131C98 + 836E9D5497066CAEA7EDBC2FD08D497571C0D08A66D473691EC61F968F140E6C + ADA4CDBC0FF0E90FE45D0FC99E96C230B4165DEE4CBDFE6F978353078340BD21 + C5B624C9F6FBF0778BB5FA51E423C847A8D7DACEE256388BFC3CF253C64CFD92 + 7EE17FC0CAF1006E9CAF4B51C19779F8F23866936951754CCF7B0134781D0C9E + 817837CB08CA0E383545398FB5BB6AD6CEED4C12FB52109835A2BE29719C7C6B + 8C7E47EBE1F7B43ED610F50D607B076C7F40998DAFD5D413B0FD4D5AD9254E9B + 21767B34FC0538F31DD2874856AA18106DEDF6A7E2383A1486C123A2EE8A288A + 2F0441F89AD6539FFCF7B7D536A4D5D01F47E32F4955D714B21BE4554F92F9C3 + 706C97A89C40EF396ACCF0BE76BDC115EF01B0F6D9E124699C44171E15951792 + 24F9D298FA56ADDF9F139517BC0620BBF2739FF96E7C130CB92F8C19DAE4B327 + 785B0A735C66DDBE98C6130CA98D08F0DBB4252A67BCFD10A6B8A7318D7D2CC5 + 42C1F4B91553E549293AE12500ECFA51347F3E0CD54A51150A678730BC77958F + A1E06508709E2FABF184D32A6D4AD1092F01E02247C4D2D05ABF28A213CE4380 + CB5B8CFDAB522C15DC0BEEBFD5B2F95678E801C916112AC06E16A1679C03906D + 6CAA01DB4067DB6D038079960F2D26795C8D7489298AD40C16227BE423399274 + 47570DD96E320F7CDC4B5F9B7EB30D6C0BDB241F69A1ED3D003FB21F9B8C37A5 + B8980751F793C898929E391B04FA3129960A768D67C3F0C40629F2C2F178ED4A + 566A0575FBB1907A4B8A37F0320B2C67DA060057781CBD60125DE922D265A638 + 56E710C53DF9AB4FB2C38C6AD0DAB4D8A66FF0711F7D6DFACD36B02DA86B7BF2 + EC3C0DC6F1B623E85AE943CEB2C1FAE348107CD4E6BED439CE43203BC6AA062C + 869C6D7BB80798532254803E2D42CF3807802B319EE149B14CA65D5781C4CB2C + C0034C114B038BA0774574C24B00787ACB2DAA140B87B668538A4E780AC0B106 + 4F6FA55838D949B19F63312F01203CBAE6E9AD140B0373FA046D49D1198F0150 + 9647D73CBD159577D0781E8ABE425BA272C6DB996093E5762CEEAD0734A183E8 + 094FFA1C0EECF6C6DC33E6BBF1C4A907C0313EA57D1E5D7206692ADF35A1F7F4 + 684CBFAAF5894F17FD7680F41CD243D01FC552FC57A9EA9A9E0380C6AF87F1CF + 2176F47054CEF03A7D99629AF3FC4D1E8E72537698F2C282FABD5E57A328FF90 + 5676494F0180032D4F8609741D3E1EB79BB3931C3D626D769892EDEAEC6CB6B6 + D7A73B783C3E8E60EF962283F05BADA646A1FB5154C5812BBD145E9058031FAE + E57D40107E86FE4EF94871C0C852794566E3E2202015FFBE128CE45F92E26B29 + 55BE24350A1FFEA22F8D86FA1EF96D52552C30C4D7E4C69057FE9A1CFC18115F + EE12D5F2004EEF85D369D7A52CEAFE218AD44C330094455D3ADE57829D8286DF + 2E628B5C36950560A950650012C9495E2E95CA021086EA6B11F9EACB5722968E + F7ED70A760DCF3F963BA9CC5B27A02A9BFFE696AC0800103AA47A97F001F21DF + 170A8748120000000049454E44AE426082} + Orientation = Horizontal + Position.X = 4.000000000000000000 + Position.Y = 72.000000000000000000 + Size.Width = 384.000000000000000000 + Size.Height = 44.000000000000000000 + Size.PlatformDefault = False + OnValueChange = ExposureSliderValueChange end end object loCamera: TLayout Align = Client Size.Width = 392.000000000000000000 - Size.Height = 592.000000000000000000 + Size.Height = 544.000000000000000000 Size.PlatformDefault = False TabOrder = 1 end diff --git a/Demos/BarcodeAndCamera/BC.Forms.Main.pas b/Demos/BarcodeAndCamera/BC.Forms.Main.pas index 381948d7..7edd0900 100644 --- a/Demos/BarcodeAndCamera/BC.Forms.Main.pas +++ b/Demos/BarcodeAndCamera/BC.Forms.Main.pas @@ -7,7 +7,7 @@ interface FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Effects, FMX.Objects, FMX.Layouts, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation, DW.NativeImage, DW.BarcodeReader, DW.Camera, - System.Permissions, DW.Permissions.Helpers, DW.Types; + System.Permissions, DW.Permissions.Helpers, DW.Types, DW.NativeSlider; type TfrmMain = class(TForm) @@ -19,12 +19,14 @@ TfrmMain = class(TForm) txtScans: TMemo; loCamera: TLayout; tmrCapture: TTimer; + ExposureSlider: TNativeSlider; procedure txtSwapClick(Sender: TObject); procedure txtFlashClick(Sender: TObject); procedure txtScansClick(Sender: TObject); procedure tmrCaptureTimer(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure ExposureSliderValueChange(Sender: TObject); private FCamera : TCamera; FIsScanning: Boolean; @@ -79,22 +81,38 @@ procedure TfrmMain.CameraImageCapturedHandler(Sender: TObject; try if (bmp.Width = 0) or (bmp.Height = 0) then exit; - var bc := TBarcodeReader.Create; - try - bc.Formats := [TBarcodeFormat.All]; - bc.OnBarcode := ReaderBarcodeHandler; - bc.Scan(bmp); - finally - bc.Free; - end; + TThread.CreateAnonymousThread( + procedure + begin + try + var bc := TBarcodeReader.Create; + try + bc.Formats := [TBarcodeFormat.All]; + bc.OnBarcode := ReaderBarcodeHandler; + bc.Scan(bmp); + finally + bmp.Free; + bc.Free; + end; + except + on e: exception do + TThread.Synchronize(TThread.Current, + procedure + begin + ShowMessage('Scan Thread Error: '+e.Message); + end + ); + end; + end + ).Start; finally - tmrCapture.Enabled := True; + // end; except on e: exception do ShowMessage(e.Message); end; - finally + except bmp.Free; end; end; @@ -123,6 +141,11 @@ destructor TfrmMain.Destroy; inherited; end; +procedure TfrmMain.ExposureSliderValueChange(Sender: TObject); +begin + FCamera.Exposure := ExposureSlider.Value; +end; + procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin StopCamera; @@ -136,13 +159,19 @@ procedure TfrmMain.FormShow(Sender: TObject); procedure TfrmMain.ReaderBarcodeHandler(Sender: TObject; const ABarcodes: TBarcodes; const AError: string); begin - if Length(ABarcodes) > 0 then - begin - var - LBarcode: TBarcode; - for LBarcode in ABarcodes do - txtScans.Lines.Insert(0,Format('%s - (%s)', [LBarcode.Value, LBarcode.FormatDescription])); - end; + TThread.Synchronize(TThread.Current, + procedure + begin + if Length(ABarcodes) > 0 then + begin + var + LBarcode: TBarcode; + for LBarcode in ABarcodes do + txtScans.Lines.Insert(0,Format('%s - (%s)', [LBarcode.Value, LBarcode.FormatDescription])); + end; + tmrCapture.Enabled := True; + end + ); end; procedure TfrmMain.StartCamera; @@ -153,6 +182,7 @@ procedure TfrmMain.StartCamera; FCamera.IsActive := True; FIsScanning := True; tmrCapture.Enabled := True; + ExposureSlider.Value := FCamera.Exposure; end; procedure TfrmMain.StopCamera; @@ -192,6 +222,7 @@ procedure TfrmMain.txtScansClick(Sender: TObject); begin if TPlatformServices.Current.SupportsPlatformService(IFMXExtendedClipboardService, clip) then clip.SetText(txtScans.Text); + txtScans.Lines.Clear; end; From fab00a215ec8ef2c59a70f39f15a5c48d7b728a7 Mon Sep 17 00:00:00 2001 From: Jason Southwell Date: Tue, 18 Oct 2022 14:42:03 -0500 Subject: [PATCH 3/4] Set default exposure to 3/4 --- Demos/BarcodeAndCamera/BC.Forms.Main.pas | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Demos/BarcodeAndCamera/BC.Forms.Main.pas b/Demos/BarcodeAndCamera/BC.Forms.Main.pas index 7edd0900..a1791274 100644 --- a/Demos/BarcodeAndCamera/BC.Forms.Main.pas +++ b/Demos/BarcodeAndCamera/BC.Forms.Main.pas @@ -182,6 +182,8 @@ procedure TfrmMain.StartCamera; FCamera.IsActive := True; FIsScanning := True; tmrCapture.Enabled := True; + FCamera.Exposure := 0.75; + ExposureSlider.Value := FCamera.Exposure; end; From 70c61c5714b2125e452457af98eeba122140722a Mon Sep 17 00:00:00 2001 From: Jason Southwell Date: Tue, 18 Oct 2022 14:43:04 -0500 Subject: [PATCH 4/4] Fix Camera2 Flash --- Features/Camera/DW.Camera.Android.pas | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Features/Camera/DW.Camera.Android.pas b/Features/Camera/DW.Camera.Android.pas index 0e8a2e07..90d6816a 100644 --- a/Features/Camera/DW.Camera.Android.pas +++ b/Features/Camera/DW.Camera.Android.pas @@ -610,12 +610,13 @@ procedure TCameraCaptureSession.CaptureStillImage; end; TFlashMode.FlashOn: begin - LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_MODE, TJCameraMetadata.JavaClass.CONTROL_MODE_AUTO); - LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_AE_MODE, TJCameraMetadata.JavaClass.CONTROL_AE_MODE_ON_ALWAYS_FLASH); + //LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_MODE, TJCameraMetadata.JavaClass.CONTROL_MODE_AUTO); + LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_AE_MODE, TJCameraMetadata.JavaClass.CONTROL_AE_MODE_ON); + LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.FLASH_MODE, TJCameraMetadata.JavaClass.FLASH_MODE_TORCH); end; TFlashMode.AutoFlash: begin - LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_MODE, TJCameraMetadata.JavaClass.CONTROL_MODE_AUTO); + //LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_MODE, TJCameraMetadata.JavaClass.CONTROL_MODE_AUTO); LRequestHelper.setIntegerValue(TJCaptureRequest.JavaClass.CONTROL_AE_MODE, TJCameraMetadata.JavaClass.CONTROL_AE_MODE_ON_AUTO_FLASH); end; end;