diff --git a/Modules/DelphiFMX/DelphiFMX.dpr b/Modules/DelphiFMX/DelphiFMX.dpr
index 262b73f0..5a20b6ef 100644
--- a/Modules/DelphiFMX/DelphiFMX.dpr
+++ b/Modules/DelphiFMX/DelphiFMX.dpr
@@ -4,6 +4,11 @@ uses
System.StartUpCopy,
SysUtils,
Classes,
+ FMX.Forms,
+ FMX.Types,
+ {$IFDEF OSX}
+ FMX.Context.Metal,
+ {$ENDIF OSX}
uMain in 'uMain.pas';
{$I ..\..\Source\Definition.Inc}
@@ -16,11 +21,15 @@ exports
{$IFDEF MSWINDOWS}
{$E pyd}
{$ENDIF}
+{$WARN SYMBOL_PLATFORM OFF}
{$IFDEF LINUX}
{$SONAME 'DelphiFMX'}
-
{$ENDIF}
+{$WARN SYMBOL_PLATFORM ON}
begin
+ {$IFDEF OSX}
+ GlobalUseMetal := TCustomContextMetal.IsMetalSupported();
+ {$ENDIF OSX}
end.
diff --git a/Modules/DelphiFMX/DelphiFMX.dproj b/Modules/DelphiFMX/DelphiFMX.dproj
index a23bc18c..94c14f41 100644
--- a/Modules/DelphiFMX/DelphiFMX.dproj
+++ b/Modules/DelphiFMX/DelphiFMX.dproj
@@ -7,8 +7,8 @@
DelphiFMX.dpr
Linux64
{0C4154A5-D276-4D62-BA30-564FACD77917}
- 19.2
- 37011
+ 19.3
+ 168083
true
@@ -28,6 +28,11 @@
Base
true
+
+ true
+ Base
+ true
+
true
Base
@@ -66,6 +71,12 @@
true
true
+
+ true
+ Cfg_2
+ true
+ true
+
true
Cfg_2
@@ -99,6 +110,13 @@
Debug
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
+
+ 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
+ Base
+ true
+
Debug
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
@@ -129,6 +147,12 @@
true
+
+ true
+ true
+ Cfg_2
+ true
+
(None)
@@ -137,7 +161,6 @@
MainSource
-
Base
@@ -163,12 +186,12 @@
True
True
+ False
True
True
+ True
True
True
- False
- False
12
diff --git a/Modules/DelphiFMX/PythonVersionIndex.inc b/Modules/DelphiFMX/PythonVersionIndex.inc
deleted file mode 100644
index 3169c05c..00000000
--- a/Modules/DelphiFMX/PythonVersionIndex.inc
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/Modules/DelphiFMX/uMain.pas b/Modules/DelphiFMX/uMain.pas
index 022ff255..471bdb51 100644
--- a/Modules/DelphiFMX/uMain.pas
+++ b/Modules/DelphiFMX/uMain.pas
@@ -8,7 +8,8 @@ function PyInit_DelphiFMX: PPyObject; cdecl;
implementation
-uses WrapDelphi, WrapDelphiFMX;
+uses
+ System.SysUtils, WrapDelphi, WrapDelphiFMX;
var
gEngine : TPythonEngine;
@@ -23,11 +24,7 @@ function PyInit_DelphiFMX: PPyObject;
try
gEngine := TPythonEngine.Create(nil);
gEngine.AutoFinalize := False;
- gEngine.UseLastKnownVersion := False;
- // Adapt to the desired python version - Will only work with this version
- var PythonVersionIndex := {$I PythonVersionIndex.inc}; // 7 = 3.9
- gEngine.RegVersion := PYTHON_KNOWN_VERSIONS[PythonVersionIndex].RegVersion;
- gEngine.DllName := PYTHON_KNOWN_VERSIONS[PythonVersionIndex].DllName;
+ gEngine.UseLastKnownVersion := true;
gModule := TPythonModule.Create(nil);
gModule.Engine := gEngine;
@@ -38,8 +35,11 @@ function PyInit_DelphiFMX: PPyObject;
gDelphiWrapper.Engine := gEngine;
gDelphiWrapper.Module := gModule;
- gEngine.LoadDll;
+ gEngine.LoadDllInExtensionModule();
except
+ on E: Exception do begin
+ WriteLn('An error has occurred: ' + E.Message);
+ end;
end;
Result := gModule.Module;
end;
@@ -48,10 +48,12 @@ initialization
gEngine := nil;
gModule := nil;
gDelphiWrapper := nil;
+
finalization
gEngine.Free;
gModule.Free;
gDelphiWrapper.Free;
+
end.
diff --git a/Modules/DelphiVCL/DelphiVCL.dpr b/Modules/DelphiVCL/DelphiVCL.dpr
index 857e5b83..0275789e 100644
--- a/Modules/DelphiVCL/DelphiVCL.dpr
+++ b/Modules/DelphiVCL/DelphiVCL.dpr
@@ -5,7 +5,7 @@ uses
Classes,
uMain in 'uMain.pas';
-{$I Definition.Inc}
+{$I ..\..\Source\Definition.Inc}
exports
// This must match the pattern "PyInit_[ProjectName]"
diff --git a/Modules/DelphiVCL/PythonVersionIndex.inc b/Modules/DelphiVCL/PythonVersionIndex.inc
deleted file mode 100644
index 3169c05c..00000000
--- a/Modules/DelphiVCL/PythonVersionIndex.inc
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/Modules/DelphiVCL/uMain.pas b/Modules/DelphiVCL/uMain.pas
index b8d63e9d..5d64287b 100644
--- a/Modules/DelphiVCL/uMain.pas
+++ b/Modules/DelphiVCL/uMain.pas
@@ -8,7 +8,8 @@ function PyInit_DelphiVCL: PPyObject; cdecl;
implementation
-uses WrapDelphi, WrapDelphiVCL;
+uses
+ System.SysUtils, WrapDelphi, WrapDelphiVCL;
var
gEngine : TPythonEngine;
@@ -23,11 +24,7 @@ function PyInit_DelphiVCL: PPyObject;
try
gEngine := TPythonEngine.Create(nil);
gEngine.AutoFinalize := False;
- gEngine.UseLastKnownVersion := False;
- // Adapt to the desired python version - Will only work with this version
- var PythonVersionIndex := {$I PythonVersionIndex.inc}; // 7 = 3.9
- gEngine.RegVersion := PYTHON_KNOWN_VERSIONS[PythonVersionIndex].RegVersion;
- gEngine.DllName := PYTHON_KNOWN_VERSIONS[PythonVersionIndex].DllName;
+ gEngine.UseLastKnownVersion := true;
gModule := TPythonModule.Create(nil);
gModule.Engine := gEngine;
@@ -38,8 +35,11 @@ function PyInit_DelphiVCL: PPyObject;
gDelphiWrapper.Engine := gEngine;
gDelphiWrapper.Module := gModule;
- gEngine.LoadDll;
+ gEngine.LoadDllInExtensionModule();
except
+ on E: Exception do begin
+ WriteLn('An error has occurred: ' + E.Message);
+ end;
end;
Result := gModule.Module;
end;
@@ -48,10 +48,12 @@ initialization
gEngine := nil;
gModule := nil;
gDelphiWrapper := nil;
+
finalization
gEngine.Free;
gModule.Free;
gDelphiWrapper.Free;
+
end.
diff --git a/Packages/Delphi/Delphi 10.4+/Python.dproj b/Packages/Delphi/Delphi 10.4+/Python.dproj
index 38e62cca..05aea215 100644
--- a/Packages/Delphi/Delphi 10.4+/Python.dproj
+++ b/Packages/Delphi/Delphi 10.4+/Python.dproj
@@ -2,17 +2,37 @@
True
Package
- Debug
+ Release
VCL
Python.dpk
Win32
{018AAA56-F5BD-4A04-BCCA-A0043EAAA5CE}
- 19.1
- 3
+ 19.4
+ 168083
true
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
true
Base
@@ -28,31 +48,80 @@
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
+
+
+ true
+ Cfg_2
+ true
+ true
+
Python
+ ..\..\..\lib\$(Platform)\$(Config)
Python4Delphi - Run-time Engine Package
00400000
Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;DUnitX.Loggers.GUI;Winapi;System.Win;$(DCC_Namespace)
$(Auto)
true
true
+ true
CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
1033
- true
- .\$(Platform)\$(Config)
+
+
+ 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
+ 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
+
+
+ Debug
+ 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
+ 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
+ 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
+ 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
Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
Debug
+ Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
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=
@@ -62,11 +131,30 @@
false
0
+
+ ..\..\..\lib\$(Platform)\$(Config)
+ 1
+ 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=
+
+
+ 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=
+
DEBUG;$(DCC_Define)
true
false
+
+ 1
+ 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=
+
+
+ true
+
+
+ true
+
MainSource
@@ -76,6 +164,8 @@
+
+
@@ -85,10 +175,8 @@
-
- Cfg_2
- Base
-
+
+
Base
@@ -96,6 +184,10 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
@@ -105,709 +197,18 @@
-
- File C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\Python_D270.bpl not found
- File C:\Users\Public\Documents\Embarcadero\Studio\21.0\BPL\Python4Delphi270.bpl not found
- 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
-
+
+ True
+ True
+ False
+ True
+ True
+ True
True
True
-
-
-
- Python.bpl
- true
-
-
-
-
- 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
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 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\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
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- library\lib\arm64-v8a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
12
diff --git a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk
index 6b4a1606..b25bcf38 100644
--- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk
+++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk
@@ -13,8 +13,8 @@ package PythonFmx;
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
-{$OVERFLOWCHECKS OFF}
-{$RANGECHECKS OFF}
+{$OVERFLOWCHECKS ON}
+{$RANGECHECKS ON}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
@@ -33,30 +33,32 @@ package PythonFmx;
requires
rtl,
fmx,
- Python;
+ bindcompfmx,
+ python;
contains
FMX.PythonGUIInputOutput in '..\..\..\Source\fmx\FMX.PythonGUIInputOutput.pas',
+ WrapDelphiFmx in '..\..\..\Source\fmx\WrapDelphiFmx.pas',
WrapFmxActnList in '..\..\..\Source\fmx\WrapFmxActnList.pas',
+ WrapFmxColors in '..\..\..\Source\fmx\WrapFmxColors.pas',
WrapFmxComCtrls in '..\..\..\Source\fmx\WrapFmxComCtrls.pas',
WrapFmxControls in '..\..\..\Source\fmx\WrapFmxControls.pas',
+ WrapFmxDataBind in '..\..\..\Source\fmx\WrapFmxDataBind.pas',
WrapFmxDialogs in '..\..\..\Source\fmx\WrapFmxDialogs.pas',
+ WrapFmxEdit in '..\..\..\Source\fmx\WrapFmxEdit.pas',
WrapFmxForms in '..\..\..\Source\fmx\WrapFmxForms.pas',
WrapFmxGrids in '..\..\..\Source\fmx\WrapFmxGrids.pas',
WrapFmxLayouts in '..\..\..\Source\fmx\WrapFmxLayouts.pas',
- WrapFmxScrollBox in '..\..\..\Source\fmx\WrapFmxScrollBox.pas',
- WrapFmxShapes in '..\..\..\Source\fmx\WrapFmxShapes.pas',
- WrapFmxStdCtrls in '..\..\..\Source\fmx\WrapFmxStdCtrls.pas',
- WrapFmxTypes in '..\..\..\Source\fmx\WrapFmxTypes.pas',
- WrapDelphiFmx in '..\..\..\Source\fmx\WrapDelphiFmx.pas',
- WrapFmxEdit in '..\..\..\Source\fmx\WrapFmxEdit.pas',
WrapFmxListBox in '..\..\..\Source\fmx\WrapFmxListBox.pas',
+ WrapFmxListView in '..\..\..\Source\fmx\WrapFmxListView.pas',
WrapFmxMedia in '..\..\..\Source\fmx\WrapFmxMedia.pas',
+ WrapFmxMemo in '..\..\..\Source\fmx\WrapFmxMemo.pas',
WrapFmxMenus in '..\..\..\Source\fmx\WrapFmxMenus.pas',
+ WrapFmxScrollBox in '..\..\..\Source\fmx\WrapFmxScrollBox.pas',
+ WrapFmxShapes in '..\..\..\Source\fmx\WrapFmxShapes.pas',
+ WrapFmxStdActns in '..\..\..\Source\fmx\WrapFmxStdActns.pas',
+ WrapFmxStdCtrls in '..\..\..\Source\fmx\WrapFmxStdCtrls.pas',
WrapFmxStyles in '..\..\..\Source\fmx\WrapFmxStyles.pas',
- WrapFmxMemo in '..\..\..\Source\fmx\WrapFmxMemo.pas',
- WrapFmxColors in '..\..\..\Source\fmx\WrapFmxColors.pas',
- WrapFmxListView in '..\..\..\Source\fmx\WrapFmxListView.pas',
- WrapFmxDataBind in '..\..\..\Source\fmx\WrapFmxDataBind.pas';
+ WrapFmxTypes in '..\..\..\Source\fmx\WrapFmxTypes.pas';
end.
diff --git a/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj b/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj
index 3fb0f1d2..36d86082 100644
--- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj
+++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj
@@ -1,18 +1,43 @@

- {6C9FBAC1-1024-4A46-96EE-2CADEFE347AA}
+ {513BF750-373D-4C95-A672-78CA8DDF3F63}
PythonFmx.dpk
- 19.1
+ 19.4
FMX
True
- Debug
+ Release
Win32
- 3
+ 167955
Package
true
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
true
Base
@@ -40,7 +65,7 @@
true
- .\$(Platform)\$(Config)
+ ..\..\..\lib\$(Platform)\$(Config)
.\$(Platform)\$(Config)
false
false
@@ -52,12 +77,40 @@
System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
All
PythonFmx
- 1033
+ 1046
CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
Python4Delphi - Run-time Engine Package for FMX
true
$(Auto)
+
+ None
+ 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
+ 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
+
+
+ None
+ 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
+ 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
+
+
+ None
+ 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)
+
+
+ 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
+
+
+ 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
+
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
Debug
@@ -69,6 +122,7 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
Debug
true
+ 1033
DEBUG;$(DCC_Define)
@@ -77,6 +131,8 @@
true
true
true
+ true
+ true
false
@@ -95,24 +151,31 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- Cfg_2
- Base
-
Base
@@ -120,6 +183,10 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
@@ -130,31 +197,40 @@
PythonFmx.dpk
- 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
+ Python4Delphi - Design-time Engine Package
+ P4D AI&ML - Python environments
+ P4D AI&ML extension for Python packages
+ P4D AI&ML extension for Python packages - NumPy
+ P4D AI&ML extension for Python packages - Scikit-learn
+ P4D AI&ML extension for Python packages - PyTorch
+ File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\dclMatplotLib280.bpl not found
+ P4D AI&ML extension for Python packages - TensorFlow
+ P4D AI&ML extension for Python packages - TensorFlow
+ File C:\Users\Public\Documents\Embarcadero\Studio\22.0\dcp\Win32\Release\DUnitX_IDE_Expert_D11Alexandria.bpl not found
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ P4D AI&ML extension for Python packages - TensorFlow
-
-
+
+
true
-
-
- PythonFmx.bpl
+
+
true
-
-
+
+
true
-
-
+
+
+ PythonFmx.bpl
true
@@ -166,14 +242,14 @@
0
-
+
classes
- 1
+ 64
classes
- 1
+ 64
@@ -294,6 +370,16 @@
1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
res\drawable-ldpi
@@ -454,6 +540,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -467,6 +557,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -493,6 +587,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -520,6 +618,9 @@
0
+
+ 0
+
0
@@ -764,6 +865,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -792,6 +897,9 @@
1
+
+ 1
+
0
@@ -830,18 +938,25 @@
1
-
-
+
+
+
+
-
-
-
-
+
+
+
+ True
+ True
+ False
+ False
+ True
+ True
True
True
diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk b/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk
index 80698db8..383bb4fb 100644
--- a/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk
+++ b/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk
@@ -54,6 +54,7 @@ contains
WrapVclSamplesSpin in '..\..\..\Source\vcl\WrapVclSamplesSpin.pas',
WrapVclStdCtrls in '..\..\..\Source\vcl\WrapVclStdCtrls.pas',
WrapVclWinXCtrls in '..\..\..\Source\vcl\WrapVclWinXCtrls.pas',
- WrapVclThemes in '..\..\..\Source\vcl\WrapVclThemes.pas';
+ WrapVclThemes in '..\..\..\Source\vcl\WrapVclThemes.pas',
+ WrapVclMedia in '..\..\..\Source\vcl\WrapVclMedia.pas';
end.
diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj
index c6efc0e9..c86ebb4d 100644
--- a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj
+++ b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj
@@ -1,14 +1,14 @@

- {D8908301-393C-4CFA-8842-4948A9935E21}
- PythonVcl.dpk
- 19.1
- VCL
True
- Debug
+ Package
+ Release
+ VCL
+ PythonVcl.dpk
Win32
+ {D8908301-393C-4CFA-8842-4948A9935E21}
+ 19.4
3
- Package
true
@@ -39,55 +39,57 @@
Base
true
+
+ true
+ Cfg_2
+ true
+ true
+
- .\$(Platform)\$(Config)
+ PythonVcl
+ ..\..\..\lib\$(Platform)\$(Config)
+ Python4Delphi - Run-time Engine Package for VCL
.\$(Platform)\$(Config)
- false
- false
- false
- false
- false
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ $(Auto)
true
true
- System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
- All
- PythonVcl
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
- Python4Delphi - Run-time Engine Package for VCL
true
- $(Auto)
+ 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
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
Debug
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
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
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
Debug
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
true
- DEBUG;$(DCC_Define)
true
- false
- true
true
+ DEBUG;$(DCC_Define)
+ true
+ false
true
false
true
- 1033
- false
+ 0
RELEASE;$(DCC_Define)
+ false
0
- 0
+
+
+ true
@@ -97,9 +99,12 @@
+
+
+
@@ -110,10 +115,9 @@
-
- Cfg_2
- Base
-
+
+
+
Base
@@ -121,6 +125,10 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
@@ -130,725 +138,15 @@
PythonVcl.dpk
-
- 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
-
+
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- PythonVcl.bpl
- true
-
-
-
-
- PythonVcl.bpl
- true
-
-
-
-
- 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
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 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\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
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- library\lib\arm64-v8a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
+ False
+ False
+ False
+ False
+ False
+ False
True
True
diff --git a/Packages/Delphi/Delphi 10.4+/dclFmxP4DEngine.dres b/Packages/Delphi/Delphi 10.4+/dclFmxP4DEngine.dres
deleted file mode 100644
index 25d22b36..00000000
Binary files a/Packages/Delphi/Delphi 10.4+/dclFmxP4DEngine.dres and /dev/null differ
diff --git a/Packages/Delphi/Delphi 10.4+/dclP4DEngine.dres b/Packages/Delphi/Delphi 10.4+/dclP4DEngine.dres
deleted file mode 100644
index b835856a..00000000
Binary files a/Packages/Delphi/Delphi 10.4+/dclP4DEngine.dres and /dev/null differ
diff --git a/Packages/Delphi/Delphi 10.4+/dclPython.dproj b/Packages/Delphi/Delphi 10.4+/dclPython.dproj
index ef9f508c..00300534 100644
--- a/Packages/Delphi/Delphi 10.4+/dclPython.dproj
+++ b/Packages/Delphi/Delphi 10.4+/dclPython.dproj
@@ -1,14 +1,14 @@

- {D9AB994C-54A3-4E76-81C8-6D0BB035A091}
- dclPython.dpk
- 19.1
- None
True
- Debug
- Win32
- 3
Package
+ Release
+ None
+ dclPython.dpk
+ Win32
+ {D9AB994C-54A3-4E76-81C8-6D0BB035A091}
+ 19.4
+ 1
true
@@ -18,11 +18,6 @@
Base
true
-
- true
- Base
- true
-
true
Base
@@ -39,57 +34,55 @@
Base
true
+
+ true
+ Cfg_2
+ true
+ true
+
- .\$(Platform)\$(Config)
- .\$(Platform)\$(Config)
- false
- false
- false
- false
- false
- true
- true
- System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
- All
dclPython
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ All
+ ..\..\..\lib\$(Platform)\$(Config)
Python4Delphi - Design-time Engine Package
+ .\$(Platform)\$(Config)
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
true
$(Auto)
+ true
+ 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
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
Debug
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ rtl;Python;$(DCC_UsePackage)
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
- rtl;Python;$(DCC_UsePackage)
-
-
- rtl;$(DCC_UsePackage)
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug
- true
- DEBUG;$(DCC_Define)
true
- false
- true
true
+ DEBUG;$(DCC_Define)
+ true
+ false
true
+ 3
false
true
- 3
- false
+ 0
RELEASE;$(DCC_Define)
+ false
0
- 0
+
+
+ true
@@ -126,10 +119,6 @@
BITMAP
TPythonType
-
- Cfg_2
- Base
-
Base
@@ -137,730 +126,30 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
Package
-
- 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
-
dclPython.dpk
+
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- dclPython.bpl
- true
-
-
-
-
- 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
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 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\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
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- library\lib\arm64-v8a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
+ False
+ False
+ False
+ False
+ False
+ False
True
- True
+ False
12
diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk
index 1092117e..10d59d5e 100644
--- a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk
+++ b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk
@@ -10,21 +10,21 @@ package dclPythonFmx;
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
-{$LOCALSYMBOLS ON}
+{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
-{$OPTIMIZATION OFF}
+{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
-{$REFERENCEINFO ON}
+{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
-{$STACKFRAMES ON}
+{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
-{$DEFINE DEBUG}
+{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'Python4Delphi - Design-time Engine Package for FMX'}
{$LIBSUFFIX AUTO}
diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj
index c527bf9a..5a0748e7 100644
--- a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj
+++ b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj
@@ -1,14 +1,14 @@

- {E057921E-25DB-426E-8090-FE3F428894FF}
- dclPythonFmx.dpk
- 19.1
- None
True
- Debug
- Win32
- 3
Package
+ Release
+ None
+ dclPythonFmx.dpk
+ Win32
+ {E057921E-25DB-426E-8090-FE3F428894FF}
+ 19.4
+ 1
true
@@ -18,11 +18,6 @@
Base
true
-
- true
- Base
- true
-
true
Base
@@ -39,73 +34,67 @@
Base
true
+
+ true
+ Cfg_2
+ true
+ true
+
- .\$(Platform)\$(Config)
- .\$(Platform)\$(Config)
- false
- false
- false
- false
- false
- true
- true
- System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
- All
dclPythonFmx
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ All
+ ..\..\..\lib\$(Platform)\$(Config)
Python4Delphi - Design-time Engine Package for FMX
+ .\$(Platform)\$(Config)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ ..\..\..\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
true
$(Auto)
+ true
+ 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
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
Debug
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ rtl;PythonFmx;$(DCC_UsePackage)
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
- rtl;PythonFmx;$(DCC_UsePackage)
-
-
- rtl;$(DCC_UsePackage)
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug
- true
- DEBUG;$(DCC_Define)
true
- false
- true
true
+ DEBUG;$(DCC_Define)
+ true
+ false
true
false
true
- 1033
- false
+ 0
RELEASE;$(DCC_Define)
+ false
0
- 0
+
+
+ true
MainSource
-
+
BITMAP
TPythonGUIInputOutput
-
- Cfg_2
- Base
-
Base
@@ -113,6 +102,10 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
@@ -122,19 +115,19 @@
dclPythonFmx.dpk
-
- 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
-
+
+
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ False
+
-
-
- true
-
-
true
@@ -145,7 +138,12 @@
true
-
+
+
+ true
+
+
+
dclPythonFmx.bpl
true
@@ -159,14 +157,14 @@
0
-
+
classes
- 1
+ 64
classes
- 1
+ 64
@@ -287,6 +285,16 @@
1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
res\drawable-ldpi
@@ -447,6 +455,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -460,6 +472,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -486,6 +502,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -513,6 +533,9 @@
0
+
+ 0
+
0
@@ -757,6 +780,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -785,6 +812,9 @@
1
+
+ 1
+
0
@@ -823,21 +853,18 @@
1
-
-
+
+
+
+
-
-
-
-
+
+
+
-
- True
- True
-
12
diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj
index a168bee0..92a13f0a 100644
--- a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj
+++ b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj
@@ -1,14 +1,14 @@

- {48DDC28A-E154-4CA0-864A-30EB8C4CCBB3}
- dclPythonVcl.dpk
- 19.1
- None
True
- Debug
- Win32
- 3
Package
+ Release
+ None
+ dclPythonVcl.dpk
+ Win32
+ {48DDC28A-E154-4CA0-864A-30EB8C4CCBB3}
+ 19.4
+ 1
true
@@ -18,11 +18,6 @@
Base
true
-
- true
- Base
- true
-
true
Base
@@ -39,58 +34,54 @@
Base
true
+
+ true
+ Cfg_2
+ true
+ true
+
- .\$(Platform)\$(Config)
- .\$(Platform)\$(Config)
- false
- false
- false
- false
- false
- true
- true
- System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
- All
dclPythonVcl
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ All
+ ..\..\..\lib\$(Platform)\$(Config)
Python4Delphi - Design-Time Engine Package for VCL
+ .\$(Platform)\$(Config)
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
true
$(Auto)
-
-
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- Debug
- true
+ true
+ 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
- rtl;vcl;PythonVcl;$(DCC_UsePackage)
-
- rtl;vcl;$(DCC_UsePackage)
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
Debug
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ rtl;vcl;PythonVcl;$(DCC_UsePackage)
true
- DEBUG;$(DCC_Define)
true
- false
- true
true
+ DEBUG;$(DCC_Define)
+ true
+ false
true
+ 3
false
true
- 1033
- 3
- false
+ 0
RELEASE;$(DCC_Define)
+ false
0
- 0
+
+
+ ..\..\..\lib\$(Platform)\$(Config)
+ true
@@ -104,10 +95,6 @@
BITMAP
TPythonGUIInputOutput
-
- Cfg_2
- Base
-
Base
@@ -115,6 +102,10 @@
Cfg_1
Base
+
+ Cfg_2
+ Base
+
Delphi.Personality.12
@@ -124,721 +115,17 @@
dclPythonVcl.dpk
-
- 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
-
+
-
-
-
- dclPythonVcl.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- 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
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 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\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
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- library\lib\arm64-v8a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
+ False
+ False
+ False
+ False
+ False
+ False
True
- True
+ False
12
diff --git a/Packages/Delphi/Delphi 10.4+/dclVclP4DEngine.dres b/Packages/Delphi/Delphi 10.4+/dclVclP4DEngine.dres
deleted file mode 100644
index 6cd8c1bb..00000000
Binary files a/Packages/Delphi/Delphi 10.4+/dclVclP4DEngine.dres and /dev/null differ
diff --git a/README.md b/README.md
index 15caeffb..f9d1a890 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-![P4D Logo](https://github.com/pyscripter/python4delphi/wiki/Images/Python4Delphi(wide-transparent).png)
+
[Python](https://www.python.org) for [Delphi](https://www.embarcadero.com/products/delphi) (P4D) is a set of free components that wrap up the Python DLL into Delphi and Lazarus (FPC). They let you easily execute Python scripts, create new Python modules and new Python types. You can create Python extensions as DLLs and much more. P4D provides different levels of functionality:
diff --git a/Source/Definition.Inc b/Source/Definition.Inc
index 6b5f731a..e60baccc 100644
--- a/Source/Definition.Inc
+++ b/Source/Definition.Inc
@@ -171,6 +171,9 @@
{$DEFINE DELPHI10_2_OR_HIGHER}
{$DEFINE DELPHI10_3_OR_HIGHER}
{$DEFINE DELPHI10_4_OR_HIGHER}
+ {$IF RTLVERSION1042}
+ {$DEFINE DELPHI10_4_2} //Delphi 10.4.2
+ {$ENDIF RTLVERSION1042}
{$ENDIF}
{$IFDEF VER350} // Delphi 11
{$DEFINE DELPHI11}
@@ -202,9 +205,9 @@
{$IFDEF FPC}
{$MODE DELPHI}
{$IFDEF CPU64}
- {$DEFINE CPUX64}
+ {$DEFINE CPU64BITS}
{$ENDIF CPU64}
- {$IFDEF CPU32}
+ {$IFDEF CPU386}
{$DEFINE CPUX86}
{$ENDIF CPU32}
{$IFDEF DARWIN}
diff --git a/Source/PythonEngine.pas b/Source/PythonEngine.pas
index 65949d1f..7856ea0c 100644
--- a/Source/PythonEngine.pas
+++ b/Source/PythonEngine.pas
@@ -2278,7 +2278,6 @@ TPythonModule = class(TMethodsContainer)
procedure SetErrors( val : TErrors );
procedure SetModuleName( const val : AnsiString );
procedure SetDocString( value : TStringList );
-
public
// Constructors & destructors
constructor Create( AOwner : TComponent ); override;
@@ -2306,7 +2305,6 @@ TPythonModule = class(TMethodsContainer)
property Module : PPyObject read FModule;
property Clients[ idx : Integer ] : TEngineClient read GetClients;
property ClientCount : Integer read GetClientCount;
-
published
property DocString : TStringList read FDocString write SetDocString;
property ModuleName : AnsiString read FModuleName write SetModuleName;
@@ -6876,6 +6874,7 @@ procedure TError.Assign(Source: TPersistent);
begin
Name := TError(Source).Name;
Text := TError(Source).Text;
+ ErrorType := TError(Source).ErrorType;
Exit;
end;
inherited Assign(Source);
@@ -7103,7 +7102,6 @@ destructor TPythonModule.Destroy;
inherited;
end;
-
procedure TPythonModule.SetDocString( value : TStringList );
begin
FDocString.Assign( value );
diff --git a/Source/PythonVersions.pas b/Source/PythonVersions.pas
index 03dc7f9d..9eb3708c 100644
--- a/Source/PythonVersions.pas
+++ b/Source/PythonVersions.pas
@@ -104,13 +104,7 @@ function TPythonVersion.GetDLLName: string;
function TPythonVersion.ExpectedArchitecture: string;
begin
Result := '';
- {$IFDEF CPUX64}
- Result := '64bit';
- {$ENDIF}
- {$IFDEF CPU64}
- Result := '64bit';
- {$ENDIF}
- {$IFDEF CPU64bits}
+ {$IF Defined(CPUX64) or Defined(CPU64) or Defined(CPU64bits)}
Result := '64bit';
{$ENDIF}
if Result = '' then
diff --git a/Source/VarPyth.pas b/Source/VarPyth.pas
index 2297d30e..67c18ba8 100644
--- a/Source/VarPyth.pas
+++ b/Source/VarPyth.pas
@@ -40,7 +40,7 @@
interface
uses
- Variants, PythonEngine;
+ Variants, PythonEngine, Classes;
type
TSequenceType = (stTuple, stList);
@@ -108,6 +108,7 @@ function BuiltinModule: Variant; // return the builtin module
function SysModule: Variant; // return the builtin module 'sys'
function DatetimeModule: Variant; // return the builtin module 'datetime'
function Import(const AModule: string): Variant; // import a Python module and return the module object.
+function Reload(const AModule: Variant): Variant; //reload a Python imported module and return the module object.
function len(const AValue : Variant ): NativeInt; // return the length of a Python collection.
function _type(const AValue : Variant ): Variant; // return the type object of a Python object.
function iter(const AValue : Variant ): Variant; // return an iterator for the container AValue. You can call the 'next' method of the iterator until you catch the EPyStopIteration exception.
@@ -134,10 +135,13 @@ TVarPyEnumerateHelper = record
function VarPyIterate(const AValue: Variant): TVarPyEnumerateHelper;
+// Adds a python iterable items to a TStrings
+procedure VarPyToStrings(const AValue : Variant; const AStrings: TStrings);
+
implementation
uses
- VarUtils, SysUtils, TypInfo, Classes;
+ VarUtils, SysUtils, TypInfo;
type
TNamedParamDesc = record
@@ -275,9 +279,9 @@ TPythonData = class(TObject)
Reserved1, Reserved2, Reserved3: Word;
VPython: TPythonData;
Reserved4: Integer;
- {$IFDEF CPUX64}
+ {$IFDEF CPU64BITS}
Reserved5: Integer; // size is 24 bytes in 64bit
- {$ENDIF CPUX64}
+ {$ENDIF CPU64BITS}
end;
@@ -727,6 +731,22 @@ function Import(const AModule: string): Variant;
end; // of with
end;
+function Reload(const AModule: Variant): Variant;
+var
+ LModule: PPyObject;
+begin
+ with GetPythonEngine() do begin
+ LModule := PyImport_ReloadModule(ExtractPythonObjectFrom(AModule));
+ CheckError();
+ Assert(Assigned(LModule));
+ try
+ Result := VarPythonCreate(LModule);
+ finally
+ Py_XDecRef(LModule);
+ end; // of try
+ end; // of with
+end;
+
function GetObjectLength(AObject: PPyObject): NativeInt;
begin
with GetPythonEngine do
@@ -2434,6 +2454,14 @@ function TVarPyEnumerateHelper.GetEnumerator: TVarPyEnumerator;
Result.Create(FIterable);
end;
+procedure VarPyToStrings(const AValue : Variant; const AStrings: TStrings);
+var
+ V: Variant;
+begin
+ for V in VarPyIterate(AValue) do
+ AStrings.Add(V)
+end;
+
initialization
PythonVariantType := TPythonVariantType.Create;
finalization
diff --git a/Source/WrapDelphiWindows.pas b/Source/WrapDelphiWindows.pas
index cea6ca34..9601f057 100644
--- a/Source/WrapDelphiWindows.pas
+++ b/Source/WrapDelphiWindows.pas
@@ -9,17 +9,35 @@ interface
implementation
+{$IFDEF DELPHI11_OR_HIGHER}
+uses
+ System.Win.HighDpi, Winapi.ShellScaling;
+{$ENDIF DELPHI11_OR_HIGHER}
+
{ Register the wrappers, the globals and the constants }
type
TWindowsRegistration = class(TRegisteredUnit)
+ private
+ {$IFDEF DELPHI11_OR_HIGHER}
+ class function IsDpiAware_Wrapper(PySelf, AArgs: PPyObject): PPyObject; cdecl; static;
+ class function SetHighDpiAware_Wrapper(PySelf, AArgs: PPyObject): PPyObject; cdecl; static;
+ class function GetProcessDpiAwareness_Wrapper(PySelf, AArgs: PPyObject): PPyObject; cdecl; static;
+ class function SetProcessDpiAwareness_Wrapper(PySelf, AArgs: PPyObject): PPyObject; cdecl; static;
+ {$ENDIF DELPHI11_OR_HIGHER}
public
function Name : string; override;
procedure RegisterWrappers(APyDelphiWrapper : TPyDelphiWrapper); override;
procedure DefineVars(APyDelphiWrapper : TPyDelphiWrapper); override;
+ procedure DefineFunctions(APyDelphiWrapper : TPyDelphiWrapper); override;
end;
{ TWindowsRegistration }
+function TWindowsRegistration.Name: string;
+begin
+ Result := 'Windows';
+end;
+
procedure TWindowsRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
begin
inherited;
@@ -64,9 +82,31 @@ procedure TWindowsRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
{$ENDIF FPC}
end;
-function TWindowsRegistration.Name: string;
+procedure TWindowsRegistration.DefineFunctions(
+ APyDelphiWrapper: TPyDelphiWrapper);
begin
- Result := 'Windows';
+ inherited;
+ {$IFDEF DELPHI11_OR_HIGHER}
+ APyDelphiWrapper.RegisterFunction(PAnsiChar('IsDpiAware'),
+ TWindowsRegistration.IsDpiAware_Wrapper,
+ PAnsiChar('IsDPIAware()'#10 +
+ 'Check for process DPI awareness.'));
+
+ APyDelphiWrapper.RegisterFunction(PAnsiChar('SetHighDpiAware'),
+ TWindowsRegistration.SetHighDpiAware_Wrapper,
+ PAnsiChar('SetHighDpiAware()'#10 +
+ 'Automatically set the DPI awareness that best fits to the process.'));
+
+ APyDelphiWrapper.RegisterFunction(PAnsiChar('GetProcessDpiAwareness'),
+ TWindowsRegistration.GetProcessDpiAwareness_Wrapper,
+ PAnsiChar('GetProcessDpiAwareness()'#10 +
+ 'Get the DPI awareness of the process.'));
+
+ APyDelphiWrapper.RegisterFunction(PAnsiChar('SetProcessDpiAwareness'),
+ TWindowsRegistration.SetProcessDpiAwareness_Wrapper,
+ PAnsiChar('SetProcessDpiAwareness()'#10 +
+ 'Set the DPI awareness to the process.'));
+ {$ENDIF DELPHI11_OR_HIGHER}
end;
procedure TWindowsRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper);
@@ -74,7 +114,84 @@ procedure TWindowsRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapp
inherited;
end;
+{$IFDEF DELPHI11_OR_HIGHER}
+class function TWindowsRegistration.IsDpiAware_Wrapper(PySelf, AArgs: PPyObject): PPyObject;
+begin
+ with GetPythonEngine() do
+ begin
+ if IsDpiAware() then
+ Result := GetPythonEngine().ReturnTrue()
+ else
+ Result := GetPythonEngine().ReturnFalse();
+ end;
+end;
+
+class function TWindowsRegistration.SetHighDpiAware_Wrapper(PySelf, AArgs: PPyObject): PPyObject;
+begin
+ with GetPythonEngine() do
+ begin
+ if SetHighDpiAware() then
+ Result := GetPythonEngine().ReturnTrue()
+ else
+ Result := GetPythonEngine().ReturnFalse();
+ end;
+end;
+
+class function TWindowsRegistration.GetProcessDpiAwareness_Wrapper(PySelf,
+ AArgs: PPyObject): PPyObject;
+var
+ LErrorCode: HResult;
+ LDpiAwareness: TProcessDpiAwareness;
+begin
+ with GetPythonEngine() do
+ begin
+ if (PyArg_ParseTuple(AArgs, ':GetProcessDpiAwareness') <> 0) then
+ begin
+ LErrorCode := WinAPI.ShellScaling.GetProcessDpiAwareness(GetCurrentProcess(), LDpiAwareness);
+
+ Result := PyList_New(0);
+ PyList_Append(Result, PyLong_FromLong(LErrorCode));
+ PyList_Append(Result, PyLong_FromLong(Ord(LDpiAwareness)));
+ end else
+ Result := nil;
+ end;
+end;
+
+class function TWindowsRegistration.SetProcessDpiAwareness_Wrapper(PySelf,
+ AArgs: PPyObject): PPyObject;
+var
+ LErrorCode: HResult;
+ LDpiAwareness: integer;
+begin
+ with GetPythonEngine() do
+ begin
+ if (PyArg_ParseTuple(AArgs, 'i:SetProcessDpiAwareness', @LDpiAwareness) <> 0) then
+ begin
+ if not (LDpiAwareness in [
+ Ord(Low(TProcessDpiAwareness))
+ ..
+ Ord(High(TProcessDpiAwareness))]) then
+ begin
+ PyErr_SetString(PyExc_ValueError^, 'DPI awareness value out of range');
+ Result := nil;
+ end else begin
+ LErrorCode := WinAPI.ShellScaling.SetProcessDpiAwareness(TProcessDpiAwareness(LDpiAwareness));
+ Result := PyLong_FromLong(LErrorCode);
+ end;
+ end else
+ Result := nil;
+ end;
+end;
+{$ENDIF DELPHI11_OR_HIGHER}
+
initialization
RegisteredUnits.Add( TWindowsRegistration.Create );
+
+ {$IFDEF MSWINDOWS}
+ {$IFDEF DELPHI11_OR_HIGHER}
+ SetHighDpiAware();
+ {$ENDIF DELPHI11_OR_HIGHER}
+ {$ENDIF MSWINDOWS}
+
end.
diff --git a/Source/fmx/WrapDelphiFmx.pas b/Source/fmx/WrapDelphiFmx.pas
index f8a60252..c77c8957 100644
--- a/Source/fmx/WrapDelphiFmx.pas
+++ b/Source/fmx/WrapDelphiFmx.pas
@@ -7,16 +7,18 @@ implementation
uses
WrapDelphiTypes,
WrapDelphiClasses,
- {$IFDEF Windows}
+ {$IFDEF MSWINDOWS}
WrapDelphiWindows,
- {$ENDIF Windows}
+ {$ENDIF MSWINDOWS}
WrapDelphiDataBind,
WrapFmxTypes,
+ WrapFmxControls,
WrapFmxStdCtrls,
WrapFmxEdit,
WrapFmxListBox,
WrapFmxListView,
WrapFmxActnList,
+ WrapFmxStdActns,
WrapFmxComCtrls,
WrapFmxDialogs,
WrapFmxForms,
diff --git a/Source/fmx/WrapFmxActnList.pas b/Source/fmx/WrapFmxActnList.pas
index 05ebc253..3fc5c32b 100644
--- a/Source/fmx/WrapFmxActnList.pas
+++ b/Source/fmx/WrapFmxActnList.pas
@@ -49,6 +49,15 @@ TPyDelphiAction = class(TPyDelphiContainedAction)
property DelphiObject: TAction read GetDelphiObject write SetDelphiObject;
end;
+ TPyDelphiCustomViewAction = class(TPyDelphiCustomAction)
+ private
+ function GetDelphiObject: TCustomViewAction;
+ procedure SetDelphiObject(const Value: TCustomViewAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ property DelphiObject: TCustomViewAction read GetDelphiObject write SetDelphiObject;
+ end;
+
implementation
{ Register the wrappers, the globals and the constants }
@@ -79,6 +88,7 @@ procedure TActnListRegistration.RegisterWrappers(APyDelphiWrapper
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiActionList);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomAction);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomViewAction);
end;
{ TPyDelphiCustomActionList }
@@ -149,6 +159,24 @@ procedure TPyDelphiAction.SetDelphiObject(const Value: TAction);
inherited DelphiObject := Value;
end;
+{ TPyDelphiCustomViewAction }
+
+class function TPyDelphiCustomViewAction.DelphiObjectClass: TClass;
+begin
+ Result := TCustomViewAction;
+end;
+
+function TPyDelphiCustomViewAction.GetDelphiObject: TCustomViewAction;
+begin
+ Result := TCustomViewAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomViewAction.SetDelphiObject(
+ const Value: TCustomViewAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
initialization
RegisteredUnits.Add(TActnListRegistration.Create());
diff --git a/Source/fmx/WrapFmxColors.pas b/Source/fmx/WrapFmxColors.pas
index e5f5060f..1289d3a6 100644
--- a/Source/fmx/WrapFmxColors.pas
+++ b/Source/fmx/WrapFmxColors.pas
@@ -4,7 +4,7 @@ interface
uses
FMX.Colors,
- WrapFmxControls, WrapFmxStdCtrls, WrapFmxListBox;
+ PythonEngine, WrapFmxControls, WrapFmxStdCtrls, WrapFmxListBox;
type
TPyDelphiColorBox = class(TPyDelphiControl)
@@ -13,6 +13,7 @@ TPyDelphiColorBox = class(TPyDelphiControl)
procedure SetDelphiObject(const Value: TColorBox);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorBox read GetDelphiObject
write SetDelphiObject;
@@ -35,6 +36,7 @@ TPyDelphiColorPicker = class(TPyDelphiControl)
procedure SetDelphiObject(const Value: TColorPicker);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorPicker read GetDelphiObject
write SetDelphiObject;
@@ -57,6 +59,7 @@ TPyDelphiColorPanel = class(TPyDelphiControl)
procedure SetDelphiObject(const Value: TColorPanel);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorPanel read GetDelphiObject
write SetDelphiObject;
@@ -68,6 +71,7 @@ TPyDelphiComboColorBox = class(TPyDelphiStyledControl)
procedure SetDelphiObject(const Value: TComboColorBox);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TComboColorBox read GetDelphiObject
write SetDelphiObject;
@@ -79,6 +83,7 @@ TPyDelphiColorButton = class(TPyDelphiCustomButton)
procedure SetDelphiObject(const Value: TColorButton);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorButton read GetDelphiObject
write SetDelphiObject;
@@ -90,6 +95,7 @@ TPyDelphiColorListBox = class(TPyDelphiCustomListBox)
procedure SetDelphiObject(const Value: TColorListBox);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorListBox read GetDelphiObject
write SetDelphiObject;
@@ -101,6 +107,7 @@ TPyDelphiCustomColorComboBox = class(TPyDelphiCustomComboBox)
procedure SetDelphiObject(const Value: TCustomColorComboBox);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TCustomColorComboBox read GetDelphiObject
write SetDelphiObject;
@@ -112,6 +119,7 @@ TPyDelphiColorComboBox = class(TPyDelphiCustomColorComboBox)
procedure SetDelphiObject(const Value: TColorComboBox);
public
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterGetSets(PythonType: TPythonType); override;
// Properties
property DelphiObject: TColorComboBox read GetDelphiObject
write SetDelphiObject;
@@ -120,10 +128,21 @@ TPyDelphiColorComboBox = class(TPyDelphiCustomColorComboBox)
implementation
uses
- WrapDelphi;
+ System.Rtti, WrapDelphi;
-{ Register the wrappers, the globals and the constants }
type
+ { Type extension }
+ TPyDelphiCommonColorEx = class
+ protected
+ // Property Getters
+ class function Get_Color(AContext: Pointer): PPyObject; cdecl;
+ // Property Setters
+ class function Set_Color(AValue: PPyObject; AContext: Pointer): integer; cdecl;
+ protected
+ class procedure RegisterGetSets(const APythonType: TPythonType);
+ end;
+
+ { Register the wrappers, the globals and the constants }
TColorsRegistration = class(TRegisteredUnit)
public
function Name: string; override;
@@ -171,6 +190,12 @@ function TPyDelphiColorBox.GetDelphiObject: TColorBox;
Result := TColorBox(inherited DelphiObject);
end;
+class procedure TPyDelphiColorBox.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiColorBox.SetDelphiObject(const Value: TColorBox);
begin
inherited DelphiObject := Value;
@@ -205,6 +230,12 @@ function TPyDelphiColorPicker.GetDelphiObject: TColorPicker;
Result := TColorPicker(inherited DelphiObject);
end;
+class procedure TPyDelphiColorPicker.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiColorPicker.SetDelphiObject(const Value: TColorPicker);
begin
inherited DelphiObject := Value;
@@ -240,6 +271,12 @@ function TPyDelphiColorPanel.GetDelphiObject: TColorPanel;
Result := TColorPanel(inherited DelphiObject);
end;
+class procedure TPyDelphiColorPanel.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiColorPanel.SetDelphiObject(const Value: TColorPanel);
begin
inherited DelphiObject := Value;
@@ -257,6 +294,12 @@ function TPyDelphiComboColorBox.GetDelphiObject: TComboColorBox;
Result := TComboColorBox(inherited DelphiObject);
end;
+class procedure TPyDelphiComboColorBox.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiComboColorBox.SetDelphiObject(const Value: TComboColorBox);
begin
inherited DelphiObject := Value;
@@ -274,6 +317,12 @@ function TPyDelphiColorButton.GetDelphiObject: TColorButton;
Result := TColorButton(inherited DelphiObject);
end;
+class procedure TPyDelphiColorButton.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiColorButton.SetDelphiObject(const Value: TColorButton);
begin
inherited DelphiObject := Value;
@@ -291,6 +340,12 @@ function TPyDelphiColorListBox.GetDelphiObject: TColorListBox;
Result := TColorListBox(inherited DelphiObject);
end;
+class procedure TPyDelphiColorListBox.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiColorListBox.SetDelphiObject(const Value: TColorListBox);
begin
inherited DelphiObject := Value;
@@ -308,6 +363,13 @@ function TPyDelphiCustomColorComboBox.GetDelphiObject: TCustomColorComboBox;
Result := TCustomColorComboBox(inherited DelphiObject);
end;
+class procedure TPyDelphiCustomColorComboBox.RegisterGetSets(
+ PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
procedure TPyDelphiCustomColorComboBox.SetDelphiObject(
const Value: TCustomColorComboBox);
begin
@@ -321,6 +383,12 @@ class function TPyDelphiColorComboBox.DelphiObjectClass: TClass;
Result := TColorComboBox;
end;
+class procedure TPyDelphiColorComboBox.RegisterGetSets(PythonType: TPythonType);
+begin
+ inherited;
+ TPyDelphiCommonColorEx.RegisterGetSets(PythonType);
+end;
+
function TPyDelphiColorComboBox.GetDelphiObject: TColorComboBox;
begin
Result := TColorComboBox(inherited DelphiObject);
@@ -331,6 +399,71 @@ procedure TPyDelphiColorComboBox.SetDelphiObject(const Value: TColorComboBox);
inherited DelphiObject := Value;
end;
+{ TPyDelphiCommonColorEx }
+
+class procedure TPyDelphiCommonColorEx.RegisterGetSets(
+ const APythonType: TPythonType);
+begin
+ with APythonType do begin
+ //Fixing the cardinal->variant/variant->cardinal conversion error
+ AddGetSet('Color',
+ @TPyDelphiCommonColorEx.Get_Color,
+ @TPyDelphiCommonColorEx.Set_Color,
+ 'Returns a integer with the color value', nil);
+ end;
+end;
+
+class function TPyDelphiCommonColorEx.Get_Color(AContext: Pointer): PPyObject;
+var
+ LSelf: TPyDelphiControl;
+ LRttiCtx: TRttiContext;
+ LRttiType: TRttiType;
+ LRttiProp: TRttiProperty;
+begin
+ LSelf := PythonToDelphi(PPyObject(Self)) as TPyDelphiControl;
+ LRttiCtx := TRttiContext.Create();
+ try
+ LRttiType := LRttiCtx.GetType(LSelf.DelphiObject.ClassInfo);
+ LRttiProp := LRttiType.GetProperty('Color');
+ if not Assigned(LRttiProp) then
+ Exit(GetPythonEngine().Py_None);
+
+ Result := GetPythonEngine().PyLong_FromLong(
+ LRttiProp.GetValue(LSelf.DelphiObject).AsInteger);
+ finally
+ LRttiCtx.Free();
+ end;
+end;
+
+class function TPyDelphiCommonColorEx.Set_Color(AValue: PPyObject;
+ AContext: Pointer): integer;
+var
+ LValue: integer;
+ LSelf: TPyDelphiControl;
+ LRttiCtx: TRttiContext;
+ LRttiType: TRttiType;
+ LRttiProp: TRttiProperty;
+begin
+ if CheckIntAttribute(AValue, 'Color', LValue) then begin
+ with GetPythonEngine() do begin
+ LSelf := PythonToDelphi(PPyObject(Self)) as TPyDelphiControl;
+ LRttiCtx := TRttiContext.Create();
+ try
+ LRttiType := LRttiCtx.GetType(LSelf.DelphiObject.ClassInfo);
+ LRttiProp := LRttiType.GetProperty('Color');
+ if not Assigned(LRttiProp) then
+ Exit(-1);
+
+ LRttiProp.SetValue(LSelf.DelphiObject, LValue);
+ finally
+ LRttiCtx.Free();
+ end;
+ Result := 0;
+ end;
+ end else
+ Result := -1;
+end;
+
initialization
RegisteredUnits.Add(TColorsRegistration.Create());
diff --git a/Source/fmx/WrapFmxControls.pas b/Source/fmx/WrapFmxControls.pas
index 9ea954d3..89a6ab9c 100644
--- a/Source/fmx/WrapFmxControls.pas
+++ b/Source/fmx/WrapFmxControls.pas
@@ -6,9 +6,8 @@ interface
uses
Classes, SysUtils, TypInfo, Types,
- FMX.Types, FMX.Controls,
- PythonEngine, WrapDelphi, WrapDelphiClasses, WrapFmxTypes,
- FMX.Controls.Presentation;
+ FMX.Types, FMX.Controls, FMX.Controls.Presentation,
+ PythonEngine, WrapDelphi, WrapDelphiClasses, WrapFmxTypes, WrapFmxActnList;
type
{
@@ -17,6 +16,17 @@ interface
SetBounds and Repaint
Exposes properties Parent and Visible
}
+
+ { TKeyEvent wrapper }
+ TKeyEventHandler = class(TEventHandler)
+ protected
+ procedure DoEvent(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
+ public
+ constructor Create(APyDelphiWrapper: TPyDelphiWrapper; AComponent: TObject;
+ APropertyInfo: PPropInfo; ACallable: PPyObject); override;
+ class function GetTypeInfo: PTypeInfo; override;
+ end;
+
TPyDelphiControl = class (TPyDelphiFmxObject)
private
function GetDelphiObject: TControl;
@@ -136,6 +146,17 @@ TPyDelphiPresentedControl = class(TPyDelphiStyledControl)
property DelphiObject: TPresentedControl read GetDelphiObject write SetDelphiObject;
end;
+ TPyDelphiCustomControlAction = class(TPyDelphiCustomAction)
+ private
+ function GetDelphiObject: TCustomControlAction;
+ procedure SetDelphiObject(const Value: TCustomControlAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TCustomControlAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
implementation
type
@@ -147,6 +168,32 @@ TControlsRegistration = class(TRegisteredUnit)
procedure DefineVars(APyDelphiWrapper : TPyDelphiWrapper); override;
end;
+{ TControlsRegistration }
+
+procedure TControlsRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+end;
+
+function TControlsRegistration.Name: string;
+begin
+ Result := 'Controls';
+end;
+
+procedure TControlsRegistration.RegisterWrappers(
+ APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiControl);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiStyledControl);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiTextControl);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiStyleBook);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiPopup);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomControlAction);
+
+ APyDelphiWrapper.EventHandlers.RegisterHandler(TKeyEventHandler);
+end;
+
{ TPyDelphiControl }
function TPyDelphiControl.BringToFront_Wrapper(args: PPyObject): PPyObject;
@@ -425,29 +472,6 @@ function TPyDelphiControl.Set_Visible(AValue: PPyObject;
Result := -1;
end;
-{ TControlsRegistration }
-
-procedure TControlsRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
-begin
- inherited;
-end;
-
-function TControlsRegistration.Name: string;
-begin
- Result := 'Controls';
-end;
-
-procedure TControlsRegistration.RegisterWrappers(
- APyDelphiWrapper: TPyDelphiWrapper);
-begin
- inherited;
- APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiControl);
- APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiStyledControl);
- APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiTextControl);
- APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiStyleBook);
- APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiPopup);
-end;
-
{ TControlsAccess }
class function TControlsAccess.ExpectedContainerClass: TClass;
@@ -740,6 +764,93 @@ procedure TPyDelphiPresentedControl.SetDelphiObject(
inherited DelphiObject := Value;
end;
+{ TPyDelphiCustomControlAction }
+
+class function TPyDelphiCustomControlAction.DelphiObjectClass: TClass;
+begin
+ Result := TCustomControlAction;
+end;
+
+function TPyDelphiCustomControlAction.GetDelphiObject: TCustomControlAction;
+begin
+ Result := TCustomControlAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomControlAction.SetDelphiObject(
+ const Value: TCustomControlAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TKeyEventHandler }
+
+constructor TKeyEventHandler.Create(APyDelphiWrapper: TPyDelphiWrapper;
+ AComponent: TObject; APropertyInfo: PPropInfo; ACallable: PPyObject);
+var
+ LMethod : TMethod;
+begin
+ inherited;
+ LMethod.Code := @TKeyEventHandler.DoEvent;
+ LMethod.Data := Self;
+ SetMethodProp(AComponent, APropertyInfo, LMethod);
+end;
+
+class function TKeyEventHandler.GetTypeInfo: PTypeInfo;
+begin
+ Result := System.TypeInfo(TKeyEvent);
+end;
+
+procedure TKeyEventHandler.DoEvent(Sender: TObject; var Key: Word;
+ var KeyChar: WideChar; Shift: TShiftState);
+var
+ LPyObject: PPyObject;
+ LPyTuple: PPyObject;
+ LPyResult: PPyObject;
+ LPyKey: PPyObject;
+ LVarKeyParam: TPyDelphiVarParameter;
+ LPyKeyChar: PPyObject;
+ LVarKeyCharParam: TPyDelphiVarParameter;
+ LKeyCharStr: string;
+begin
+ Assert(Assigned(PyDelphiWrapper));
+ if Assigned(Callable) and PythonOK then
+ with GetPythonEngine do begin
+ LPyObject := PyDelphiWrapper.Wrap(Sender);
+ //var parameters
+ LPyKey := CreateVarParam(PyDelphiWrapper, Key);
+ LVarKeyParam := PythonToDelphi(LPyKey) as TPyDelphiVarParameter;
+ LPyKeyChar := CreateVarParam(PyDelphiWrapper, KeyChar);
+ LVarKeyCharParam := PythonToDelphi(LPyKeyChar) as TPyDelphiVarParameter;
+
+ LPyTuple := PyTuple_New(4);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 0, LPyObject);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 1, LPyKey);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 2, LPyKeyChar);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 3, ShiftToPython(Shift));
+ try
+ LPyResult := PyObject_CallObject(Callable, LPyTuple);
+ if Assigned(LPyResult) then
+ begin
+ Py_DECREF(LPyResult);
+ if PyLong_Check(LVarKeyParam.Value) then
+ Key := PyLong_AsLong(LVarKeyParam.Value);
+
+ if (LVarKeyCharParam.Value = Py_None) then
+ KeyChar := #0
+ else if PyUnicode_Check(LVarKeyCharParam.Value) then
+ begin
+ LKeyCharStr := PyUnicodeAsString(LVarKeyCharParam.Value);
+ if Length(LKeyCharStr) > 0 then
+ KeyChar := LKeyCharStr[1];
+ end;
+ end;
+ finally
+ Py_DECREF(LPyTuple);
+ end;
+ CheckError();
+ end;
+end;
+
initialization
RegisteredUnits.Add(TControlsRegistration.Create);
diff --git a/Source/fmx/WrapFmxForms.pas b/Source/fmx/WrapFmxForms.pas
index 439d89a9..f89ca34a 100644
--- a/Source/fmx/WrapFmxForms.pas
+++ b/Source/fmx/WrapFmxForms.pas
@@ -14,9 +14,15 @@ TPyDelphiApplication = class(TPyDelphiComponent)
private
function GetDelphiObject: TApplication;
procedure SetDelphiObject(const Value: TApplication);
+ protected
+ // Class methods
+ function Initialize_Wrapper(AArgs: PPyObject): PPyObject; cdecl;
+ function Run_Wrapper(AArgs: PPyObject): PPyObject; cdecl;
public
+ constructor Create( APythonType : TPythonType ); override;
// Class methods
class function DelphiObjectClass: TClass; override;
+ class procedure RegisterMethods(APythonType: TPythonType); override;
// Properties
property DelphiObject: TApplication read GetDelphiObject write SetDelphiObject;
end;
@@ -116,7 +122,14 @@ EInvalidFormClass = class(Exception);
implementation
uses
- System.Types, System.IOUtils, System.Rtti;
+ System.Types, System.IOUtils, System.Rtti, System.Messaging;
+
+{$IFDEF OSX}
+var
+ gDelphiMainForm: TCommonCustomForm;
+ gPythonMainForm: TCommonCustomForm;
+ gFormsCreatedSubscription: integer;
+{$ENDIF OSX}
{ Register the wrappers, the globals and the constants }
type
@@ -128,6 +141,13 @@ TFormsRegistration = class(TRegisteredUnit)
procedure DefineFunctions(APyDelphiWrapper : TPyDelphiWrapper); override;
end;
+{$IFDEF OSX}
+ TInternalMainForm = class(TForm)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+{$ENDIF}
+
{ TFormsRegistration }
procedure TFormsRegistration.DefineFunctions(
@@ -167,6 +187,28 @@ procedure TFormsRegistration.RegisterWrappers(
{ TPyDelphiApplication }
+constructor TPyDelphiApplication.Create(APythonType: TPythonType);
+begin
+ inherited;
+ {$IFDEF OSX}
+ gFormsCreatedSubscription := TMessageManager.DefaultManager.SubscribeToMessage(
+ TFormsCreatedMessage,
+ procedure(const Sender: TObject; const M: TMessage) begin
+ if (Sender = Application) and Assigned(gDelphiMainForm) then begin
+ if Assigned(gPythonMainForm) then begin
+ Application.MainForm := gPythonMainForm;
+ gPythonMainForm.Hide();
+ gPythonMainForm.Show();
+ end;
+ FreeAndNil(gDelphiMainForm);
+ gPythonMainForm := nil;
+ TMessageManager.DefaultManager.Unsubscribe(TFormsCreatedMessage,
+ gFormsCreatedSubscription);
+ end;
+ end);
+ {$ENDIF OSX}
+end;
+
class function TPyDelphiApplication.DelphiObjectClass: TClass;
begin
Result := TApplication;
@@ -182,6 +224,41 @@ procedure TPyDelphiApplication.SetDelphiObject(const Value: TApplication);
inherited DelphiObject := Value;
end;
+function TPyDelphiApplication.Initialize_Wrapper(AArgs: PPyObject): PPyObject;
+begin
+ Application.Initialize();
+ {$IFDEF OSX}
+ //The application initialization routine in macOS requires
+ //the main form standard creation way,
+ //due to MainMenu creation and others.
+ Application.CreateForm(TInternalMainForm, gDelphiMainForm);
+ {$ENDIF OSX}
+ Result := GetPythonEngine().ReturnNone();
+end;
+
+function TPyDelphiApplication.Run_Wrapper(AArgs: PPyObject): PPyObject;
+begin
+ {$IFDEF OSX}
+ gPythonMainForm := Application.MainForm;
+ Application.MainForm := nil;
+ {$ENDIF OSX}
+ Application.Run();
+ Result := GetPythonEngine().ReturnNone();
+end;
+
+class procedure TPyDelphiApplication.RegisterMethods(APythonType: TPythonType);
+begin
+ inherited;
+ with APythonType do begin
+ AddMethod('Initialize', @TPyDelphiApplication.Initialize_Wrapper,
+ 'TApplication.Initialize()'#10 +
+ 'Initialize the application');
+ AddMethod('Run', @TPyDelphiApplication.Run_Wrapper,
+ 'TApplication.Run()'#10 +
+ 'Run the application');
+ end;
+end;
+
{ TCloseQueryEventHandler }
constructor TCloseQueryEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper;
@@ -358,10 +435,15 @@ function TPyDelphiCommonCustomForm.LoadProps_Wrapper(
begin
Adjust(@Self);
- if InternalReadComponent(FindResource(), DelphiObject) then
- Result := GetPythonEngine().ReturnTrue
- else
- Result := GetPythonEngine().ReturnFalse;
+ try
+ if InternalReadComponent(FindResource(), DelphiObject) then
+ Exit(GetPythonEngine().ReturnTrue);
+ except
+ on E: Exception do
+ with GetPythonEngine do
+ PyErr_SetString(PyExc_RuntimeError^, PAnsiChar(AnsiString(E.Message)));
+ end;
+ Result := nil;
end;
class procedure TPyDelphiCommonCustomForm.RegisterMethods(
@@ -465,6 +547,21 @@ procedure TPyDelphiScreen.SetDelphiObject(const Value: TScreen);
inherited DelphiObject := Value;
end;
+{$IFDEF OSX}
+
+{ TInternalMainForm }
+
+constructor TInternalMainForm.Create(AOwner: TComponent);
+begin
+ CreateNew(AOwner);
+ Name := '_InternalDelphiMainForm';
+ Left := -10;
+ ClientHeight := 1;
+ ClientWidth := 1;
+end;
+
+{$ENDIF OSX}
+
Initialization
RegisteredUnits.Add(TFormsRegistration.Create);
diff --git a/Source/fmx/WrapFmxMedia.pas b/Source/fmx/WrapFmxMedia.pas
index f63e19d8..19b7f556 100644
--- a/Source/fmx/WrapFmxMedia.pas
+++ b/Source/fmx/WrapFmxMedia.pas
@@ -4,7 +4,9 @@
interface
uses
- PythonEngine, WrapFmxTypes, FMX.Media, WrapDelphi, System.TypInfo;
+ System.TypInfo, FMX.Media,
+ PythonEngine, WrapDelphi,
+ WrapFmxTypes, WrapFmxControls, WrapFmxActnList, WrapFmxStdActns;
type
TSampleBufferReadyEventHandler = class(TEventHandler)
@@ -29,6 +31,128 @@ TPyDelphiCameraComponent = class(TPyDelphiFmxObject)
write SetDelphiObject;
end;
+ //Media player wrappers
+ TPyDelphiCustomMediaCodec = class(TPyDelphiObject)
+ private
+ function GetDelphiObject: TCustomMediaCodec;
+ procedure SetDelphiObject(const Value: TCustomMediaCodec);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TCustomMediaCodec read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMedia = class(TPyDelphiObject)
+ private
+ function GetDelphiObject: TMedia;
+ procedure SetDelphiObject(const Value: TMedia);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMedia read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerControl = class(TPyDelphiControl)
+ private
+ function GetDelphiObject: TMediaPlayerControl;
+ procedure SetDelphiObject(const Value: TMediaPlayerControl);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerControl read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayer = class(TPyDelphiFmxObject)
+ private
+ function GetDelphiObject: TMediaPlayer;
+ procedure SetDelphiObject(const Value: TMediaPlayer);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayer read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiCustomMediaPlayerAction = class(TPyDelphiCustomAction)
+ private
+ function GetDelphiObject: TCustomMediaPlayerAction;
+ procedure SetDelphiObject(const Value: TCustomMediaPlayerAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TCustomMediaPlayerAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerStart = class(TPyDelphiCustomMediaPlayerAction)
+ private
+ function GetDelphiObject: TMediaPlayerStart;
+ procedure SetDelphiObject(const Value: TMediaPlayerStart);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerStart read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerStop = class(TPyDelphiCustomMediaPlayerAction)
+ private
+ function GetDelphiObject: TMediaPlayerStop;
+ procedure SetDelphiObject(const Value: TMediaPlayerStop);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerStop read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerPause = class(TPyDelphiCustomMediaPlayerAction)
+ private
+ function GetDelphiObject: TMediaPlayerPlayPause;
+ procedure SetDelphiObject(const Value: TMediaPlayerPlayPause);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerPlayPause read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerValue = class(TPyDelphiCustomValueRangeAction)
+ private
+ function GetDelphiObject: TMediaPlayerValue;
+ procedure SetDelphiObject(const Value: TMediaPlayerValue);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerValue read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerCurrentTime = class(TPyDelphiMediaPlayerValue)
+ private
+ function GetDelphiObject: TMediaPlayerCurrentTime;
+ procedure SetDelphiObject(const Value: TMediaPlayerCurrentTime);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerCurrentTime read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiMediaPlayerVolume = class(TPyDelphiMediaPlayerValue)
+ private
+ function GetDelphiObject: TMediaPlayerVolume;
+ procedure SetDelphiObject(const Value: TMediaPlayerVolume);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TMediaPlayerVolume read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
implementation
type
@@ -56,6 +180,17 @@ procedure TFMXMediaRegistration.RegisterWrappers(APyDelphiWrapper
begin
inherited;
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCameraComponent);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomMediaCodec);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerControl);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayer);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMedia);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomMediaPlayerAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerStart);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerStop);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerPause);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerValue);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerCurrentTime);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayerVolume);
APyDelphiWrapper.EventHandlers.RegisterHandler(TSampleBufferReadyEventHandler);
end;
@@ -132,6 +267,202 @@ procedure TPyDelphiCameraComponent.SetDelphiObject
inherited DelphiObject := Value;
end;
+{ TPyDelphiCustomMediaCodec }
+
+class function TPyDelphiCustomMediaCodec.DelphiObjectClass: TClass;
+begin
+ Result := TCustomMediaCodec;
+end;
+
+function TPyDelphiCustomMediaCodec.GetDelphiObject: TCustomMediaCodec;
+begin
+ Result := TCustomMediaCodec(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomMediaCodec.SetDelphiObject(
+ const Value: TCustomMediaCodec);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMedia }
+
+class function TPyDelphiMedia.DelphiObjectClass: TClass;
+begin
+ Result := TMedia;
+end;
+
+function TPyDelphiMedia.GetDelphiObject: TMedia;
+begin
+ Result := TMedia(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMedia.SetDelphiObject(const Value: TMedia);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerControl }
+
+class function TPyDelphiMediaPlayerControl.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerControl;
+end;
+
+function TPyDelphiMediaPlayerControl.GetDelphiObject: TMediaPlayerControl;
+begin
+ Result := TMediaPlayerControl(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerControl.SetDelphiObject(
+ const Value: TMediaPlayerControl);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayer }
+
+class function TPyDelphiMediaPlayer.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayer;
+end;
+
+function TPyDelphiMediaPlayer.GetDelphiObject: TMediaPlayer;
+begin
+ Result := TMediaPlayer(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayer.SetDelphiObject(const Value: TMediaPlayer);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiCustomMediaPlayerAction }
+
+class function TPyDelphiCustomMediaPlayerAction.DelphiObjectClass: TClass;
+begin
+ Result := TCustomMediaPlayerAction;
+end;
+
+function TPyDelphiCustomMediaPlayerAction.GetDelphiObject: TCustomMediaPlayerAction;
+begin
+ Result := TCustomMediaPlayerAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomMediaPlayerAction.SetDelphiObject(
+ const Value: TCustomMediaPlayerAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerStart }
+
+class function TPyDelphiMediaPlayerStart.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerStart;
+end;
+
+function TPyDelphiMediaPlayerStart.GetDelphiObject: TMediaPlayerStart;
+begin
+ Result := TMediaPlayerStart(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerStart.SetDelphiObject(
+ const Value: TMediaPlayerStart);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerStop }
+
+class function TPyDelphiMediaPlayerStop.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerStop;
+end;
+
+function TPyDelphiMediaPlayerStop.GetDelphiObject: TMediaPlayerStop;
+begin
+ Result := TMediaPlayerStop(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerStop.SetDelphiObject(
+ const Value: TMediaPlayerStop);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerPause }
+
+class function TPyDelphiMediaPlayerPause.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerPlayPause;
+end;
+
+function TPyDelphiMediaPlayerPause.GetDelphiObject: TMediaPlayerPlayPause;
+begin
+ Result := TMediaPlayerPlayPause(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerPause.SetDelphiObject(
+ const Value: TMediaPlayerPlayPause);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerValue }
+
+class function TPyDelphiMediaPlayerValue.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerValue;
+end;
+
+function TPyDelphiMediaPlayerValue.GetDelphiObject: TMediaPlayerValue;
+begin
+ Result := TMediaPlayerValue(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerValue.SetDelphiObject(
+ const Value: TMediaPlayerValue);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerCurrentTime }
+
+class function TPyDelphiMediaPlayerCurrentTime.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerCurrentTime;
+end;
+
+function TPyDelphiMediaPlayerCurrentTime.GetDelphiObject: TMediaPlayerCurrentTime;
+begin
+ Result := TMediaPlayerCurrentTime(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerCurrentTime.SetDelphiObject(
+ const Value: TMediaPlayerCurrentTime);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiMediaPlayerVolume }
+
+class function TPyDelphiMediaPlayerVolume.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayerVolume;
+end;
+
+function TPyDelphiMediaPlayerVolume.GetDelphiObject: TMediaPlayerVolume;
+begin
+ Result := TMediaPlayerVolume(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayerVolume.SetDelphiObject(
+ const Value: TMediaPlayerVolume);
+begin
+ inherited DelphiObject := Value;
+end;
+
initialization
RegisteredUnits.Add(TFMXMediaRegistration.Create());
diff --git a/Source/fmx/WrapFmxStdActns.pas b/Source/fmx/WrapFmxStdActns.pas
new file mode 100644
index 00000000..0c96ebe1
--- /dev/null
+++ b/Source/fmx/WrapFmxStdActns.pas
@@ -0,0 +1,454 @@
+{$I ..\Definition.Inc}
+unit WrapFmxStdActns;
+
+interface
+
+uses
+ FMX.StdActns,
+ PythonEngine, WrapDelphi, WrapFmxControls, WrapFmxActnList, WrapDelphiClasses;
+
+type
+ TPyDelphiHintAction = class(TPyDelphiCustomAction)
+ private
+ function GetDelphiObject: THintAction;
+ procedure SetDelphiObject(const Value: THintAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: THintAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiSysCommonAction = class(TPyDelphiCustomAction)
+ private
+ function GetDelphiObject: TSysCommonAction;
+ procedure SetDelphiObject(const Value: TSysCommonAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TSysCommonAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiFileExit = class(TPyDelphiSysCommonAction)
+ private
+ function GetDelphiObject: TFileExit;
+ procedure SetDelphiObject(const Value: TFileExit);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TFileExit read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiWindowClose = class(TPyDelphiSysCommonAction)
+ private
+ function GetDelphiObject: TWindowClose;
+ procedure SetDelphiObject(const Value: TWindowClose);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TWindowClose read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiFileHideApp = class(TPyDelphiSysCommonAction)
+ private
+ function GetDelphiObject: TFileHideApp;
+ procedure SetDelphiObject(const Value: TFileHideApp);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TFileHideApp read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiFileHideAppOthers = class(TPyDelphiFileHideApp)
+ private
+ function GetDelphiObject: TFileHideAppOthers;
+ procedure SetDelphiObject(const Value: TFileHideAppOthers);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TFileHideAppOthers read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiObjectViewAction = class(TPyDelphiCustomViewAction)
+ private
+ function GetDelphiObject: TObjectViewAction;
+ procedure SetDelphiObject(const Value: TObjectViewAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TObjectViewAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiVirtualKeyboard = class(TPyDelphiObjectViewAction)
+ private
+ function GetDelphiObject: TVirtualKeyboard;
+ procedure SetDelphiObject(const Value: TVirtualKeyboard);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TVirtualKeyboard read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiViewAction = class(TPyDelphiObjectViewAction)
+ private
+ function GetDelphiObject: TViewAction;
+ procedure SetDelphiObject(const Value: TViewAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TViewAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiBaseValueRange = class(TPyDelphiPersistent)
+ private
+ function GetDelphiObject: TBaseValueRange;
+ procedure SetDelphiObject(const Value: TBaseValueRange);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TBaseValueRange read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiCustomValueRange = class(TPyDelphiBaseValueRange)
+ private
+ function GetDelphiObject: TCustomValueRange;
+ procedure SetDelphiObject(const Value: TCustomValueRange);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TCustomValueRange read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiValueRange = class(TPyDelphiCustomValueRange)
+ private
+ function GetDelphiObject: TValueRange;
+ procedure SetDelphiObject(const Value: TValueRange);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TValueRange read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiCustomValueRangeAction = class(TPyDelphiCustomControlAction)
+ private
+ function GetDelphiObject: TCustomValueRangeAction;
+ procedure SetDelphiObject(const Value: TCustomValueRangeAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TCustomValueRangeAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+ TPyDelphiValueRangeAction = class(TPyDelphiCustomValueRangeAction)
+ private
+ function GetDelphiObject: TValueRangeAction;
+ procedure SetDelphiObject(const Value: TValueRangeAction);
+ public
+ class function DelphiObjectClass: TClass; override;
+ public
+ property DelphiObject: TValueRangeAction read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
+implementation
+
+type
+ TStdActnsRegistration = class(TRegisteredUnit)
+ public
+ function Name: string; override;
+ procedure RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); override;
+ procedure DefineVars(APyDelphiWrapper: TPyDelphiWrapper); override;
+ end;
+
+{ TFMXStdActns }
+
+function TStdActnsRegistration.Name: string;
+begin
+ Result := 'StdActns';
+end;
+
+procedure TStdActnsRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+end;
+
+procedure TStdActnsRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiHintAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiSysCommonAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiFileExit);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiWindowClose);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiFileHideApp);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiFileHideAppOthers);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiObjectViewAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiVirtualKeyboard);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiViewAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiBaseValueRange);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomValueRange);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiValueRange);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomValueRangeAction);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiValueRangeAction);
+end;
+
+{ TPyDelphiHintAction }
+
+class function TPyDelphiHintAction.DelphiObjectClass: TClass;
+begin
+ Result := THintAction;
+end;
+
+function TPyDelphiHintAction.GetDelphiObject: THintAction;
+begin
+ Result := THintAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiHintAction.SetDelphiObject(const Value: THintAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiSysCommonAction }
+
+class function TPyDelphiSysCommonAction.DelphiObjectClass: TClass;
+begin
+ Result := TSysCommonAction;
+end;
+
+function TPyDelphiSysCommonAction.GetDelphiObject: TSysCommonAction;
+begin
+ Result := TSysCommonAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiSysCommonAction.SetDelphiObject(
+ const Value: TSysCommonAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiFileExit }
+
+class function TPyDelphiFileExit.DelphiObjectClass: TClass;
+begin
+ Result := TFileExit;
+end;
+
+function TPyDelphiFileExit.GetDelphiObject: TFileExit;
+begin
+ Result := TFileExit(inherited DelphiObject);
+end;
+
+procedure TPyDelphiFileExit.SetDelphiObject(const Value: TFileExit);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiWindowClose }
+
+class function TPyDelphiWindowClose.DelphiObjectClass: TClass;
+begin
+ Result := TWindowClose;
+end;
+
+function TPyDelphiWindowClose.GetDelphiObject: TWindowClose;
+begin
+ Result := TWindowClose(inherited DelphiObject);
+end;
+
+procedure TPyDelphiWindowClose.SetDelphiObject(const Value: TWindowClose);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiFileHideApp }
+
+class function TPyDelphiFileHideApp.DelphiObjectClass: TClass;
+begin
+ Result := TFileHideApp;
+end;
+
+function TPyDelphiFileHideApp.GetDelphiObject: TFileHideApp;
+begin
+ Result := TFileHideApp(inherited DelphiObject);
+end;
+
+procedure TPyDelphiFileHideApp.SetDelphiObject(const Value: TFileHideApp);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiFileHideAppOthers }
+
+class function TPyDelphiFileHideAppOthers.DelphiObjectClass: TClass;
+begin
+ Result := TFileHideAppOthers;
+end;
+
+function TPyDelphiFileHideAppOthers.GetDelphiObject: TFileHideAppOthers;
+begin
+ Result := TFileHideAppOthers(inherited DelphiObject);
+end;
+
+procedure TPyDelphiFileHideAppOthers.SetDelphiObject(
+ const Value: TFileHideAppOthers);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiObjectViewAction }
+
+class function TPyDelphiObjectViewAction.DelphiObjectClass: TClass;
+begin
+ Result := TObjectViewAction;
+end;
+
+function TPyDelphiObjectViewAction.GetDelphiObject: TObjectViewAction;
+begin
+ Result := TObjectViewAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiObjectViewAction.SetDelphiObject(
+ const Value: TObjectViewAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiVirtualKeyboard }
+
+class function TPyDelphiVirtualKeyboard.DelphiObjectClass: TClass;
+begin
+ Result := TVirtualKeyboard;
+end;
+
+function TPyDelphiVirtualKeyboard.GetDelphiObject: TVirtualKeyboard;
+begin
+ Result := TVirtualKeyboard(inherited DelphiObject);
+end;
+
+procedure TPyDelphiVirtualKeyboard.SetDelphiObject(
+ const Value: TVirtualKeyboard);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiViewAction }
+
+class function TPyDelphiViewAction.DelphiObjectClass: TClass;
+begin
+ Result := TViewAction;
+end;
+
+function TPyDelphiViewAction.GetDelphiObject: TViewAction;
+begin
+ Result := TViewAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiViewAction.SetDelphiObject(const Value: TViewAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiBaseValueRange }
+
+class function TPyDelphiBaseValueRange.DelphiObjectClass: TClass;
+begin
+ Result := TBaseValueRange;
+end;
+
+function TPyDelphiBaseValueRange.GetDelphiObject: TBaseValueRange;
+begin
+ Result := TBaseValueRange(inherited DelphiObject);
+end;
+
+procedure TPyDelphiBaseValueRange.SetDelphiObject(const Value: TBaseValueRange);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiCustomValueRange }
+
+class function TPyDelphiCustomValueRange.DelphiObjectClass: TClass;
+begin
+ Result := TCustomValueRange;
+end;
+
+function TPyDelphiCustomValueRange.GetDelphiObject: TCustomValueRange;
+begin
+ Result := TCustomValueRange(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomValueRange.SetDelphiObject(
+ const Value: TCustomValueRange);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiValueRange }
+
+class function TPyDelphiValueRange.DelphiObjectClass: TClass;
+begin
+ Result := TValueRange;
+end;
+
+function TPyDelphiValueRange.GetDelphiObject: TValueRange;
+begin
+ Result := TValueRange(inherited DelphiObject);
+end;
+
+procedure TPyDelphiValueRange.SetDelphiObject(const Value: TValueRange);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiCustomValueRangeAction }
+
+class function TPyDelphiCustomValueRangeAction.DelphiObjectClass: TClass;
+begin
+ Result := TCustomValueRangeAction;
+end;
+
+function TPyDelphiCustomValueRangeAction.GetDelphiObject: TCustomValueRangeAction;
+begin
+ Result := TCustomValueRangeAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomValueRangeAction.SetDelphiObject(
+ const Value: TCustomValueRangeAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiValueRangeAction }
+
+class function TPyDelphiValueRangeAction.DelphiObjectClass: TClass;
+begin
+ Result := TValueRangeAction;
+end;
+
+function TPyDelphiValueRangeAction.GetDelphiObject: TValueRangeAction;
+begin
+ Result := TValueRangeAction(inherited DelphiObject);
+end;
+
+procedure TPyDelphiValueRangeAction.SetDelphiObject(
+ const Value: TValueRangeAction);
+begin
+ inherited DelphiObject := Value;
+end;
+
+initialization
+ RegisteredUnits.Add(TStdActnsRegistration.Create);
+
+end.
diff --git a/Source/fmx/WrapFmxStdCtrls.pas b/Source/fmx/WrapFmxStdCtrls.pas
index 3daeacc0..aba27274 100644
--- a/Source/fmx/WrapFmxStdCtrls.pas
+++ b/Source/fmx/WrapFmxStdCtrls.pas
@@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, FMX.StdCtrls,
- PythonEngine, WrapDelphi, WrapDelphiClasses, WrapFmxControls;
+ PythonEngine, WrapDelphi, WrapDelphiClasses, WrapFmxControls, WrapFmxActnList;
type
TPyDelphiPresentedTextControl = class(TPyDelphiStyledControl)
diff --git a/Source/vcl/WrapDelphiVCL.pas b/Source/vcl/WrapDelphiVCL.pas
index 339b3456..ea9f5392 100644
--- a/Source/vcl/WrapDelphiVCL.pas
+++ b/Source/vcl/WrapDelphiVCL.pas
@@ -28,6 +28,7 @@ implementation
WrapVclSamplesSpin,
WrapVclWinXCtrls,
WrapVclThemes,
- WrapVclDialogs;
+ WrapVclDialogs,
+ WrapVclMedia;
end.
diff --git a/Source/vcl/WrapVclComCtrls.pas b/Source/vcl/WrapVclComCtrls.pas
index 955d521d..8dfec06b 100644
--- a/Source/vcl/WrapVclComCtrls.pas
+++ b/Source/vcl/WrapVclComCtrls.pas
@@ -177,6 +177,24 @@ TPyDelphiCustomTabControl = class (TPyDelphiCustomCustomTabControl)
property DelphiObject: TTabControl read GetDelphiObject write SetDelphiObject;
end;
+ TPyDelphiCustomStatusBar = class (TPyDelphiWinControl)
+ private
+ function GetDelphiObject: TCustomStatusBar;
+ procedure SetDelphiObject(const Value: TCustomStatusBar);
+ public
+ class function DelphiObjectClass : TClass; override;
+ property DelphiObject: TCustomStatusBar read GetDelphiObject write SetDelphiObject;
+ end;
+
+ TPyDelphiStatusBar = class (TPyDelphiCustomStatusBar)
+ private
+ function GetDelphiObject: TStatusBar;
+ procedure SetDelphiObject(const Value: TStatusBar);
+ public
+ class function DelphiObjectClass : TClass; override;
+ property DelphiObject: TStatusBar read GetDelphiObject write SetDelphiObject;
+ end;
+
implementation
uses
@@ -217,6 +235,8 @@ procedure TComCtrlsRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrap
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiToolbar);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomCustomTabControl);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomTabControl);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomStatusBar);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiStatusBar);
APyDelphiWrapper.EventHandlers.RegisterHandler(TTabChangingEventHandler);
end;
@@ -864,6 +884,41 @@ procedure TPyDelphiCustomTabControl.SetDelphiObject(const Value: TTabControl);
inherited DelphiObject := Value;
end;
+{ TPyDelphiCustomStatusBar }
+
+class function TPyDelphiCustomStatusBar.DelphiObjectClass: TClass;
+begin
+ Result := TCustomStatusBar;
+end;
+
+function TPyDelphiCustomStatusBar.GetDelphiObject: TCustomStatusBar;
+begin
+ Result := TCustomStatusBar(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomStatusBar.SetDelphiObject(
+ const Value: TCustomStatusBar);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiStatusBar }
+
+class function TPyDelphiStatusBar.DelphiObjectClass: TClass;
+begin
+ Result := TStatusBar;
+end;
+
+function TPyDelphiStatusBar.GetDelphiObject: TStatusBar;
+begin
+ Result := TStatusBar(inherited DelphiObject);
+end;
+
+procedure TPyDelphiStatusBar.SetDelphiObject(const Value: TStatusBar);
+begin
+ inherited DelphiObject := Value;
+end;
+
initialization
RegisteredUnits.Add( TComCtrlsRegistration.Create );
{$IFNDEF FPC}
diff --git a/Source/vcl/WrapVclControls.pas b/Source/vcl/WrapVclControls.pas
index cc4e9b1b..21310b5d 100644
--- a/Source/vcl/WrapVclControls.pas
+++ b/Source/vcl/WrapVclControls.pas
@@ -144,6 +144,26 @@ TKeyEventHandler = class(TEventHandler)
PropertyInfo : PPropInfo; Callable : PPyObject); override;
class function GetTypeInfo : PTypeInfo; override;
end;
+
+ { TMouseEvent wrapper }
+ TMouseEventHandler = class(TEventHandler)
+ protected
+ procedure DoEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
+ public
+ constructor Create(PyDelphiWrapper : TPyDelphiWrapper; Component : TObject;
+ PropertyInfo : PPropInfo; Callable : PPyObject); override;
+ class function GetTypeInfo : PTypeInfo; override;
+ end;
+
+ { TMouseMoveEvent wrapper }
+ TMouseMoveEventHandler = class(TEventHandler)
+ protected
+ procedure DoEvent(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
+ public
+ constructor Create(PyDelphiWrapper : TPyDelphiWrapper; Component : TObject;
+ PropertyInfo : PPropInfo; Callable : PPyObject); override;
+ class function GetTypeInfo : PTypeInfo; override;
+ end;
implementation
@@ -192,6 +212,9 @@ procedure TControlsRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrap
APyDelphiWrapper.EventHandlers.RegisterHandler(TKeyPressEventHandler);
APyDelphiWrapper.EventHandlers.RegisterHandler(TKeyEventHandler);
+
+ APyDelphiWrapper.EventHandlers.RegisterHandler(TMouseEventHandler);
+ APyDelphiWrapper.EventHandlers.RegisterHandler(TMouseMoveEventHandler);
end;
{ TPyDelphiControl }
@@ -754,6 +777,100 @@ class function TKeyEventHandler.GetTypeInfo: PTypeInfo;
Result := System.TypeInfo(TKeyEvent);
end;
+{ TMouseEventHandler }
+
+constructor TMouseEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper;
+ Component: TObject; PropertyInfo: PPropInfo; Callable: PPyObject);
+var
+ Method : TMethod;
+begin
+ inherited;
+ Method.Code := @TMouseEventHandler.DoEvent;
+ Method.Data := Self;
+ SetMethodProp(Component, PropertyInfo, Method);
+end;
+
+procedure TMouseEventHandler.DoEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
+var
+ PyObject, PyTuple, PyButton, PyX, PyY, PyResult : PPyObject;
+begin
+ Assert(Assigned(PyDelphiWrapper));
+ if Assigned(Callable) and PythonOK then
+ with GetPythonEngine do begin
+ PyObject := PyDelphiWrapper.Wrap(Sender);
+ PyButton := PyLong_FromLong(Ord(Button));
+ PyX := PyLong_FromLong(X);
+ PyY := PyLong_FromLong(Y);
+ PyTuple := PyTuple_New(5);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 0, PyObject);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 1, PyButton);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 2, ShiftToPython(Shift));
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 3, PyX);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 4, PyY);
+ try
+ PyResult := PyObject_CallObject(Callable, PyTuple);
+ if Assigned(PyResult) then
+ begin
+ Py_DECREF(PyResult);
+ end;
+ finally
+ Py_DECREF(PyTuple);
+ end;
+ CheckError;
+ end;
+end;
+
+class function TMouseEventHandler.GetTypeInfo: PTypeInfo;
+begin
+ Result := System.TypeInfo(TMouseEvent);
+end;
+
+{ TMouseMoveEventHandler }
+
+constructor TMouseMoveEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper;
+ Component: TObject; PropertyInfo: PPropInfo; Callable: PPyObject);
+var
+ Method : TMethod;
+begin
+ inherited;
+ Method.Code := @TMouseMoveEventHandler.DoEvent;
+ Method.Data := Self;
+ SetMethodProp(Component, PropertyInfo, Method);
+end;
+
+procedure TMouseMoveEventHandler.DoEvent(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
+var
+ PyObject, PyTuple, PyX, PyY, PyResult : PPyObject;
+begin
+ Assert(Assigned(PyDelphiWrapper));
+ if Assigned(Callable) and PythonOK then
+ with GetPythonEngine do begin
+ PyObject := PyDelphiWrapper.Wrap(Sender);
+ PyX := PyLong_FromLong(X);
+ PyY := PyLong_FromLong(Y);
+ PyTuple := PyTuple_New(4);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 0, PyObject);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 1, ShiftToPython(Shift));
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 2, PyX);
+ GetPythonEngine.PyTuple_SetItem(PyTuple, 3, PyY);
+ try
+ PyResult := PyObject_CallObject(Callable, PyTuple);
+ if Assigned(PyResult) then
+ begin
+ Py_DECREF(PyResult);
+ end;
+ finally
+ Py_DECREF(PyTuple);
+ end;
+ CheckError;
+ end;
+end;
+
+class function TMouseMoveEventHandler.GetTypeInfo: PTypeInfo;
+begin
+ Result := System.TypeInfo(TMouseMoveEvent);
+end;
+
initialization
RegisteredUnits.Add(TControlsRegistration.Create);
end.
diff --git a/Source/vcl/WrapVclDialogs.pas b/Source/vcl/WrapVclDialogs.pas
index a24f11f1..cfedc8dd 100644
--- a/Source/vcl/WrapVclDialogs.pas
+++ b/Source/vcl/WrapVclDialogs.pas
@@ -45,6 +45,17 @@ TPyDelphiFileOpenDialog = class(TPyDelphiComponent)
write SetDelphiObject;
end;
+ TPyDelphiSaveDialog = class(TPyDelphiOpenDialog)
+ private
+ function GetDelphiObject: TSaveDialog;
+ procedure SetDelphiObject(const Value: TSaveDialog);
+ public
+ class function DelphiObjectClass: TClass; override;
+ // Properties
+ property DelphiObject: TSaveDialog read GetDelphiObject
+ write SetDelphiObject;
+ end;
+
implementation
uses
@@ -102,6 +113,7 @@ procedure TDialogRegistration.RegisterWrappers(APyDelphiWrapper
inherited;
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiOpenDialog);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiFileOpenDialog);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiSaveDialog);
end;
{ TPyDelphiOpenDialog }
@@ -206,6 +218,23 @@ procedure TPyDelphiFileOpenDialog.SetDelphiObject(const Value: TFileOpenDialog);
inherited DelphiObject := Value;
end;
+{ TPyDelphiSaveDialog }
+
+class function TPyDelphiSaveDialog.DelphiObjectClass: TClass;
+begin
+ Result := TSaveDialog;
+end;
+
+function TPyDelphiSaveDialog.GetDelphiObject: TSaveDialog;
+begin
+ Result := TSaveDialog(inherited DelphiObject);
+end;
+
+procedure TPyDelphiSaveDialog.SetDelphiObject(const Value: TSaveDialog);
+begin
+ inherited DelphiObject := Value;
+end;
+
initialization
RegisteredUnits.Add(TDialogRegistration.Create);
CoInitialize(nil);
diff --git a/Source/vcl/WrapVclForms.pas b/Source/vcl/WrapVclForms.pas
index 4a722da1..d0a34631 100644
--- a/Source/vcl/WrapVclForms.pas
+++ b/Source/vcl/WrapVclForms.pas
@@ -584,10 +584,17 @@ function TPyDelphiCustomForm.LoadProps_Wrapper(args: PPyObject): PPyObject;
begin
Adjust(@Self);
- if InternalReadComponent(FindResource(), DelphiObject) then
- Result := GetPythonEngine().ReturnTrue
- else
- Result := GetPythonEngine().ReturnFalse;
+ try
+ if InternalReadComponent(FindResource(), DelphiObject) then
+ Exit(GetPythonEngine().ReturnTrue)
+ else
+ Exit(GetPythonEngine().ReturnFalse);
+ except
+ on E: Exception do
+ GetPythonEngine().PyErr_SetString(PyExc_RuntimeError^,
+ PAnsiChar(AnsiString(E.Message)));
+ end;
+ Result := nil;
end;
function TPyDelphiCustomForm.Set_ModalResult(AValue: PPyObject;
@@ -1041,9 +1048,9 @@ class procedure TPyDelphiScreen.RegisterGetSets(PythonType: TPythonType);
AddGetSet('DesktopRect', @TPyDelphiScreen.Get_DesktopRect, nil,
'Specifies the boundaries of the virtual desktop relative to the upper-left corner of the primary monitor.', nil);
AddGetSet('DesktopLeft', @TPyDelphiScreen.Get_DesktopLeft, nil,
- 'Specifies the x-coordinate of the desktop’s left edge relative to the upper-left corner of the primary monitor.', nil);
+ 'Specifies the x-coordinate of the desktop’s left edge relative to the upper-left corner of the primary monitor.', nil);
AddGetSet('DesktopTop', @TPyDelphiScreen.Get_DesktopTop, nil,
- 'Specifies the y-coordinate of the entire desktop’s top edge relative to the upper-left corner of the primary monitor.', nil);
+ 'Specifies the y-coordinate of the entire desktop’s top edge relative to the upper-left corner of the primary monitor.', nil);
{$ENDIF FPC}
AddGetSet('DesktopWidth', @TPyDelphiScreen.Get_DesktopWidth, nil,
'Specifies the width of the entire virtual desktop.', nil);
@@ -1106,7 +1113,7 @@ class procedure TPyDelphiScreen.RegisterMethods(PythonType: TPythonType);
'Allows forms to be aligned in the screen.');
PythonType.AddMethod('Realign', @TPyDelphiScreen.Realign_Wrapper,
'TScreen.Realign()'#10 +
- 'Realigns the screen’s forms according to their Align properties.');
+ 'Realigns the screen’s forms according to their Align properties.');
PythonType.AddMethod('ResetFonts', @TPyDelphiScreen.ResetFonts_Wrapper,
'TScreen.ResetFonts()'#10 +
'Reinitializes the fonts listed in the Fonts property.');
@@ -1399,7 +1406,7 @@ class procedure TPyDelphiMonitor.RegisterGetSets(PythonType: TPythonType);
AddGetSet('Handle', @TPyDelphiMonitor.Get_Handle, nil,
'Indicates the Windows handle for the monitor.', nil);
AddGetSet('MonitorNum', @TPyDelphiMonitor.Get_MonitorNum, nil,
- 'Specifies the index of the monitor in the global screen object’s Monitors list.', nil);
+ 'Specifies the index of the monitor in the global screen object’s Monitors list.', nil);
AddGetSet('Left', @TPyDelphiMonitor.Get_Left, nil,
'Indicates the logical position of the left edge of the monitor.', nil);
AddGetSet('Height', @TPyDelphiMonitor.Get_Height, nil,
@@ -1794,7 +1801,7 @@ class procedure TPyDelphiApplication.RegisterGetSets(
AddGetSet('HintHidePause', @TPyDelphiApplication.Get_HintHidePause, @TPyDelphiApplication.Set_HintHidePause,
'Specifies the time interval to wait before hiding the Help Hint if the mouse has not moved from the control or menu item.', nil);
AddGetSet('HintShortCuts', @TPyDelphiApplication.Get_HintShortCuts, @TPyDelphiApplication.Set_HintShortCuts,
- 'Specifies whether the application’s pop-up hints include shortcut information.', nil);
+ 'Specifies whether the application’s pop-up hints include shortcut information.', nil);
AddGetSet('HintShortPause', @TPyDelphiApplication.Get_HintShortPause, @TPyDelphiApplication.Set_HintShortPause,
'Specifies the time period to wait before bringing up a hint if another hint has already been shown.', nil);
AddGetSet('Icon', @TPyDelphiApplication.Get_Icon, @TPyDelphiApplication.Set_Icon,
diff --git a/Source/vcl/WrapVclMedia.pas b/Source/vcl/WrapVclMedia.pas
new file mode 100644
index 00000000..648aa7d5
--- /dev/null
+++ b/Source/vcl/WrapVclMedia.pas
@@ -0,0 +1,192 @@
+{$I ..\Definition.Inc}
+unit WrapVclMedia;
+
+interface
+
+uses
+ System.TypInfo, Vcl.MPlayer,
+ PythonEngine, WrapDelphi, WrapVclControls;
+
+type
+ TEMPNotifyEventHandler = class(TEventHandler)
+ protected
+ procedure DoEvent(Sender: TObject; Button: TMPBtnType;
+ var DoDefault: Boolean);
+ public
+ constructor Create(PyDelphiWrapper : TPyDelphiWrapper; Component : TObject;
+ PropertyInfo : PPropInfo; Callable : PPyObject); override;
+ class function GetTypeInfo : PTypeInfo; override;
+ end;
+
+ TEMPPostNotifyEventHandler = class(TEventHandler)
+ protected
+ procedure DoEvent(Sender: TObject; Button: TMPBtnType);
+ public
+ constructor Create(PyDelphiWrapper : TPyDelphiWrapper; Component : TObject;
+ PropertyInfo : PPropInfo; Callable : PPyObject); override;
+ class function GetTypeInfo : PTypeInfo; override;
+ end;
+
+ TPyDelphiMediaPlayer = class (TPyDelphiCustomControl)
+ private
+ function GetDelphiObject: TMediaPlayer;
+ procedure SetDelphiObject(const Value: TMediaPlayer);
+ public
+ class function DelphiObjectClass : TClass; override;
+ // Properties
+ property DelphiObject: TMediaPlayer read GetDelphiObject write SetDelphiObject;
+ end;
+
+implementation
+
+type
+ TMediaRegistration = class(TRegisteredUnit)
+ public
+ function Name: string; override;
+ procedure RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); override;
+ procedure DefineVars(APyDelphiWrapper: TPyDelphiWrapper); override;
+ end;
+
+{ TVclMediaRegistration }
+
+function TMediaRegistration.Name: string;
+begin
+ Result := 'Media';
+end;
+
+procedure TMediaRegistration.DefineVars(APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+end;
+
+procedure TMediaRegistration.RegisterWrappers(
+ APyDelphiWrapper: TPyDelphiWrapper);
+begin
+ inherited;
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiMediaPlayer);
+
+ APyDelphiWrapper.EventHandlers.RegisterHandler(TEMPNotifyEventHandler);
+ APyDelphiWrapper.EventHandlers.RegisterHandler(TEMPPostNotifyEventHandler);
+end;
+
+{ TPyDelphiMediaPlayer }
+
+class function TPyDelphiMediaPlayer.DelphiObjectClass: TClass;
+begin
+ Result := TMediaPlayer;
+end;
+
+function TPyDelphiMediaPlayer.GetDelphiObject: TMediaPlayer;
+begin
+ Result := TMediaPlayer(inherited DelphiObject);
+end;
+
+procedure TPyDelphiMediaPlayer.SetDelphiObject(const Value: TMediaPlayer);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TEMPNotifyEventHandler }
+
+constructor TEMPNotifyEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper;
+ Component: TObject; PropertyInfo: PPropInfo; Callable: PPyObject);
+var
+ LMethod: TMethod;
+begin
+ inherited;
+ LMethod.Code := @TEMPNotifyEventHandler.DoEvent;
+ LMethod.Data := Self;
+ SetMethodProp(Component, PropertyInfo, LMethod);
+end;
+
+procedure TEMPNotifyEventHandler.DoEvent(Sender: TObject; Button: TMPBtnType;
+ var DoDefault: Boolean);
+var
+ LPyObject: PPyObject;
+ LPyTuple: PPyObject;
+ LPyResult: PPyObject;
+ LPyButton: PPyObject;
+ LDoDefault: PPyObject;
+ LVarParam: TPyDelphiVarParameter;
+begin
+ Assert(Assigned(PyDelphiWrapper));
+ if Assigned(Callable) and PythonOK() then
+ with GetPythonEngine do begin
+ LPyObject := PyDelphiWrapper.Wrap(Sender);
+ LPyButton := PyLong_FromLong(Integer(Button));
+ LDoDefault := CreateVarParam(PyDelphiWrapper, DoDefault);
+ LVarParam := PythonToDelphi(LDoDefault) as TPyDelphiVarParameter;
+
+ LPyTuple := PyTuple_New(3);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 0, LPyObject);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 1, LPyButton);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 2, LDoDefault);
+ try
+ LPyResult := PyObject_CallObject(Callable, LPyTuple);
+ if Assigned(LPyResult) then begin
+ Py_DECREF(LPyResult);
+ DoDefault := PyObject_IsTrue(LVarParam.Value) = 1;
+ end;
+ finally
+ Py_DECREF(LPyTuple);
+ end;
+ CheckError();
+ end;
+end;
+
+class function TEMPNotifyEventHandler.GetTypeInfo: PTypeInfo;
+begin
+ Result := System.TypeInfo(EMPNotify);
+end;
+
+{ TEMPPostNotifyEventHandler }
+
+constructor TEMPPostNotifyEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper;
+ Component: TObject; PropertyInfo: PPropInfo; Callable: PPyObject);
+var
+ LMethod: TMethod;
+begin
+ inherited;
+ LMethod.Code := @TEMPPostNotifyEventHandler.DoEvent;
+ LMethod.Data := Self;
+ SetMethodProp(Component, PropertyInfo, LMethod);
+end;
+
+procedure TEMPPostNotifyEventHandler.DoEvent(Sender: TObject;
+ Button: TMPBtnType);
+var
+ LPyObject: PPyObject;
+ LPyTuple: PPyObject;
+ LPyResult: PPyObject;
+ LPyButton: PPyObject;
+begin
+ Assert(Assigned(PyDelphiWrapper));
+ if Assigned(Callable) and PythonOK() then
+ with GetPythonEngine do begin
+ LPyObject := PyDelphiWrapper.Wrap(Sender);
+ LPyButton := PyLong_FromLong(Integer(Button));
+
+ LPyTuple := PyTuple_New(2);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 0, LPyObject);
+ GetPythonEngine.PyTuple_SetItem(LPyTuple, 1, LPyButton);
+ try
+ LPyResult := PyObject_CallObject(Callable, LPyTuple);
+ if Assigned(LPyResult) then begin
+ Py_DECREF(LPyResult);
+ end;
+ finally
+ Py_DECREF(LPyTuple);
+ end;
+ CheckError();
+ end;
+end;
+
+class function TEMPPostNotifyEventHandler.GetTypeInfo: PTypeInfo;
+begin
+ Result := System.TypeInfo(EMPPostNotify);
+end;
+
+initialization
+ RegisteredUnits.Add(TMediaRegistration.Create);
+
+end.
diff --git a/Source/vcl/WrapVclWinXCtrls.pas b/Source/vcl/WrapVclWinXCtrls.pas
index 58bb010f..0d420ebb 100644
--- a/Source/vcl/WrapVclWinXCtrls.pas
+++ b/Source/vcl/WrapVclWinXCtrls.pas
@@ -4,7 +4,11 @@
interface
uses
- Vcl.WinXCtrls, WrapVclControls;
+ Vcl.WinXCtrls,
+ {$IF DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+ Vcl.NumberBox,
+ {$IFEND DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+ WrapVclControls, WrapVclStdCtrls;
type
TPyDelphiCustomActivityIndicator = class (TPyDelphiCustomControl)
@@ -43,6 +47,26 @@ TPyDelphiToggleSwitch = class (TPyDelphiCustomCustomToggleSwitch)
property DelphiObject: TToggleSwitch read GetDelphiObject write SetDelphiObject;
end;
+ {$IF DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+ TPyDelphiCustomNumberBox = class(TPyDelphiCustomEdit)
+ private
+ function GetDelphiObject: TCustomNumberBox;
+ procedure SetDelphiObject(const Value: TCustomNumberBox);
+ public
+ class function DelphiObjectClass : TClass; override;
+ property DelphiObject: TCustomNumberBox read GetDelphiObject write SetDelphiObject;
+ end;
+
+ TPyDelphiNumberBox = class(TPyDelphiCustomNumberBox)
+ private
+ function GetDelphiObject: TNumberBox;
+ procedure SetDelphiObject(const Value: TNumberBox);
+ public
+ class function DelphiObjectClass : TClass; override;
+ property DelphiObject: TNumberBox read GetDelphiObject write SetDelphiObject;
+ end;
+ {$IFEND DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+
implementation
uses
@@ -77,6 +101,10 @@ procedure TWinXCtrlsRegistration.RegisterWrappers(
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiActivityIndicator);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomCustomToggleSwitch);
APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiToggleSwitch);
+ {$IF DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiCustomNumberBox);
+ APyDelphiWrapper.RegisterDelphiWrapper(TPyDelphiNumberBox);
+ {$IFEND DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
end;
{ TPyDelphiCustomActivityIndicator }
@@ -150,6 +178,45 @@ procedure TPyDelphiToggleSwitch.SetDelphiObject(const Value: TToggleSwitch);
inherited DelphiObject := Value;
end;
+{$IF DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+
+{ TPyDelphiCustomNumberBox }
+
+class function TPyDelphiCustomNumberBox.DelphiObjectClass: TClass;
+begin
+ Result := TCustomNumberBox;
+end;
+
+function TPyDelphiCustomNumberBox.GetDelphiObject: TCustomNumberBox;
+begin
+ Result := TCustomNumberBox(inherited DelphiObject);
+end;
+
+procedure TPyDelphiCustomNumberBox.SetDelphiObject(
+ const Value: TCustomNumberBox);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{ TPyDelphiNumberBox }
+
+class function TPyDelphiNumberBox.DelphiObjectClass: TClass;
+begin
+ Result := TNumberBox;
+end;
+
+function TPyDelphiNumberBox.GetDelphiObject: TNumberBox;
+begin
+ Result := TNumberBox(inherited DelphiObject);
+end;
+
+procedure TPyDelphiNumberBox.SetDelphiObject(const Value: TNumberBox);
+begin
+ inherited DelphiObject := Value;
+end;
+
+{$IFEND DEFINED(DELPHI11_OR_HIGHER) or DEFINED(DELPHI10_4_2)}
+
initialization
RegisteredUnits.Add(TWinXCtrlsRegistration.Create());