diff --git a/Packages/Delphi/Delphi 10.4+/Python.dproj b/Packages/Delphi/Delphi 10.4+/Python.dproj index 664bec0d..05aea215 100644 --- a/Packages/Delphi/Delphi 10.4+/Python.dproj +++ b/Packages/Delphi/Delphi 10.4+/Python.dproj @@ -5,14 +5,19 @@ Release VCL Python.dpk - Linux64 + Win32 {018AAA56-F5BD-4A04-BCCA-A0043EAAA5CE} 19.4 - 168067 + 168083 true + + true + Base + true + true Base @@ -91,6 +96,11 @@ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= 1033 + + 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 @@ -190,14 +200,14 @@ - False + True True + False True True True True True - False 12 diff --git a/Packages/Delphi/Delphi 10.4+/PythonCommon.dpk b/Packages/Delphi/Delphi 10.4+/PythonCommon.dpk new file mode 100644 index 00000000..bae4e8d4 --- /dev/null +++ b/Packages/Delphi/Delphi 10.4+/PythonCommon.dpk @@ -0,0 +1,39 @@ +package PythonCommon; + +{$R *.res} +{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS ON} +{$RANGECHECKS ON} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DEFINE DEBUG} +{$ENDIF IMPLICITBUILDING} +{$LIBSUFFIX AUTO} +{$RUNONLY} +{$IMPLICITBUILD ON} + +requires + rtl; + +contains + ExecCmd in '..\..\..\Source\common\ExecCmd.pas', + ExecCmdCommon in '..\..\..\Source\common\ExecCmdCommon.pas'; + +end. diff --git a/Packages/Delphi/Delphi 10.4+/PythonCommon.dproj b/Packages/Delphi/Delphi 10.4+/PythonCommon.dproj new file mode 100644 index 00000000..344e3ca1 --- /dev/null +++ b/Packages/Delphi/Delphi 10.4+/PythonCommon.dproj @@ -0,0 +1,962 @@ + + + {8AAD598E-CB99-406B-B301-494801CA7EFB} + PythonCommon.dpk + 19.4 + None + True + Release + Win32 + 168083 + Package + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + ..\..\..\lib\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + true + true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + 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= + true + $(Auto) + PythonCommon + ..\..\..\Source\common;$(DCC_UnitSearchPath) + + + 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 + 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 + true + 1033 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + /usr/bin/xterm -e "%debuggee%" + + + false + true + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + Package + + + + Python4Delphi - Design-time Engine Package + Python4Delphi - Design-Time Engine Package for VCL + Python4Delphi - Design-time Engine Package for FMX + File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\dclP4DEnvironment280.bpl not found + File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\dclP4DPyPackage280.bpl not found + 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 - NLTK + + + PythonCommon.dpk + + + + + + true + + + + + true + + + + + true + + + + + PythonCommon.bpl + true + + + + + PythonCommon.bpl + true + + + + + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 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 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + + True + True + False + True + True + True + True + True + + + 12 + + + + + diff --git a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk index 842cd73f..b25bcf38 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk +++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk @@ -9,21 +9,21 @@ package PythonFmx; {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} -{$LOCALSYMBOLS OFF} +{$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS ON} +{$RANGECHECKS ON} +{$REFERENCEINFO ON} {$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} +{$STACKFRAMES ON} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} -{$DEFINE RELEASE} +{$DEFINE DEBUG} {$ENDIF IMPLICITBUILDING} {$DESCRIPTION 'Python4Delphi - Run-time Engine Package for FMX'} {$LIBSUFFIX AUTO} @@ -33,32 +33,32 @@ package PythonFmx; requires rtl, fmx, - Python, - bindcompfmx; + 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', - WrapFmxStdActns in '..\..\..\Source\fmx\WrapFmxStdActns.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 d7aeebe0..36d86082 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj +++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj @@ -1,25 +1,30 @@  - True - Package - Release - FMX + {513BF750-373D-4C95-A672-78CA8DDF3F63} PythonFmx.dpk - Linux64 - {6C9FBAC1-1024-4A46-96EE-2CADEFE347AA} 19.4 - 168067 + FMX + True + Release + Win32 + 167955 + Package true + + true + Base + true + true Base true - - true + + true Base true @@ -48,131 +53,97 @@ Base true - - true - Cfg_1 - true - true - true Cfg_1 true true - - true - Cfg_1 - true - true - true Base true - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - PythonFmx ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Run-time Engine Package for FMX .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) - ..\..\..\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath) - $(Auto) + false + false + false + false + false true true - true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + PythonFmx + 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= - 1033 + 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 - 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 - - /usr/bin/xterm -e "%debuggee%" + + 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) - 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 - 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 - Debug Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 - Debug Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug true + 1033 - true - true DEBUG;$(DCC_Define) - true + true false + true + true true - - - 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 false true - - - true + 1033 - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 - - - 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= - - - /usr/bin/xterm -e "%debuggee%" - - - true - - - true + 0 @@ -180,31 +151,31 @@ - + + + + + - - - - - - + - - - - - + + + + + + Base @@ -225,17 +196,769 @@ PythonFmx.dpk - + + 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 + + + + + true + + + + + true + + + + + PythonFmx.bpl + true + + + + + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 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 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + - False + True True - True + False + False True True True True - False 12 diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj index ad500b3c..c86ebb4d 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj +++ b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj @@ -143,12 +143,12 @@ False False + False False False False True True - False 12 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 7103309c..00300534 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPython.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPython.dproj @@ -144,12 +144,12 @@ False False + False False False False True False - False 12 diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj index f3f94a49..5a0748e7 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj @@ -89,7 +89,7 @@ MainSource - + BITMAP @@ -120,13 +120,751 @@ False False + False False False False True False - False + + + + true + + + + + true + + + + + true + + + + + dclPythonFmx.bpl + true + + + + + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 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 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 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+/dclPythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj index 05048c5e..92a13f0a 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj @@ -120,12 +120,12 @@ False False + False False False False True False - 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/Packages/Delphi/P4DComponentSuite.groupproj b/Packages/Delphi/P4DComponentSuite.groupproj index e48d956d..8b045d11 100644 --- a/Packages/Delphi/P4DComponentSuite.groupproj +++ b/Packages/Delphi/P4DComponentSuite.groupproj @@ -16,10 +16,13 @@ Delphi 10.4+\PythonVcl.dproj - Delphi 10.4+\PythonVcl.dproj + - Delphi 10.4+\PythonFmx.dproj + + + + @@ -65,32 +68,41 @@ - + - + - + - + - + - + + + + + + + + + + - + - + - + diff --git a/Source/common/ExecCmd.Posix.pas b/Source/common/ExecCmd.Posix.pas new file mode 100644 index 00000000..8d79da54 --- /dev/null +++ b/Source/common/ExecCmd.Posix.pas @@ -0,0 +1,285 @@ +unit ExecCmd.Posix; + +{$WEAKPACKAGEUNIT} + +interface + +uses + Posix.Base, Posix.Fcntl, Posix.Unistd, Posix.SysWait, Posix.Stdlib, + Posix.Stdio, Posix.SysTypes, Posix.Signal, Posix.Errno, Posix.SysStat, + Posix.String_, + ExecCmd; + +type + TStreamHandle = pointer; + + TExecCmdPosix = class(TInterfacedObject, IExecCmd) + private + FCmd: string; + FArg: TArray; + FEnv: TArray; + FPid: Integer; + FRead: TPipeDescriptors; + FWrite: TPipeDescriptors; + FExitCode: integer; + procedure Redirect(out AReader: TReader; out AWriter: TWriter); + function PeekMessage(): string; + protected + function GetIsAlive: boolean; + function GetExitCode: Integer; + public + constructor Create(const ACmd: string; AArg, AEnv: TArray); + destructor Destroy(); override; + + function Run(): IExecCmd; overload; + function Run(out AOutput: string): IExecCmd; overload; + function Run(out AReader: TReader; out AWriter: TWriter; const ARedirections: TRedirections): IExecCmd; overload; + procedure Kill(); + function Wait(): Integer; + + property IsAlive: boolean read GetIsAlive; + property ExitCode: Integer read GetExitCode; + end; + + EForkFailed = class(EExecCmd); + EPipeFailed = class(EExecCmd); + EInvalidArgument = class(EExecCmd); + EOperationNotPermitted = class(EExecCmd); + ENoSuchProcess = class(EExecCmd); + EWaitFailed = class(EExecCmd); + +implementation + +uses + System.SysUtils, System.IOUtils; + +const + INITIAL_EXIT_CODE = -999; + +{ TExecCmdPosix } + +constructor TExecCmdPosix.Create(const ACmd: string; AArg, AEnv: TArray); +begin + inherited Create(); + FCmd := ACmd; + FArg := AArg; + FEnv := AEnv; + FExitCode := INITIAL_EXIT_CODE; +end; + +destructor TExecCmdPosix.Destroy; +begin + if IsAlive then + Kill(); + + __close(FRead.ReadDes); + __close(FWrite.WriteDes); + inherited; +end; + +function TExecCmdPosix.GetExitCode: Integer; +begin + Result := Wait(); +end; + +function TExecCmdPosix.GetIsAlive: boolean; +var + LWaitedPid: integer; + LStatus: integer; +begin + if (FExitCode <> INITIAL_EXIT_CODE) then + Exit(false); + + LWaitedPid := waitpid(FPid, @LStatus, WNOHANG); + if (LWaitedPid = -1) then + raise EWaitFailed.Create('Failed waiting for proess.') + else if (LWaitedPid = 0) then + Exit(true) + else begin + if WIFEXITED(LStatus) then begin + FExitCode := WEXITSTATUS(LStatus); + end else if WIFSIGNALED(LStatus) then begin + FExitCode := WTERMSIG(LStatus); + end else if WIFSTOPPED(LStatus) then begin + FExitCode := WSTOPSIG(LStatus); + end else begin + FExitCode := EXIT_FAILURE; + end; + end; + Result := false; +end; + +procedure TExecCmdPosix.Kill; +begin + if (Posix.Signal.kill(FPid, Posix.Signal.SIGKILL) <> 0) then + if (errno = EINVAL) then //Invalid signal + raise EInvalidArgument.Create('Invalid argument.') + else if (errno = EPERM) then //The process does not have permission to send the signal to any of the target processes. + raise EOperationNotPermitted.Create('Operation not permitted.') + else if (errno = ESRCH) then //The pid or process group does not exist. Note that an existing process might be a zombie, a process which already committed termination, but has not yet been wait(2)ed for. + raise ENoSuchProcess.Create('No such process.') +end; + +function TExecCmdPosix.PeekMessage: string; +var + LBuffer: array[0..511] of UInt8; + LCount: integer; +begin + while True do begin + LCount := __read(FRead.ReadDes, @LBuffer[0], SizeOf(LBuffer)); + if (LCount = -1) then begin + if (errno = EINTR) then + Continue + else + Exit(String.Empty); + end else if (LCount = 0) then + Exit(String.Empty) + else begin + Exit(Copy(UTF8ToString(@LBuffer[0]), 1, UTF8ToString(@LBuffer[0]).Length -1)); + end; + end; +end; + +procedure TExecCmdPosix.Redirect(out AReader: ExecCmd.TReader; + out AWriter: ExecCmd.TWriter); +var + LBuffer: string; + M: TMarshaller; +begin + AReader := function(): string + begin + Result := String.Empty; + + while GetIsAlive() and Result.IsEmpty() do begin + Result := Result + PeekMessage(); + end; + + if not Result.IsEmpty() then + Exit; + + //Preventing race condition... + repeat + LBuffer := PeekMessage(); + if not LBuffer.IsEmpty() then + Result := Result + LBuffer; + until (LBuffer.IsEmpty()); + end; + + AWriter := procedure(AIn: string) begin + __write(FWrite.WriteDes, M.AsUtf8(PWideChar(AIn)).ToPointer(), AIn.Length); + end; +end; + +function TExecCmdPosix.Run(out AOutput: string): IExecCmd; +var + LReader: TReader; + LWriter: TWriter; + LOutput: string; +begin + AOutput := String.Empty; + Result := Run(LReader, LWriter, [TRedirect.stdout]); + repeat + LOutput := LReader(); + if not LOutput.IsEmpty() then + AOutput := AOutput + LOutput; + until LOutput.IsEmpty(); +end; + +function TExecCmdPosix.Run(out AReader: ExecCmd.TReader; + out AWriter: ExecCmd.TWriter; + const ARedirections: TRedirections): IExecCmd; +var + M: TMarshaller; + LArg, LEnv: array of PAnsiChar; + I: Integer; +begin + //#define PARENT_READ read_pipe[0] + //#define PARENT_WRITE write_pipe[1] + //#define CHILD_WRITE read_pipe[1] + //#define CHILD_READ write_pipe[0] + + if (pipe(FRead) = -1) or (pipe(FWrite) = -1) then + raise EPipeFailed.Create('Failed to create pipe.'); + + FPid := fork(); + if (FPid < 0) then + raise EForkFailed.Create('Failed to fork process.') + else if (FPid = 0) then begin + while ((dup2(FRead.WriteDes, STDOUT_FILENO) = -1) and (errno = EINTR)) do begin end; + while ((dup2(FRead.WriteDes, STDERR_FILENO) = -1) and (errno = EINTR)) do begin end; + while ((dup2(FWrite.ReadDes, STDIN_FILENO) = -1) and (errno = EINTR)) do begin end; + __close(FRead.WriteDes); + __close(FRead.ReadDes); + __close(FWrite.ReadDes); + + //https://man7.org/linux/man-pages/man2/execve.2.html + + //argv is an array of pointers to strings passed to the new program + //as its command-line arguments. By convention, THE FIRST OF THESE + //STRINGS (i.e., argv[0]) SHOULD CONTAIN THE FILENAME ASSOCIATED + //WITH THE FILE BEING EXECUTED. The argv array must be terminated + //by a NULL pointer. (Thus, in the new program, argv[argc] will be + //NULL.) + + SetLength(LArg, Length(FArg) + 1); + for I := Low(FArg) to High(FArg) do + LArg[I] := M.AsAnsi(PWideChar(FArg[I]) + #0).ToPointer(); + LArg[High(LArg)] := PAnsiChar(nil); + + SetLength(LEnv, Length(FEnv) + 1); + for I := Low(FEnv) to High(FEnv) do + LEnv[I] := M.AsAnsi(PWideChar(FEnv[I]) + #0).ToPointer(); + LEnv[High(LEnv)] := PAnsiChar(nil); + + if execve(M.AsAnsi(PWideChar(FCmd)).ToPointer(), PPAnsiChar(LArg), PPAnsiChar(LEnv)) = -1 then begin + Halt(errno); + end else + Halt(EXIT_FAILURE); + end else if (FPid > 0) then begin + __close(FRead.WriteDes); + __close(FWrite.ReadDes); + __close(FWrite.WriteDes); + Redirect(AReader, AWriter); + end; + Result := Self; +end; + +function TExecCmdPosix.Run: IExecCmd; +var + LReader: TReader; + LWriter: TWriter; +begin + Result := Run(LReader, LWriter, []); +end; + +function TExecCmdPosix.Wait: Integer; +var + LWaitedPid: integer; + LStatus: integer; +begin + if (FExitCode <> INITIAL_EXIT_CODE) then + Exit(FExitCode); + + LWaitedPid := waitpid(FPid, @LStatus, WNOHANG); + repeat + if (LWaitedPid = -1) then + raise EWaitFailed.Create('Failed waiting for process.') + else if (LWaitedPid = 0) then + LWaitedPid := waitpid(FPid, @LStatus, WNOHANG) + else begin + if WIFEXITED(LStatus) then begin + FExitCode := WEXITSTATUS(LStatus); + end else if WIFSIGNALED(LStatus) then begin + FExitCode := WTERMSIG(LStatus); + end else if WIFSTOPPED(LStatus) then begin + FExitCode := WSTOPSIG(LStatus); + end else begin + FExitCode := EXIT_FAILURE; + end; + end; + until (FExitCode <> INITIAL_EXIT_CODE); + + Result := FExitCode; +end; + +end. diff --git a/Source/common/ExecCmd.Win.pas b/Source/common/ExecCmd.Win.pas new file mode 100644 index 00000000..f2b0b61d --- /dev/null +++ b/Source/common/ExecCmd.Win.pas @@ -0,0 +1,274 @@ +unit ExecCmd.Win; + +{$WEAKPACKAGEUNIT} + +interface + +uses + System.SysUtils, System.Classes, Winapi.Windows, ExecCmd; + +//Ref: https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output + +type + TExecCmdWin = class(TInterfacedObject, IExecCmd) + private + FCmd: string; + FArg: TArray; + FEnv: TArray; + FSecurityAttributes: TSecurityAttributes; + FStartupInfo: TStartupInfo; + FProcessInfo: TProcessInformation; + //Pipes + //StdOut + FStdOutPipeRead: THandle; + FStdOutPipeWrite: THandle; + //StdIn + FStdInPipeRead: THandle; + FStdInPipeWrite: THandle; + //Job + FJob: THandle; + private + function GetStatus: cardinal; + procedure Execute(); + //IO + function PeekMessage(const ACheckPipe: boolean = true): string; + protected + function GetIsAlive: boolean; + function GetExitCode: Integer; + public + constructor Create(const ACmd: string; const AArg, AEnv: TArray); + destructor Destroy(); override; + + procedure Redirect(out AReader: TReader; out AWriter: TWriter); + function Run(): IExecCmd; overload; + function Run(out AOutput: string): IExecCmd; overload; + function Run(out AReader: TReader; out AWriter: TWriter; const ARedirections: TRedirections): IExecCmd; overload; + procedure Kill(); + function Wait(): Integer; + + property Status: cardinal read GetStatus; + property IsAlive: boolean read GetIsAlive; + property ExitCode: Integer read GetExitCode; + end; + +const + cCANCELATION_SIGNAL_EXIT_CODE = $001A; + +implementation + +uses + Math; + +{ TExecCmdWin } + +constructor TExecCmdWin.Create(const ACmd: string; const AArg, AEnv: TArray); +begin + FCmd := ACmd; + FArg := AArg; + FEnv := AEnv; + //Set the bInheritedHandle to true so pipe handles are inherited + FSecurityAttributes := Default(TSecurityAttributes); + with FSecurityAttributes do begin + nLength := SizeOf(FSecurityAttributes); + bInheritHandle := True; + lpSecurityDescriptor := nil; + end; + + //Create the startup information to the process + FStartupInfo := Default(TStartupInfo); + with FStartupInfo do + begin + cb := SizeOf(TStartupInfo); + dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; + wShowWindow := SW_HIDE; + end; + + //Create a job that kills the subprocess when parent dies + FJob := CreateJobObject(nil, nil); + if (FJob <> 0) then begin + var LExInfo: TJobObjectExtendedLimitInformation; + LExInfo.BasicLimitInformation.LimitFlags := JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + if not SetInformationJobObject(FJob, JobObjectExtendedLimitInformation, + @LExInfo, SizeOf(TJobObjectExtendedLimitInformation)) then + RaiseLastOSError(); + end; + + // Close handles to the stdin and stdout pipes no longer needed by the child process. + // If they are not explicitly closed, there is no way to recognize that the child process has ended. + CloseHandle(FStdOutPipeWrite); + CloseHandle(FStdInPipeRead); +end; + +destructor TExecCmdWin.Destroy; +begin + if IsAlive then + Kill(); + + CloseHandle(FProcessInfo.hThread); + CloseHandle(FProcessInfo.hProcess); + inherited; +end; + +function TExecCmdWin.GetExitCode: Integer; +begin + if not GetExitCodeProcess(FProcessInfo.hProcess, Cardinal(Result)) then + RaiseLastOSError(); +end; + +function TExecCmdWin.GetIsAlive: boolean; +var + LExitCode: cardinal; +begin + GetExitCodeProcess(FProcessInfo.hProcess, LExitCode); + Result := (LExitCode = STILL_ACTIVE); +end; + +function TExecCmdWin.GetStatus: cardinal; +begin + Result := WaitForSingleObject(FProcessInfo.hProcess, 0); +end; + +procedure TExecCmdWin.Execute; +begin + //Create the process + var LCmd := FCmd + ' ' + String.Join(' ', FArg); + UniqueString(LCmd); + if not CreateProcess(nil, PWideChar(LCmd), nil, nil, True, 0, nil, nil, + FStartupInfo, FProcessInfo) then + RaiseLastOSError(); + + //Assign the process to the job. It takes the proc. down when parent is killed. + AssignProcessToJobObject(FJob, FProcessInfo.hProcess); +end; + +procedure TExecCmdWin.Redirect(out AReader: TReader; out AWriter: TWriter); +var + LBytesWritten: cardinal; + LBuffer: string; +begin + AReader := function(): string begin + Result := String.Empty; + + while GetIsAlive() and Result.IsEmpty() do begin + Result := Result + PeekMessage(); + end; + + if not Result.IsEmpty() then + Exit; + + //Preventing race condition... + repeat + LBuffer := PeekMessage(); + if not LBuffer.IsEmpty() then + Result := Result + LBuffer; + until (LBuffer.IsEmpty()); + end; + + AWriter := procedure(AIn: string) begin + var LIn := AnsiString(AIn); + WriteFile(FStdInPipeWrite, LIn[1], Length(LIn), LBytesWritten, nil); + end; +end; + +function TExecCmdWin.Run: IExecCmd; +var + LReader: TReader; + LWriter: TWriter; +begin + Result := Run(LReader, LWriter, []); +end; + +function TExecCmdWin.Run(out AOutput: string): IExecCmd; +var + LReader: TReader; + LWriter: TWriter; + LOutput: string; +begin + AOutput := String.Empty; + Result := Run(LReader, LWriter, [TRedirect.stdout]); + repeat + LOutput := LReader(); + if not LOutput.IsEmpty() then + AOutput := AOutput + LOutput; + until LOutput.IsEmpty(); +end; + +function TExecCmdWin.Run(out AReader: TReader; out AWriter: TWriter; const ARedirections: TRedirections): IExecCmd; +begin + //STD OUT REDIRECTION + if (TRedirect.stdout in ARedirections) then begin + if not CreatePipe(FStdOutPipeRead, FStdOutPipeWrite, @FSecurityAttributes, 0) then + RaiseLastOSError(); + + //Ensure the read handle to the pipe for STDOUT is not inherited + //if not SetHandleInformation(FStdOutPipeRead, HANDLE_FLAG_INHERIT, 0) then + // RaiseLastOSError(); + + //Redirect to our pipe + FStartupInfo.hStdOutput := FStdOutPipeWrite; + FStartupInfo.hStdError := FStdOutPipeWrite; + end else begin + FStartupInfo.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE); + FStartupInfo.hStdError := GetStdHandle(STD_ERROR_HANDLE); + end; + + //STD IN REDIRECTION + if (TRedirect.stdin in ARedirections) then begin + //Create a pipe for the child process's STDIN + if not CreatePipe(FStdInPipeRead, FStdInPipeWrite, @FSecurityAttributes, 0) then + RaiseLastOSError(); + + //Ensure the write handle to the pipe for STDIN is not inherited + //if not SetHandleInformation(FStdInPipeWrite, HANDLE_FLAG_INHERIT, 0) then + // RaiseLastOSError(); + + //Redirect to our pipe + FStartupInfo.hStdInput := FStdInPipeRead; + end else begin + FStartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); + end; + + Redirect(AReader, AWriter); + + Execute(); + + Result := Self; +end; + +function TExecCmdWin.Wait: Integer; +begin + while GetIsAlive do + Sleep(100); + Result := GetExitCode; +end; + +procedure TExecCmdWin.Kill; +begin + if (Status = WAIT_TIMEOUT) then + if not TerminateProcess(FProcessInfo.hProcess, cCANCELATION_SIGNAL_EXIT_CODE) then + RaiseLastOSError(); +end; + +function TExecCmdWin.PeekMessage(const ACheckPipe: boolean): string; +const + BUFFSIZE = 4096; +type + TBuffArr = array[0..BUFFSIZE - 1] of AnsiChar; +var + LBytesRead: cardinal; + LBuffer: TBuffArr; +begin + Result := String.Empty; + + if ACheckPipe and not PeekNamedPipe(FStdOutPipeRead, nil, 0, nil, @LBytesRead, nil) then + Exit; + + if (LBytesRead > 0) then + if ReadFile(FStdOutPipeRead, LBuffer, BUFFSIZE, LBytesRead, nil) then + if (LBytesRead > 0) then begin + LBuffer[LBytesRead] := #0; + Result := Result + String(LBuffer); + end; +end; + +end. diff --git a/Source/common/ExecCmd.pas b/Source/common/ExecCmd.pas new file mode 100644 index 00000000..4b7f6fc3 --- /dev/null +++ b/Source/common/ExecCmd.pas @@ -0,0 +1,97 @@ +(**************************************************************************) +(* *) +(* Module: Unit 'ExecCmd' *) +(* *) +(* Copyright (c) 2021 *) +(* Lucas Moura Belo - lmbelo *) +(* lucas.belo@live.com *) +(* Brazil *) +(* *) +(* Project page: https://github.com/Embarcadero/python4delphi *) +(**************************************************************************) +(* Functionality: Execute Shell Commands and/or Subprocess *) +(* *) +(* *) +(**************************************************************************) +(* This source code is distributed with no WARRANTY, for no reason or use.*) +(* Everyone is allowed to use and change this code free for his own tasks *) +(* and projects, as long as this header and its copyright text is intact. *) +(* For changed versions of this code, which are public distributed the *) +(* following additional conditions have to be fullfilled: *) +(* 1) The header has to contain a comment on the change and the author of *) +(* it. *) +(* 2) A copy of the changed source has to be sent to the above E-Mail *) +(* address or my then valid address, if this is possible to the *) +(* author. *) +(* The second condition has the target to maintain an up to date central *) +(* version of the component. If this condition is not acceptable for *) +(* confidential or legal reasons, everyone is free to derive a component *) +(* or to generate a diff file to my or other original sources. *) +(**************************************************************************) +unit ExecCmd; + +interface + +uses + System.SysUtils; + +type + TRedirect = (stdin, stdout); + TRedirections = set of TRedirect; + TReader = TFunc; + TWriter = TProc; + + IExecCmd = interface + ['{FDCA9BAA-D412-4B48-96C2-0F08057FD6ED}'] + function GetExitCode: Integer; + function GetIsAlive: boolean; + + function Run(): IExecCmd; overload; + function Run(out AOutput: string): IExecCmd; overload; + function Run(out AReader: TReader; out AWriter: TWriter; const ARedirections: TRedirections): IExecCmd; overload; + procedure Kill(); + function Wait(): Integer; + + property IsAlive: boolean read GetIsAlive; + property ExitCode: Integer read GetExitCode; + end; + + TExecCmdService = class + public + class function Cmd(const ACmd: string; const AArg, AEnv: TArray): IExecCmd; overload; + class function Cmd(const ACmd: string; const AArg: TArray): IExecCmd; overload; + end; + + EExecCmd = class(Exception); + +const + EXIT_SUCCESS = 0; + EXIT_FAILURE = 1; + +implementation + +uses + {$IFDEF MSWINDOWS} + ExecCmd.Win; + {$ELSE} + ExecCmd.Posix; + {$ENDIF} + +{ TExecCmdService } + +class function TExecCmdService.Cmd(const ACmd: string; const AArg, AEnv: TArray): IExecCmd; +begin + {$IFDEF MSWINDOWS} + Result := TExecCmdWin.Create(ACmd, AArg, AEnv); + {$ELSE} + Result := TExecCmdPosix.Create(ACmd, AArg, AEnv); + {$ENDIF} +end; + +class function TExecCmdService.Cmd(const ACmd: string; + const AArg: TArray): IExecCmd; +begin + Result := Cmd(ACmd, AArg, []); +end; + +end. diff --git a/Source/common/ExecCmdCommon.pas b/Source/common/ExecCmdCommon.pas new file mode 100644 index 00000000..4e261685 --- /dev/null +++ b/Source/common/ExecCmdCommon.pas @@ -0,0 +1,80 @@ +(**************************************************************************) +(* *) +(* Module: Unit 'ExecCmdCommon' *) +(* *) +(* Copyright (c) 2021 *) +(* Lucas Moura Belo - lmbelo *) +(* lucas.belo@live.com *) +(* Brazil *) +(* *) +(* Project page: https://github.com/Embarcadero/python4delphi *) +(**************************************************************************) +(* Functionality: Supplier for Execute Commands *) +(* *) +(* *) +(**************************************************************************) +(* This source code is distributed with no WARRANTY, for no reason or use.*) +(* Everyone is allowed to use and change this code free for his own tasks *) +(* and projects, as long as this header and its copyright text is intact. *) +(* For changed versions of this code, which are public distributed the *) +(* following additional conditions have to be fullfilled: *) +(* 1) The header has to contain a comment on the change and the author of *) +(* it. *) +(* 2) A copy of the changed source has to be sent to the above E-Mail *) +(* address or my then valid address, if this is possible to the *) +(* author. *) +(* The second condition has the target to maintain an up to date central *) +(* version of the component. If this condition is not acceptable for *) +(* confidential or legal reasons, everyone is free to derive a component *) +(* or to generate a diff file to my or other original sources. *) +(**************************************************************************) +unit ExecCmdCommon; + +interface + +type + TExecCmdCommon = class + public + class function BuildArgv(const AExecutable: string; + const AInput: TArray): TArray; + class function BuildEnvp(const AHome, AExecutable, + ASharedLibrary: string): TArray; + end; + +implementation + +uses + System.IOUtils, System.SysUtils; + +{ TPathHandler } + +class function TExecCmdCommon.BuildArgv(const AExecutable: string; + const AInput: TArray): TArray; +begin + {$IFDEF MSWINDOWS} + Result := AInput; + {$ELSE} + Result := [AExecutable] + AInput; + {$ENDIF MSWINDOWS} +end; + +class function TExecCmdCommon.BuildEnvp(const AHome, AExecutable, + ASharedLibrary: string): TArray; +begin + {$IFDEF MSWINDOWS} + Result := []; + {$ELSEIF DEFINED(OSX)} + Result := ['DYLD_LIBRARY_PATH=' + + ExtractFileDir(ASharedLibrary) + + ':' + + ExtractFileDir(AExecutable), + 'LD_LIBRARY_PATH=' + ExtractFileDir(ASharedLibrary), + 'PATH=' + ExtractFileDir(AExecutable)]; + {$ELSEIF DEFINED(POSIX)} + Result := ['LD_LIBRARY_PATH=' + ExtractFileDir(ASharedLibrary), + 'PYTHONHOME=' + AHome, + 'PATH=' + ExtractFileDir(AExecutable)]; + {$ENDIF MSWINDOWS} +end; + +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/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);