diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index a4683b49..687b4685 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,4 @@ -# These are supported funding model platforms - -github: [pyscripter] - +# These are supported funding model platforms + +github: [pyscripter] + diff --git a/.gitignore b/.gitignore index 6bedacf8..00d80cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,52 +1,53 @@ -# Compiled source # -################### -*.dcu -*.obj -*.exe -*.dll -*.bpl -*.bpi -*.dcp -*.rsm -*.stat -*.map -*.o -*.ppu -*.rsj -*.compiled -*.lib -*.pyd - -# Generated source # -################### -*.hpp - -# Backup files # -################### -*.~* -*.bak - -# IDE Files # -################### -*.dproj.local -*.groupproj.local -*.identcache -*.dsk -*.tvsconfig -*.otares -*.drc -*.rc -*.res -*.local - -# Output Folders # -################### -/Win32 -/Win64 -/OSX32 -/__history -*.bak -*.Patch -*.#00 -*.pch -/Tests/TestInsightSettings.ini +# Compiled source # +################### +*.dcu +*.obj +*.exe +*.dll +*.bpl +*.bpi +*.dcp +*.rsm +*.stat +*.map +*.o +*.ppu +*.rsj +*.compiled +*.lib +*.pyd +*.used + +# Generated source # +################### +*.hpp + +# Backup files # +################### +*.~* +*.bak + +# IDE Files # +################### +*.dproj.local +*.groupproj.local +*.identcache +*.dsk +*.tvsconfig +*.otares +*.drc +*.rc +*.res +*.local + +# Output Folders # +################### +/Win32 +/Win64 +/OSX32 +/__history +*.bak +*.Patch +*.#00 +*.pch +/Tests/TestInsightSettings.ini diff --git a/Demos/Demo01/Demo01.dpr b/Demos/Demo01/Demo01.dpr index a5311311..f4399a7a 100644 --- a/Demos/Demo01/Demo01.dpr +++ b/Demos/Demo01/Demo01.dpr @@ -1,15 +1,15 @@ -program Demo01; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo01; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo01/Demo01.dproj b/Demos/Demo01/Demo01.dproj index 45ee1595..6f888834 100644 --- a/Demos/Demo01/Demo01.dproj +++ b/Demos/Demo01/Demo01.dproj @@ -7,7 +7,7 @@ 19.1 VCL True - Win64 + Win32 3 Application @@ -58,6 +58,7 @@ true true + Demo01 Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) @@ -66,6 +67,7 @@ Demo01.exe 00400000 x86 + ..\SearchPath1.optset true @@ -121,6 +123,7 @@ Base + ..\SearchPath1.optset Cfg_1 diff --git a/Demos/Demo01/Unit1.dfm b/Demos/Demo01/Unit1.dfm index 08b2d94e..4ccdf23b 100644 --- a/Demos/Demo01/Unit1.dfm +++ b/Demos/Demo01/Unit1.dfm @@ -98,25 +98,34 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.9' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 32 + Top = 32 end object OpenDialog1: TOpenDialog DefaultExt = '*.py' Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' Title = 'Open' - Left = 176 + Left = 248 + Top = 32 end object SaveDialog1: TSaveDialog DefaultExt = '*.py' Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' Title = 'Save As' - Left = 208 + Left = 344 + Top = 32 end object PythonGUIInputOutput1: TPythonGUIInputOutput UnicodeIO = True RawOutput = False Output = Memo2 - Left = 64 + Left = 144 + Top = 32 end end diff --git a/Demos/Demo02/Demo02.dpr b/Demos/Demo02/Demo02.dpr index 0c707f87..fe50fa2d 100644 --- a/Demos/Demo02/Demo02.dpr +++ b/Demos/Demo02/Demo02.dpr @@ -1,18 +1,18 @@ -// JCL_DEBUG_EXPERT_GENERATEJDBG OFF -// JCL_DEBUG_EXPERT_INSERTJDBG OFF -// JCL_DEBUG_EXPERT_DELETEMAPFILE OFF -program Demo02; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +// JCL_DEBUG_EXPERT_GENERATEJDBG OFF +// JCL_DEBUG_EXPERT_INSERTJDBG OFF +// JCL_DEBUG_EXPERT_DELETEMAPFILE OFF +program Demo02; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo02/Demo02.dproj b/Demos/Demo02/Demo02.dproj index b8cf54f5..5eea4310 100644 --- a/Demos/Demo02/Demo02.dproj +++ b/Demos/Demo02/Demo02.dproj @@ -7,7 +7,7 @@ 19.1 VCL True - Win64 + Win32 3 Application @@ -58,6 +58,7 @@ true true + Demo02.exe 00400000 @@ -66,6 +67,7 @@ Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) 1033 CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -130,6 +132,7 @@ Base + ..\SearchPath1.optset Cfg_1 @@ -187,4 +190,5 @@ 12 + diff --git a/Demos/Demo02/Unit1.dfm b/Demos/Demo02/Unit1.dfm index ae4c0ebe..4f74c125 100644 --- a/Demos/Demo02/Unit1.dfm +++ b/Demos/Demo02/Unit1.dfm @@ -92,6 +92,11 @@ object Form1: TForm1 end end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 32 end diff --git a/Demos/Demo03/Demo03.dpr b/Demos/Demo03/Demo03.dpr index bf2ca159..c16c7d79 100644 --- a/Demos/Demo03/Demo03.dpr +++ b/Demos/Demo03/Demo03.dpr @@ -1,15 +1,15 @@ -program Demo03; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo03; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo03/Demo03.dproj b/Demos/Demo03/Demo03.dproj index a91c0015..a7346fe2 100644 --- a/Demos/Demo03/Demo03.dproj +++ b/Demos/Demo03/Demo03.dproj @@ -1,166 +1,169 @@ - - - {6DC5FF01-BFF8-42E9-ACC2-10D6F1298CD9} - Demo03.dpr - True - Debug - 3 - Application - VCL - 19.1 - Win64 - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - false - false - false - false - false - 00400000 - Demo03 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - RELEASE;$(DCC_Define) - 0 - false - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - false - true - - - true - PerMonitorV2 - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\delphi_PROJECTICON.ico - - - true - PerMonitorV2 - 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= - $(BDS)\bin\delphi_PROJECTICON.ico - - - - MainSource - - -
Form1`
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - Delphi.Personality.12 - - - - - Demo03.dpr - - - Microsoft Office 2000 Sample Automation Server Wrapper Components - Microsoft Office XP Sample Automation Server Wrapper Components - - - - True - True - - - 12 - - - -
+ + + {6DC5FF01-BFF8-42E9-ACC2-10D6F1298CD9} + Demo03.dpr + True + Debug + 3 + Application + VCL + 19.1 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + false + false + false + false + false + 00400000 + Demo03 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + RELEASE;$(DCC_Define) + 0 + false + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + false + true + + + true + PerMonitorV2 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\delphi_PROJECTICON.ico + + + true + PerMonitorV2 + 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= + $(BDS)\bin\delphi_PROJECTICON.ico + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + + + + + Demo03.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + True + True + + + 12 + + + +
diff --git a/Demos/Demo03/Unit1.dfm b/Demos/Demo03/Unit1.dfm index 64b330b1..63c469f6 100644 --- a/Demos/Demo03/Unit1.dfm +++ b/Demos/Demo03/Unit1.dfm @@ -111,6 +111,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False InitScript.Strings = ( 'import sys' 'print("Python Dll: ", sys.version)' diff --git a/Demos/Demo04/Demo04.dpr b/Demos/Demo04/Demo04.dpr index c7c5cb0e..00fc89f5 100644 --- a/Demos/Demo04/Demo04.dpr +++ b/Demos/Demo04/Demo04.dpr @@ -1,15 +1,15 @@ -program Demo04; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo04; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo04/Demo04.dproj b/Demos/Demo04/Demo04.dproj index 55b317e3..792b05f0 100644 --- a/Demos/Demo04/Demo04.dproj +++ b/Demos/Demo04/Demo04.dproj @@ -1,187 +1,190 @@ - - - {6F45452F-882D-4BBD-8AEA-872276E8B856} - Demo04.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo04.exe - 00400000 - x86 - Demo04 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - $(BDS)\bin\delphi_PROJECTICON.ico - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo04.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {6F45452F-882D-4BBD-8AEA-872276E8B856} + Demo04.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo04.exe + 00400000 + x86 + Demo04 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + $(BDS)\bin\delphi_PROJECTICON.ico + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo04.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo04/Unit1.dfm b/Demos/Demo04/Unit1.dfm index e721c936..ca532117 100644 Binary files a/Demos/Demo04/Unit1.dfm and b/Demos/Demo04/Unit1.dfm differ diff --git a/Demos/Demo05/Demo05.dpr b/Demos/Demo05/Demo05.dpr index ffc556ff..800acbf5 100644 --- a/Demos/Demo05/Demo05.dpr +++ b/Demos/Demo05/Demo05.dpr @@ -1,15 +1,15 @@ -program Demo05; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo05; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo05/Demo05.dproj b/Demos/Demo05/Demo05.dproj index 76b0d9ae..4cbe856d 100644 --- a/Demos/Demo05/Demo05.dproj +++ b/Demos/Demo05/Demo05.dproj @@ -1,186 +1,189 @@ - - - {38ABBD9D-A0AD-422F-959B-062CAB828F37} - Demo05.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo05.exe - 00400000 - x86 - Demo05 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo05.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {38ABBD9D-A0AD-422F-959B-062CAB828F37} + Demo05.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo05.exe + 00400000 + x86 + Demo05 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo05.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo05/Unit1.dfm b/Demos/Demo05/Unit1.dfm index 762973c6..a841db28 100644 --- a/Demos/Demo05/Unit1.dfm +++ b/Demos/Demo05/Unit1.dfm @@ -1,128 +1,133 @@ -object Form1: TForm1 - Left = 190 - Top = 118 - Caption = 'Demo of Python' - ClientHeight = 336 - ClientWidth = 528 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poDefault - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 129 - Width = 528 - Height = 3 - Cursor = crVSplit - Align = alTop - ExplicitWidth = 536 - end - object Memo1: TMemo - Left = 0 - Top = 132 - Width = 528 - Height = 168 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'import spam' - 'print (spam.foo('#39'hello world'#39', 1))') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 1 - end - object Panel1: TPanel - Left = 0 - Top = 300 - Width = 528 - Height = 36 - Align = alBottom - BevelOuter = bvNone - TabOrder = 0 - object Button1: TButton - Left = 6 - Top = 8 - Width = 115 - Height = 25 - Caption = 'Execute script' - TabOrder = 0 - OnClick = Button1Click - end - object Button2: TButton - Left = 168 - Top = 8 - Width = 91 - Height = 25 - Caption = 'Load script...' - TabOrder = 1 - OnClick = Button2Click - end - object Button3: TButton - Left = 264 - Top = 8 - Width = 89 - Height = 25 - Caption = 'Save script...' - TabOrder = 2 - OnClick = Button3Click - end - end - object Memo2: TMemo - Left = 0 - Top = 0 - Width = 528 - Height = 129 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'Memo2') - ParentFont = False - TabOrder = 2 - end - object PythonEngine1: TPythonEngine - InitScript.Strings = ( - 'import sys' - 'print ("Python Dll: ", sys.version)' - 'print (sys.copyright)' - 'print') - IO = PythonGUIInputOutput1 - Left = 32 - end - object PythonModule1: TPythonModule - Engine = PythonEngine1 - OnInitialization = PythonModule1Initialization - ModuleName = 'spam' - Errors = <> - Left = 96 - end - object OpenDialog1: TOpenDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 176 - end - object SaveDialog1: TSaveDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 208 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo2 - Left = 64 - end -end +object Form1: TForm1 + Left = 190 + Top = 118 + Caption = 'Demo of Python' + ClientHeight = 336 + ClientWidth = 528 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poDefault + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 129 + Width = 528 + Height = 3 + Cursor = crVSplit + Align = alTop + ExplicitWidth = 536 + end + object Memo1: TMemo + Left = 0 + Top = 132 + Width = 528 + Height = 168 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'import spam' + 'print (spam.foo('#39'hello world'#39', 1))') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 1 + end + object Panel1: TPanel + Left = 0 + Top = 300 + Width = 528 + Height = 36 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object Button1: TButton + Left = 6 + Top = 8 + Width = 115 + Height = 25 + Caption = 'Execute script' + TabOrder = 0 + OnClick = Button1Click + end + object Button2: TButton + Left = 168 + Top = 8 + Width = 91 + Height = 25 + Caption = 'Load script...' + TabOrder = 1 + OnClick = Button2Click + end + object Button3: TButton + Left = 264 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Save script...' + TabOrder = 2 + OnClick = Button3Click + end + end + object Memo2: TMemo + Left = 0 + Top = 0 + Width = 528 + Height = 129 + Align = alTop + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'Memo2') + ParentFont = False + TabOrder = 2 + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + InitScript.Strings = ( + 'import sys' + 'print ("Python Dll: ", sys.version)' + 'print (sys.copyright)' + 'print') + IO = PythonGUIInputOutput1 + Left = 32 + end + object PythonModule1: TPythonModule + Engine = PythonEngine1 + OnInitialization = PythonModule1Initialization + ModuleName = 'spam' + Errors = <> + Left = 96 + end + object OpenDialog1: TOpenDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 176 + end + object SaveDialog1: TSaveDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 208 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo2 + Left = 64 + end +end diff --git a/Demos/Demo06/Demo06.dpr b/Demos/Demo06/Demo06.dpr index 56766a80..23e00f90 100644 --- a/Demos/Demo06/Demo06.dpr +++ b/Demos/Demo06/Demo06.dpr @@ -1,15 +1,15 @@ -program Demo06; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo06; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo06/Demo06.dproj b/Demos/Demo06/Demo06.dproj index 77c3531a..6cd11c4b 100644 --- a/Demos/Demo06/Demo06.dproj +++ b/Demos/Demo06/Demo06.dproj @@ -1,177 +1,180 @@ - - - {2E88E1AD-C1A3-403E-8AEE-28895B68FBF7} - Demo06.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - 1033 - Demo06.exe - 00400000 - x86 - Demo06 - - - true - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - Debug - true - $(BDS)\bin\delphi_PROJECTICON.ico - true - - - true - PerMonitorV2 - 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= - $(BDS)\bin\delphi_PROJECTICON.ico - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo06.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {2E88E1AD-C1A3-403E-8AEE-28895B68FBF7} + Demo06.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + Demo06.exe + 00400000 + x86 + Demo06 + ..\SearchPath1.optset + + + true + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + Debug + true + $(BDS)\bin\delphi_PROJECTICON.ico + true + + + true + PerMonitorV2 + 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= + $(BDS)\bin\delphi_PROJECTICON.ico + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo06.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo06/Unit1.dfm b/Demos/Demo06/Unit1.dfm index 19538b07..bf0b5595 100644 --- a/Demos/Demo06/Unit1.dfm +++ b/Demos/Demo06/Unit1.dfm @@ -120,6 +120,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False InitScript.Strings = ( 'import sys' 'print ("Python Dll: ", sys.version)' diff --git a/Demos/Demo07/Demo07.dpr b/Demos/Demo07/Demo07.dpr index 29711893..3af181e0 100644 --- a/Demos/Demo07/Demo07.dpr +++ b/Demos/Demo07/Demo07.dpr @@ -1,15 +1,15 @@ -program Demo07; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo07; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo07/Demo07.dproj b/Demos/Demo07/Demo07.dproj index 580c213c..ad5d1294 100644 --- a/Demos/Demo07/Demo07.dproj +++ b/Demos/Demo07/Demo07.dproj @@ -1,176 +1,179 @@ - - - {241C5DB1-E30A-4305-9F0A-4B7DD00FAD59} - Demo07.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - 1033 - Demo07.exe - 00400000 - x86 - Demo07 - - - true - Demo07_Icon1.ico - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - Demo07_Icon1.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - Debug - - - true - PerMonitorV2 - 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= - $(BDS)\bin\delphi_PROJECTICON.ico - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo07.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {241C5DB1-E30A-4305-9F0A-4B7DD00FAD59} + Demo07.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + Demo07.exe + 00400000 + x86 + Demo07 + ..\SearchPath1.optset + + + true + Demo07_Icon1.ico + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + Demo07_Icon1.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + Debug + + + true + PerMonitorV2 + 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= + $(BDS)\bin\delphi_PROJECTICON.ico + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo07.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo07/Unit1.dfm b/Demos/Demo07/Unit1.dfm index 51b77e56..14d0c6cb 100644 --- a/Demos/Demo07/Unit1.dfm +++ b/Demos/Demo07/Unit1.dfm @@ -125,6 +125,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False InitScript.Strings = ( 'import sys' 'print ("Python Dll: ", sys.version)' diff --git a/Demos/Demo08/Demo08.dpr b/Demos/Demo08/Demo08.dpr index 12b61e1a..478925ab 100644 --- a/Demos/Demo08/Demo08.dpr +++ b/Demos/Demo08/Demo08.dpr @@ -1,15 +1,15 @@ -program Demo08; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo08; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo08/Demo08.dproj b/Demos/Demo08/Demo08.dproj index 54fe398e..d778bc9e 100644 --- a/Demos/Demo08/Demo08.dproj +++ b/Demos/Demo08/Demo08.dproj @@ -1,174 +1,177 @@ - - - {237903A4-03D0-4047-A134-AAF207C6AC42} - Demo08.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - 1033 - Demo08.exe - 00400000 - x86 - Demo08 - - - true - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - Debug - - - true - PerMonitorV2 - 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= - $(BDS)\bin\delphi_PROJECTICON.ico - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo08.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {237903A4-03D0-4047-A134-AAF207C6AC42} + Demo08.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + Demo08.exe + 00400000 + x86 + Demo08 + ..\SearchPath1.optset + + + true + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + Debug + + + true + PerMonitorV2 + 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= + $(BDS)\bin\delphi_PROJECTICON.ico + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo08.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo08/Unit1.dfm b/Demos/Demo08/Unit1.dfm index 93d699a3..c062e9a8 100644 --- a/Demos/Demo08/Unit1.dfm +++ b/Demos/Demo08/Unit1.dfm @@ -132,6 +132,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 16 Top = 16 diff --git a/Demos/Demo09/Demo09.dpr b/Demos/Demo09/Demo09.dpr index d184dc72..fde08269 100644 --- a/Demos/Demo09/Demo09.dpr +++ b/Demos/Demo09/Demo09.dpr @@ -1,15 +1,15 @@ -program Demo09; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo09; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo09/Demo09.dproj b/Demos/Demo09/Demo09.dproj index 6333c9b6..90e84252 100644 --- a/Demos/Demo09/Demo09.dproj +++ b/Demos/Demo09/Demo09.dproj @@ -1,186 +1,189 @@ - - - {A9EE3C80-927A-458F-83F8-5388BD57BAF3} - Demo09.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo09.exe - 00400000 - x86 - Demo09 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo09.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {A9EE3C80-927A-458F-83F8-5388BD57BAF3} + Demo09.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo09.exe + 00400000 + x86 + Demo09 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo09.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo09/Unit1.dfm b/Demos/Demo09/Unit1.dfm index cddec1ae..cc142d44 100644 --- a/Demos/Demo09/Unit1.dfm +++ b/Demos/Demo09/Unit1.dfm @@ -83,9 +83,10 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine - DllName = 'python37.dll' + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' APIVersion = 1013 - RegVersion = '3.7' + RegVersion = '3.10' UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 16 diff --git a/Demos/Demo09/demodll.dproj b/Demos/Demo09/demodll.dproj index 3c1e5815..946280b3 100644 --- a/Demos/Demo09/demodll.dproj +++ b/Demos/Demo09/demodll.dproj @@ -7,7 +7,7 @@ 19.1 None True - Win64 + Win32 3 Library
@@ -34,6 +34,7 @@ Base true + demodll.pyd true @@ -43,6 +44,7 @@ 1033 System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -78,6 +80,7 @@ Base + ..\SearchPath1.optset Cfg_1 @@ -129,7 +132,6 @@ False - False True True diff --git a/Demos/Demo09/grpDemo09.groupproj b/Demos/Demo09/grpDemo09.groupproj index 0b77844d..9305db3c 100644 --- a/Demos/Demo09/grpDemo09.groupproj +++ b/Demos/Demo09/grpDemo09.groupproj @@ -1,48 +1,48 @@ - - - {8878F812-492D-407E-9ED1-8A9BB8A14A3C} - - - - - - - - - - - Default.Personality.12 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + {8878F812-492D-407E-9ED1-8A9BB8A14A3C} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Demo09/module.pas b/Demos/Demo09/module.pas index 1255cd55..78ff6f34 100644 --- a/Demos/Demo09/module.pas +++ b/Demos/Demo09/module.pas @@ -34,6 +34,9 @@ procedure initdemodll; try gEngine := TPythonEngine.Create(nil); gEngine.AutoFinalize := False; + gEngine.UseLastKnownVersion := False; + gEngine.DllName := 'python39.dll'; + gEngine.DllPath := 'E:\EXE\Python3'; gEngine.LoadDll; gModule := TPythonModule.Create(nil); gModule.Engine := gEngine; @@ -51,9 +54,8 @@ function PyInit_demodll : PPyObject; gEngine := TPythonEngine.Create(nil); gEngine.AutoFinalize := False; gEngine.UseLastKnownVersion := False; - gEngine.RegVersion := '3.7'; //<-- Use the same version as the python 3.x your main program uses - gEngine.APIVersion := 1013; - gEngine.DllName := 'python37.dll'; + gEngine.DllName := 'python39.dll'; + gEngine.DllPath := 'E:\EXE\Python3'; gEngine.LoadDll; gModule := TPythonModule.Create(nil); gModule.Engine := gEngine; diff --git a/Demos/Demo10_FireDAC/Demo10.dproj b/Demos/Demo10_FireDAC/Demo10.dproj index 63410258..c688bb39 100644 --- a/Demos/Demo10_FireDAC/Demo10.dproj +++ b/Demos/Demo10_FireDAC/Demo10.dproj @@ -58,6 +58,7 @@ true true + Demo10.exe 00400000 @@ -67,6 +68,7 @@ 1032 CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= .\$(Platform)\$(Config) + ..\SearchPath1.optset System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -135,6 +137,7 @@ Base + ..\SearchPath1.optset Cfg_1 diff --git a/Demos/Demo10_FireDAC/fmMain.dfm b/Demos/Demo10_FireDAC/fmMain.dfm index 092d319f..56bf5a33 100644 --- a/Demos/Demo10_FireDAC/fmMain.dfm +++ b/Demos/Demo10_FireDAC/fmMain.dfm @@ -1,416 +1,419 @@ -object Main: TMain - Left = 142 - Top = 147 - Caption = 'Demo 10 : DB with FireDac API' - ClientHeight = 660 - ClientWidth = 904 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnDestroy = FormDestroy - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 496 - Width = 904 - Height = 7 - Cursor = crVSplit - Align = alBottom - ExplicitTop = 289 - ExplicitWidth = 688 - end - object RichEdit1: TRichEdit - Left = 0 - Top = 503 - Width = 904 - Height = 157 - Align = alBottom - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - ScrollBars = ssBoth - TabOrder = 0 - WordWrap = False - Zoom = 100 - end - object Panel6: TPanel - Left = 0 - Top = 0 - Width = 904 - Height = 41 - Align = alTop - TabOrder = 1 - object Label5: TLabel - Left = 40 - Top = 16 - Width = 46 - Height = 13 - Caption = 'Database' - end - object btnSQLTest: TButton - Left = 584 - Top = 10 - Width = 75 - Height = 25 - Caption = 'Test' - TabOrder = 0 - OnClick = btnSQLTestClick - end - object cobxConnSQLServer: TComboBox - Left = 111 - Top = 12 - Width = 443 - Height = 21 - TabOrder = 1 - end - end - object PageControl: TPageControl - Left = 0 - Top = 41 - Width = 904 - Height = 455 - ActivePage = TabSheet1 - Align = alClient - TabOrder = 2 - OnChange = PageControlChange - object TabSheet1: TTabSheet - Caption = 'Example 1' - object Splitter7: TSplitter - Left = 497 - Top = 0 - Height = 427 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitHeight = 261 - end - object SynEditScript1: TSynEdit - Left = 0 - Top = 0 - Width = 497 - Height = 427 - Align = alLeft - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - Font.Quality = fqClearTypeNatural - TabOrder = 0 - UseCodeFolding = False - Gutter.Font.Charset = DEFAULT_CHARSET - Gutter.Font.Color = clWindowText - Gutter.Font.Height = -11 - Gutter.Font.Name = 'Courier New' - Gutter.Font.Style = [] - Gutter.RightOffset = 15 - Gutter.ShowLineNumbers = True - Highlighter = SynPythonSyn - Lines.Strings = ( - '') - end - object Panel7: TPanel - Left = 500 - Top = 0 - Width = 396 - Height = 427 - Align = alClient - TabOrder = 1 - object Label1: TLabel - Left = 10 - Top = 34 - Width = 379 - Height = 65 - Caption = - 'Example 1 shows you how to create your own TFDTable object and w' + - 'ork with it.'#13#10#13#10'Example 2 shows you how to create a TFDTable obj' + - 'ect connected to an'#13#10' already created Delphi TFDTable (which' + - ' may include calculated fields'#13#10' and the like).' - end - object Label2: TLabel - Left = 10 - Top = 126 - Width = 372 - Height = 52 - Caption = - 'Example 3 shows you how to connect a Python Table to a Delphi Da' + - 'tasource.'#13#10#13#10'Example 4 show you how to create your own TFDQuery ' + - 'object and work with it'#13#10 - end - object btnExecuteExample1: TButton - Left = 272 - Top = 3 - Width = 75 - Height = 25 - Caption = 'Execute' - TabOrder = 0 - OnClick = btnExecuteExample1Click - end - end - end - object TabSheet2: TTabSheet - Caption = 'Example 2' - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 - object Splitter3: TSplitter - Left = 497 - Top = 0 - Height = 427 - ExplicitLeft = 257 - ExplicitHeight = 261 - end - object Panel1: TPanel - Left = 500 - Top = 0 - Width = 90 - Height = 427 - Align = alLeft - BevelOuter = bvNone - TabOrder = 0 - object btnExecuteExample2: TButton - Left = 6 - Top = 8 - Width = 75 - Height = 25 - Caption = 'Execute' - TabOrder = 0 - OnClick = btnExecuteExample2Click - end - end - object DBGrid1: TDBGrid - Left = 590 - Top = 0 - Width = 306 - Height = 427 - Align = alClient - DataSource = dsrcCustomer - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object SynEditScript2: TSynEdit - Left = 0 - Top = 0 - Width = 497 - Height = 427 - Align = alLeft - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - Font.Quality = fqClearTypeNatural - TabOrder = 2 - UseCodeFolding = False - Gutter.Font.Charset = DEFAULT_CHARSET - Gutter.Font.Color = clWindowText - Gutter.Font.Height = -11 - Gutter.Font.Name = 'Courier New' - Gutter.Font.Style = [] - Gutter.ShowLineNumbers = True - Highlighter = SynPythonSyn - Lines.Strings = ( - '') - end - end - object TabSheet4: TTabSheet - Caption = 'Example 3' - object Splitter4: TSplitter - Left = 497 - Top = 0 - Height = 427 - ExplicitLeft = 257 - ExplicitHeight = 261 - end - object Panel3: TPanel - Left = 500 - Top = 0 - Width = 90 - Height = 427 - Align = alLeft - BevelOuter = bvNone - TabOrder = 0 - object btnExecuteExample3: TButton - Left = 6 - Top = 8 - Width = 75 - Height = 25 - Caption = 'Execute' - TabOrder = 0 - OnClick = btnExecuteExample3Click - end - end - object DBGrid2: TDBGrid - Left = 590 - Top = 0 - Width = 306 - Height = 427 - Align = alClient - DataSource = DataSource2 - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object SynEditScript3: TSynEdit - Left = 0 - Top = 0 - Width = 497 - Height = 427 - Align = alLeft - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - Font.Quality = fqClearTypeNatural - TabOrder = 2 - UseCodeFolding = False - Gutter.Font.Charset = DEFAULT_CHARSET - Gutter.Font.Color = clWindowText - Gutter.Font.Height = -11 - Gutter.Font.Name = 'Courier New' - Gutter.Font.Style = [] - Gutter.ShowLineNumbers = True - Highlighter = SynPythonSyn - Lines.Strings = ( - '') - end - end - object TabSheet5: TTabSheet - Caption = 'Example 4' - object Splitter2: TSplitter - Left = 497 - Top = 0 - Height = 427 - ExplicitLeft = 257 - ExplicitHeight = 261 - end - object Panel2: TPanel - Left = 500 - Top = 0 - Width = 396 - Height = 427 - Align = alClient - BevelOuter = bvNone - TabOrder = 0 - object btnExecuteExample4: TButton - Left = 16 - Top = 8 - Width = 75 - Height = 25 - Caption = 'Execute' - TabOrder = 0 - OnClick = btnExecuteExample4Click - end - end - object SynEditScript4: TSynEdit - Left = 0 - Top = 0 - Width = 497 - Height = 427 - Align = alLeft - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - Font.Quality = fqClearTypeNatural - TabOrder = 1 - UseCodeFolding = False - Gutter.Font.Charset = DEFAULT_CHARSET - Gutter.Font.Color = clWindowText - Gutter.Font.Height = -11 - Gutter.Font.Name = 'Courier New' - Gutter.Font.Style = [] - Gutter.ShowLineNumbers = True - Highlighter = SynPythonSyn - Lines.Strings = ( - '') - Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces] - end - end - end - object PythonGUIInputOutput: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = RichEdit1 - Left = 88 - Top = 240 - end - object modDBFireDac: TPythonModule - Engine = PythonEngine - OnInitialization = modDBFireDacInitialization - ModuleName = 'DBFireDac' - Errors = <> - Left = 192 - Top = 240 - end - object dsrcCustomer: TDataSource - DataSet = tblCustomer - Left = 432 - Top = 120 - end - object DataSource2: TDataSource - Left = 432 - Top = 72 - end - object Connection: TFDConnection - Params.Strings = ( - 'DriverID=SQLite' - 'Database=Demo.s3db' - 'CharacterSet=UTF8') - LoginPrompt = False - Left = 432 - Top = 168 - end - object mqSrcTables: TFDMetaInfoQuery - Connection = Connection - TableKinds = [tkTable] - ObjectScopes = [osMy, osOther] - Left = 352 - Top = 72 - end - object SynPythonSyn: TSynPythonSyn - Options.AutoDetectEnabled = False - Options.AutoDetectLineLimit = 0 - Options.Visible = False - Left = 76 - Top = 73 - end - object PythonEngine: TPythonEngine - IO = PythonGUIInputOutput - Left = 84 - Top = 289 - end - object tblCustomer: TFDTable - IndexFieldNames = 'CUSTNO' - Connection = Connection - UpdateOptions.UpdateTableName = 'CUSTOMER' - TableName = 'CUSTOMER' - Left = 356 - Top = 121 - end - object PyDelphiWrapper: TPyDelphiWrapper - Engine = PythonEngine - Module = modDBFireDac - Left = 192 - Top = 296 - end -end +object Main: TMain + Left = 142 + Top = 147 + Caption = 'Demo 10 : DB with FireDac API' + ClientHeight = 660 + ClientWidth = 904 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poScreenCenter + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 496 + Width = 904 + Height = 7 + Cursor = crVSplit + Align = alBottom + ExplicitTop = 289 + ExplicitWidth = 688 + end + object RichEdit1: TRichEdit + Left = 0 + Top = 503 + Width = 904 + Height = 157 + Align = alBottom + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + Zoom = 100 + end + object Panel6: TPanel + Left = 0 + Top = 0 + Width = 904 + Height = 41 + Align = alTop + TabOrder = 1 + object Label5: TLabel + Left = 40 + Top = 16 + Width = 46 + Height = 13 + Caption = 'Database' + end + object btnSQLTest: TButton + Left = 584 + Top = 10 + Width = 75 + Height = 25 + Caption = 'Test' + TabOrder = 0 + OnClick = btnSQLTestClick + end + object cobxConnSQLServer: TComboBox + Left = 111 + Top = 12 + Width = 443 + Height = 21 + TabOrder = 1 + end + end + object PageControl: TPageControl + Left = 0 + Top = 41 + Width = 904 + Height = 455 + ActivePage = TabSheet1 + Align = alClient + TabOrder = 2 + OnChange = PageControlChange + object TabSheet1: TTabSheet + Caption = 'Example 1' + object Splitter7: TSplitter + Left = 497 + Top = 0 + Height = 427 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitHeight = 261 + end + object SynEditScript1: TSynEdit + Left = 0 + Top = 0 + Width = 497 + Height = 427 + Align = alLeft + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Courier New' + Font.Style = [] + Font.Quality = fqClearTypeNatural + TabOrder = 0 + UseCodeFolding = False + Gutter.Font.Charset = DEFAULT_CHARSET + Gutter.Font.Color = clWindowText + Gutter.Font.Height = -11 + Gutter.Font.Name = 'Courier New' + Gutter.Font.Style = [] + Gutter.RightOffset = 15 + Gutter.ShowLineNumbers = True + Highlighter = SynPythonSyn + Lines.Strings = ( + '') + end + object Panel7: TPanel + Left = 500 + Top = 0 + Width = 396 + Height = 427 + Align = alClient + TabOrder = 1 + object Label1: TLabel + Left = 10 + Top = 34 + Width = 379 + Height = 65 + Caption = + 'Example 1 shows you how to create your own TFDTable object and w' + + 'ork with it.'#13#10#13#10'Example 2 shows you how to create a TFDTable obj' + + 'ect connected to an'#13#10' already created Delphi TFDTable (which' + + ' may include calculated fields'#13#10' and the like).' + end + object Label2: TLabel + Left = 10 + Top = 126 + Width = 372 + Height = 52 + Caption = + 'Example 3 shows you how to connect a Python Table to a Delphi Da' + + 'tasource.'#13#10#13#10'Example 4 show you how to create your own TFDQuery ' + + 'object and work with it'#13#10 + end + object btnExecuteExample1: TButton + Left = 272 + Top = 3 + Width = 75 + Height = 25 + Caption = 'Execute' + TabOrder = 0 + OnClick = btnExecuteExample1Click + end + end + end + object TabSheet2: TTabSheet + Caption = 'Example 2' + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Splitter3: TSplitter + Left = 497 + Top = 0 + Height = 427 + ExplicitLeft = 257 + ExplicitHeight = 261 + end + object Panel1: TPanel + Left = 500 + Top = 0 + Width = 90 + Height = 427 + Align = alLeft + BevelOuter = bvNone + TabOrder = 0 + object btnExecuteExample2: TButton + Left = 6 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Execute' + TabOrder = 0 + OnClick = btnExecuteExample2Click + end + end + object DBGrid1: TDBGrid + Left = 590 + Top = 0 + Width = 306 + Height = 427 + Align = alClient + DataSource = dsrcCustomer + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + end + object SynEditScript2: TSynEdit + Left = 0 + Top = 0 + Width = 497 + Height = 427 + Align = alLeft + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Courier New' + Font.Style = [] + Font.Quality = fqClearTypeNatural + TabOrder = 2 + UseCodeFolding = False + Gutter.Font.Charset = DEFAULT_CHARSET + Gutter.Font.Color = clWindowText + Gutter.Font.Height = -11 + Gutter.Font.Name = 'Courier New' + Gutter.Font.Style = [] + Gutter.ShowLineNumbers = True + Highlighter = SynPythonSyn + Lines.Strings = ( + '') + end + end + object TabSheet4: TTabSheet + Caption = 'Example 3' + object Splitter4: TSplitter + Left = 497 + Top = 0 + Height = 427 + ExplicitLeft = 257 + ExplicitHeight = 261 + end + object Panel3: TPanel + Left = 500 + Top = 0 + Width = 90 + Height = 427 + Align = alLeft + BevelOuter = bvNone + TabOrder = 0 + object btnExecuteExample3: TButton + Left = 6 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Execute' + TabOrder = 0 + OnClick = btnExecuteExample3Click + end + end + object DBGrid2: TDBGrid + Left = 590 + Top = 0 + Width = 306 + Height = 427 + Align = alClient + DataSource = DataSource2 + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + end + object SynEditScript3: TSynEdit + Left = 0 + Top = 0 + Width = 497 + Height = 427 + Align = alLeft + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Courier New' + Font.Style = [] + Font.Quality = fqClearTypeNatural + TabOrder = 2 + UseCodeFolding = False + Gutter.Font.Charset = DEFAULT_CHARSET + Gutter.Font.Color = clWindowText + Gutter.Font.Height = -11 + Gutter.Font.Name = 'Courier New' + Gutter.Font.Style = [] + Gutter.ShowLineNumbers = True + Highlighter = SynPythonSyn + Lines.Strings = ( + '') + end + end + object TabSheet5: TTabSheet + Caption = 'Example 4' + object Splitter2: TSplitter + Left = 497 + Top = 0 + Height = 427 + ExplicitLeft = 257 + ExplicitHeight = 261 + end + object Panel2: TPanel + Left = 500 + Top = 0 + Width = 396 + Height = 427 + Align = alClient + BevelOuter = bvNone + TabOrder = 0 + object btnExecuteExample4: TButton + Left = 16 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Execute' + TabOrder = 0 + OnClick = btnExecuteExample4Click + end + end + object SynEditScript4: TSynEdit + Left = 0 + Top = 0 + Width = 497 + Height = 427 + Align = alLeft + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Courier New' + Font.Style = [] + Font.Quality = fqClearTypeNatural + TabOrder = 1 + UseCodeFolding = False + Gutter.Font.Charset = DEFAULT_CHARSET + Gutter.Font.Color = clWindowText + Gutter.Font.Height = -11 + Gutter.Font.Name = 'Courier New' + Gutter.Font.Style = [] + Gutter.ShowLineNumbers = True + Highlighter = SynPythonSyn + Lines.Strings = ( + '') + Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces] + end + end + end + object PythonGUIInputOutput: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = RichEdit1 + Left = 88 + Top = 240 + end + object modDBFireDac: TPythonModule + Engine = PythonEngine + OnInitialization = modDBFireDacInitialization + ModuleName = 'DBFireDac' + Errors = <> + Left = 192 + Top = 240 + end + object dsrcCustomer: TDataSource + DataSet = tblCustomer + Left = 432 + Top = 120 + end + object DataSource2: TDataSource + Left = 432 + Top = 72 + end + object Connection: TFDConnection + Params.Strings = ( + 'DriverID=SQLite' + 'Database=Demo.s3db' + 'CharacterSet=UTF8') + LoginPrompt = False + Left = 432 + Top = 168 + end + object mqSrcTables: TFDMetaInfoQuery + Connection = Connection + TableKinds = [tkTable] + ObjectScopes = [osMy, osOther] + Left = 352 + Top = 72 + end + object SynPythonSyn: TSynPythonSyn + Options.AutoDetectEnabled = False + Options.AutoDetectLineLimit = 0 + Options.Visible = False + Left = 76 + Top = 73 + end + object PythonEngine: TPythonEngine + UseLastKnownVersion = False + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + IO = PythonGUIInputOutput + Left = 84 + Top = 289 + end + object tblCustomer: TFDTable + IndexFieldNames = 'CUSTNO' + Connection = Connection + UpdateOptions.UpdateTableName = 'CUSTOMER' + TableName = 'CUSTOMER' + Left = 356 + Top = 121 + end + object PyDelphiWrapper: TPyDelphiWrapper + Engine = PythonEngine + Module = modDBFireDac + Left = 192 + Top = 296 + end +end diff --git a/Demos/Demo11/ThSort.dfm b/Demos/Demo11/ThSort.dfm index 2f5f2710..f7825942 100644 --- a/Demos/Demo11/ThSort.dfm +++ b/Demos/Demo11/ThSort.dfm @@ -1,193 +1,198 @@ -object ThreadSortForm: TThreadSortForm - Left = 171 - Top = 19 - Caption = 'Thread Sorting Demo' - ClientHeight = 510 - ClientWidth = 559 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCloseQuery = FormCloseQuery - OnCreate = FormCreate - DesignSize = ( - 559 - 510) - PixelsPerInch = 96 - TextHeight = 13 - object Bevel1: TBevel - Left = 8 - Top = 24 - Width = 177 - Height = 355 - end - object Bevel3: TBevel - Left = 376 - Top = 24 - Width = 177 - Height = 355 - end - object Bevel2: TBevel - Left = 192 - Top = 24 - Width = 177 - Height = 355 - end - object BubbleSortBox: TPaintBox - Left = 8 - Top = 24 - Width = 177 - Height = 355 - OnPaint = BubbleSortBoxPaint - end - object SelectionSortBox: TPaintBox - Left = 192 - Top = 24 - Width = 177 - Height = 355 - OnPaint = SelectionSortBoxPaint - end - object QuickSortBox: TPaintBox - Left = 376 - Top = 24 - Width = 177 - Height = 355 - OnPaint = QuickSortBoxPaint - end - object Label1: TLabel - Left = 8 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc1' - end - object Label2: TLabel - Left = 192 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc2' - end - object Label3: TLabel - Left = 376 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc3' - end - object StartBtn: TButton - Left = 456 - Top = 384 - Width = 97 - Height = 25 - Caption = 'three interpreters' - TabOrder = 0 - OnClick = StartBtnClick - end - object PythonMemo: TMemo - Left = 8 - Top = 407 - Width = 545 - Height = 97 - Anchors = [akLeft, akTop, akRight, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'from SortModule import getvalue,swap' - ' ' - 'def SortFunc1(handle, low, high):' - ' for i in range(low, high):' - ' for j in range(low+1,high):' - ' if getvalue(handle,j-1) > getvalue(handle,j):' - ' swap(handle,j-1,j)' - '' - 'def SortFunc2(handle,low,high):' - ' for i in range(low,high-1):' - ' for j in range(i+1,high):' - ' if getvalue(handle,i) > getvalue(handle,j):' - ' swap(handle,i,j)' - '' - 'def SortFunc3(handle,low,high):' - ' Lo = low' - ' Hi = high-1' - ' Mid = getvalue(handle,(Lo+Hi) // 2)' - ' while 1:' - ' while getvalue(handle,Lo) < Mid: ' - ' Lo = Lo + 1' - ' while getvalue(handle,Hi) > Mid:' - ' Hi = Hi - 1' - ' if Lo <= Hi:' - ' swap(handle,Lo,Hi)' - ' Lo = Lo + 1' - ' Hi = Hi - 1' - ' if Lo > Hi:' - ' break' - ' if Hi > low:' - ' SortFunc3(handle,low,Hi+1)' - ' if Lo < high-1:' - ' SortFunc3(handle,Lo,high)') - ParentFont = False - ScrollBars = ssVertical - TabOrder = 1 - end - object Start2Btn: TButton - Left = 344 - Top = 384 - Width = 97 - Height = 25 - Caption = 'one interpreter' - TabOrder = 2 - OnClick = Start2BtnClick - end - object LoadBtn: TButton - Left = 120 - Top = 384 - Width = 97 - Height = 25 - Caption = 'Load Script' - TabOrder = 3 - OnClick = LoadBtnClick - end - object SaveBtn: TButton - Left = 232 - Top = 384 - Width = 97 - Height = 25 - Caption = 'Save Script' - TabOrder = 4 - OnClick = SaveBtnClick - end - object PythonEngine1: TPythonEngine - InitThreads = True - RedirectIO = False - Left = 16 - Top = 32 - end - object PythonDialog: TOpenDialog - DefaultExt = 'py' - Filter = 'Python scripts|*.py|All files|*.*' - Left = 72 - Top = 80 - end - object SaveDialog: TSaveDialog - DefaultExt = 'py' - Filter = 'Python scripts|*.py|All files|*.*' - Left = 16 - Top = 80 - end - object SortModule: TPythonModule - Engine = PythonEngine1 - OnInitialization = SortModuleInitialization - ModuleName = 'SortModule' - Errors = <> - Left = 64 - Top = 32 - end -end +object ThreadSortForm: TThreadSortForm + Left = 171 + Top = 19 + Caption = 'Thread Sorting Demo' + ClientHeight = 510 + ClientWidth = 559 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poScreenCenter + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + DesignSize = ( + 559 + 510) + PixelsPerInch = 96 + TextHeight = 13 + object Bevel1: TBevel + Left = 8 + Top = 24 + Width = 177 + Height = 355 + end + object Bevel3: TBevel + Left = 376 + Top = 24 + Width = 177 + Height = 355 + end + object Bevel2: TBevel + Left = 192 + Top = 24 + Width = 177 + Height = 355 + end + object BubbleSortBox: TPaintBox + Left = 8 + Top = 24 + Width = 177 + Height = 355 + OnPaint = BubbleSortBoxPaint + end + object SelectionSortBox: TPaintBox + Left = 192 + Top = 24 + Width = 177 + Height = 355 + OnPaint = SelectionSortBoxPaint + end + object QuickSortBox: TPaintBox + Left = 376 + Top = 24 + Width = 177 + Height = 355 + OnPaint = QuickSortBoxPaint + end + object Label1: TLabel + Left = 8 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc1' + end + object Label2: TLabel + Left = 192 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc2' + end + object Label3: TLabel + Left = 376 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc3' + end + object StartBtn: TButton + Left = 456 + Top = 384 + Width = 97 + Height = 25 + Caption = 'three interpreters' + TabOrder = 0 + OnClick = StartBtnClick + end + object PythonMemo: TMemo + Left = 8 + Top = 407 + Width = 545 + Height = 97 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'from SortModule import getvalue,swap' + ' ' + 'def SortFunc1(handle, low, high):' + ' for i in range(low, high):' + ' for j in range(low+1,high):' + ' if getvalue(handle,j-1) > getvalue(handle,j):' + ' swap(handle,j-1,j)' + '' + 'def SortFunc2(handle,low,high):' + ' for i in range(low,high-1):' + ' for j in range(i+1,high):' + ' if getvalue(handle,i) > getvalue(handle,j):' + ' swap(handle,i,j)' + '' + 'def SortFunc3(handle,low,high):' + ' Lo = low' + ' Hi = high-1' + ' Mid = getvalue(handle,(Lo+Hi) // 2)' + ' while 1:' + ' while getvalue(handle,Lo) < Mid: ' + ' Lo = Lo + 1' + ' while getvalue(handle,Hi) > Mid:' + ' Hi = Hi - 1' + ' if Lo <= Hi:' + ' swap(handle,Lo,Hi)' + ' Lo = Lo + 1' + ' Hi = Hi - 1' + ' if Lo > Hi:' + ' break' + ' if Hi > low:' + ' SortFunc3(handle,low,Hi+1)' + ' if Lo < high-1:' + ' SortFunc3(handle,Lo,high)') + ParentFont = False + ScrollBars = ssVertical + TabOrder = 1 + end + object Start2Btn: TButton + Left = 344 + Top = 384 + Width = 97 + Height = 25 + Caption = 'one interpreter' + TabOrder = 2 + OnClick = Start2BtnClick + end + object LoadBtn: TButton + Left = 120 + Top = 384 + Width = 97 + Height = 25 + Caption = 'Load Script' + TabOrder = 3 + OnClick = LoadBtnClick + end + object SaveBtn: TButton + Left = 232 + Top = 384 + Width = 97 + Height = 25 + Caption = 'Save Script' + TabOrder = 4 + OnClick = SaveBtnClick + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + InitThreads = True + RedirectIO = False + Left = 16 + Top = 32 + end + object PythonDialog: TOpenDialog + DefaultExt = 'py' + Filter = 'Python scripts|*.py|All files|*.*' + Left = 72 + Top = 80 + end + object SaveDialog: TSaveDialog + DefaultExt = 'py' + Filter = 'Python scripts|*.py|All files|*.*' + Left = 16 + Top = 80 + end + object SortModule: TPythonModule + Engine = PythonEngine1 + OnInitialization = SortModuleInitialization + ModuleName = 'SortModule' + Errors = <> + Left = 64 + Top = 32 + end +end diff --git a/Demos/Demo11/ThrdDemo.dproj b/Demos/Demo11/ThrdDemo.dproj index a7112977..0fecc7ff 100644 --- a/Demos/Demo11/ThrdDemo.dproj +++ b/Demos/Demo11/ThrdDemo.dproj @@ -7,7 +7,7 @@ 19.1 VCL True - Win64 + Win32 3 Application @@ -58,6 +58,7 @@ true true + ThrdDemo.exe 00400000 @@ -66,6 +67,7 @@ Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) 1033 CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -132,6 +134,7 @@ Base + ..\SearchPath1.optset Cfg_1 diff --git a/Demos/Demo16/Example1/Demo16a.dpr b/Demos/Demo16/Example1/Demo16a.dpr index 54592df1..6dccbeab 100644 --- a/Demos/Demo16/Example1/Demo16a.dpr +++ b/Demos/Demo16/Example1/Demo16a.dpr @@ -1,15 +1,15 @@ -program Demo16a; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo16a; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo16/Example1/Demo16a.dproj b/Demos/Demo16/Example1/Demo16a.dproj index 4e842bf8..e7c28e69 100644 --- a/Demos/Demo16/Example1/Demo16a.dproj +++ b/Demos/Demo16/Example1/Demo16a.dproj @@ -1,189 +1,192 @@ - - - {FEB76A6C-3FF0-423D-AA7F-BA28CE5A6B63} - Demo16a.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo16a.exe - 00400000 - x86 - Demo16a - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo16a.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {FEB76A6C-3FF0-423D-AA7F-BA28CE5A6B63} + Demo16a.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo16a.exe + 00400000 + x86 + Demo16a + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\..\SearchPath2.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\..\SearchPath2.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo16a.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo16/Example1/Unit1.dfm b/Demos/Demo16/Example1/Unit1.dfm index 56e61e47..34e91355 100644 --- a/Demos/Demo16/Example1/Unit1.dfm +++ b/Demos/Demo16/Example1/Unit1.dfm @@ -1,244 +1,249 @@ -object Form1: TForm1 - Left = 200 - Top = 108 - Caption = 'Example 1 : Using a DelphiVar with a Dictionary' - ClientHeight = 441 - ClientWidth = 812 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 305 - Top = 0 - Height = 441 - ExplicitHeight = 446 - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 305 - Height = 441 - Align = alLeft - BevelOuter = bvNone - TabOrder = 0 - object GroupBox1: TGroupBox - Left = 16 - Top = 8 - Width = 273 - Height = 377 - Caption = 'Properties' - TabOrder = 0 - object Label1: TLabel - Left = 16 - Top = 16 - Width = 23 - Height = 13 - Caption = 'Title:' - end - object Label2: TLabel - Left = 16 - Top = 64 - Width = 31 - Height = 13 - Caption = 'Name:' - end - object Label3: TLabel - Left = 128 - Top = 176 - Width = 22 - Height = 13 - Caption = 'Age:' - end - object edName: TEdit - Left = 16 - Top = 80 - Width = 241 - Height = 21 - TabOrder = 0 - Text = 'Smith' - end - object cbInformatician: TCheckBox - Left = 16 - Top = 120 - Width = 97 - Height = 17 - Caption = 'Informatician?' - Checked = True - State = cbChecked - TabOrder = 1 - end - object rgSex: TRadioGroup - Left = 16 - Top = 168 - Width = 97 - Height = 65 - Caption = 'Sex' - ItemIndex = 0 - Items.Strings = ( - 'Male' - 'Female') - TabOrder = 2 - end - object cbPythonUser: TCheckBox - Left = 16 - Top = 136 - Width = 97 - Height = 17 - Caption = 'Python user?' - TabOrder = 3 - end - object cbTitle: TComboBox - Left = 16 - Top = 32 - Width = 241 - Height = 21 - TabOrder = 4 - Text = 'Mr' - Items.Strings = ( - 'Mr' - 'Mrs' - 'Miss' - 'Dr') - end - object edAge: TEdit - Left = 128 - Top = 192 - Width = 121 - Height = 21 - TabOrder = 5 - Text = '35' - end - end - object Button1: TButton - Left = 88 - Top = 408 - Width = 129 - Height = 25 - Caption = 'Execute Script' - TabOrder = 1 - OnClick = Button1Click - end - end - object Panel2: TPanel - Left = 308 - Top = 0 - Width = 504 - Height = 441 - Align = alClient - BevelOuter = bvNone - TabOrder = 1 - object Splitter2: TSplitter - Left = 0 - Top = 153 - Width = 504 - Height = 3 - Cursor = crVSplit - Align = alTop - ExplicitWidth = 380 - end - object Memo1: TMemo - Left = 0 - Top = 156 - Width = 504 - Height = 285 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - '# Define some constants' - 'Male = 0' - 'Female = 1' - '' - '# Display the Properties content' - 'print (Properties)' - '# Get one of the properties' - 'print (Properties.Value['#39'Title'#39'])' - '# Change one of the properties' - 'Properties.Value['#39'Age'#39'] = 55' - '# By reassigning the same object, we force the OnChange event' - '# That will update the Delphi controls' - 'Properties.Value = Properties.Value' - '' - '# We can simplify it with a new class' - 'class TProperties:' - ' def __init__(Self, DelphiVar):' - ' Self.__DelphiVar__ = DelphiVar' - '' - ' def __getattr__(Self, Key):' - ' return Self.__dict__['#39'__DelphiVar__'#39'].Value[Key]' - '' - ' def __setattr__(Self, Key, Value):' - ' if Key == "__DelphiVar__":' - ' Self.__dict__['#39'__DelphiVar__'#39'] = Value' - ' else:' - ' Self.__DelphiVar__.Value[Key] = Value' - ' Self.__DelphiVar__.Value = Self.__DelphiVar__.Value' - '' - ' def __repr__(Self):' - ' return str(Self.__DelphiVar__.Value)' - '' - ' def __str__(Self):' - ' return str(Self.__DelphiVar__.Value)' - '' - '# Instantiate our new class' - 'Props = TProperties( Properties )' - '# Use this instance to read/write the properties' - 'print ("Name:", Props.Name)' - 'Props.Name = "Watson"' - 'Props.PythonUser = True' - 'if Props.Sex == Male:' - ' print (Props.Name, "is male!")' - 'else:' - ' print (Props.Name, "is female!")' - 'print (Props)') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 0 - end - object Memo2: TMemo - Left = 0 - Top = 0 - Width = 504 - Height = 153 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - ParentFont = False - TabOrder = 1 - end - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 8 - Top = 400 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo2 - Left = 40 - Top = 400 - end - object PythonDelphiVar1: TPythonDelphiVar - Engine = PythonEngine1 - Module = '__main__' - VarName = 'Properties' - OnExtGetData = PythonDelphiVar1ExtGetData - OnExtSetData = PythonDelphiVar1ExtSetData - OnChange = PythonDelphiVar1Change - Left = 240 - Top = 400 - end -end +object Form1: TForm1 + Left = 200 + Top = 108 + Caption = 'Example 1 : Using a DelphiVar with a Dictionary' + ClientHeight = 441 + ClientWidth = 812 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 305 + Top = 0 + Height = 441 + ExplicitHeight = 446 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 305 + Height = 441 + Align = alLeft + BevelOuter = bvNone + TabOrder = 0 + object GroupBox1: TGroupBox + Left = 16 + Top = 8 + Width = 273 + Height = 377 + Caption = 'Properties' + TabOrder = 0 + object Label1: TLabel + Left = 16 + Top = 16 + Width = 23 + Height = 13 + Caption = 'Title:' + end + object Label2: TLabel + Left = 16 + Top = 64 + Width = 31 + Height = 13 + Caption = 'Name:' + end + object Label3: TLabel + Left = 128 + Top = 176 + Width = 22 + Height = 13 + Caption = 'Age:' + end + object edName: TEdit + Left = 16 + Top = 80 + Width = 241 + Height = 21 + TabOrder = 0 + Text = 'Smith' + end + object cbInformatician: TCheckBox + Left = 16 + Top = 120 + Width = 97 + Height = 17 + Caption = 'Informatician?' + Checked = True + State = cbChecked + TabOrder = 1 + end + object rgSex: TRadioGroup + Left = 16 + Top = 168 + Width = 97 + Height = 65 + Caption = 'Sex' + ItemIndex = 0 + Items.Strings = ( + 'Male' + 'Female') + TabOrder = 2 + end + object cbPythonUser: TCheckBox + Left = 16 + Top = 136 + Width = 97 + Height = 17 + Caption = 'Python user?' + TabOrder = 3 + end + object cbTitle: TComboBox + Left = 16 + Top = 32 + Width = 241 + Height = 21 + TabOrder = 4 + Text = 'Mr' + Items.Strings = ( + 'Mr' + 'Mrs' + 'Miss' + 'Dr') + end + object edAge: TEdit + Left = 128 + Top = 192 + Width = 121 + Height = 21 + TabOrder = 5 + Text = '35' + end + end + object Button1: TButton + Left = 88 + Top = 408 + Width = 129 + Height = 25 + Caption = 'Execute Script' + TabOrder = 1 + OnClick = Button1Click + end + end + object Panel2: TPanel + Left = 308 + Top = 0 + Width = 504 + Height = 441 + Align = alClient + BevelOuter = bvNone + TabOrder = 1 + object Splitter2: TSplitter + Left = 0 + Top = 153 + Width = 504 + Height = 3 + Cursor = crVSplit + Align = alTop + ExplicitWidth = 380 + end + object Memo1: TMemo + Left = 0 + Top = 156 + Width = 504 + Height = 285 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + '# Define some constants' + 'Male = 0' + 'Female = 1' + '' + '# Display the Properties content' + 'print (Properties)' + '# Get one of the properties' + 'print (Properties.Value['#39'Title'#39'])' + '# Change one of the properties' + 'Properties.Value['#39'Age'#39'] = 55' + '# By reassigning the same object, we force the OnChange event' + '# That will update the Delphi controls' + 'Properties.Value = Properties.Value' + '' + '# We can simplify it with a new class' + 'class TProperties:' + ' def __init__(Self, DelphiVar):' + ' Self.__DelphiVar__ = DelphiVar' + '' + ' def __getattr__(Self, Key):' + ' return Self.__dict__['#39'__DelphiVar__'#39'].Value[Key]' + '' + ' def __setattr__(Self, Key, Value):' + ' if Key == "__DelphiVar__":' + ' Self.__dict__['#39'__DelphiVar__'#39'] = Value' + ' else:' + ' Self.__DelphiVar__.Value[Key] = Value' + ' Self.__DelphiVar__.Value = Self.__DelphiVar__.Value' + '' + ' def __repr__(Self):' + ' return str(Self.__DelphiVar__.Value)' + '' + ' def __str__(Self):' + ' return str(Self.__DelphiVar__.Value)' + '' + '# Instantiate our new class' + 'Props = TProperties( Properties )' + '# Use this instance to read/write the properties' + 'print ("Name:", Props.Name)' + 'Props.Name = "Watson"' + 'Props.PythonUser = True' + 'if Props.Sex == Male:' + ' print (Props.Name, "is male!")' + 'else:' + ' print (Props.Name, "is female!")' + 'print (Props)') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 0 + end + object Memo2: TMemo + Left = 0 + Top = 0 + Width = 504 + Height = 153 + Align = alTop + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + ParentFont = False + TabOrder = 1 + end + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + IO = PythonGUIInputOutput1 + Left = 8 + Top = 400 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo2 + Left = 40 + Top = 400 + end + object PythonDelphiVar1: TPythonDelphiVar + Engine = PythonEngine1 + Module = '__main__' + VarName = 'Properties' + OnExtGetData = PythonDelphiVar1ExtGetData + OnExtSetData = PythonDelphiVar1ExtSetData + OnChange = PythonDelphiVar1Change + Left = 240 + Top = 400 + end +end diff --git a/Demos/Demo16/Example2/Demo16b.dpr b/Demos/Demo16/Example2/Demo16b.dpr index 030afc3c..cb740757 100644 --- a/Demos/Demo16/Example2/Demo16b.dpr +++ b/Demos/Demo16/Example2/Demo16b.dpr @@ -1,15 +1,15 @@ -program Demo16b; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo16b; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo16/Example2/Demo16b.dproj b/Demos/Demo16/Example2/Demo16b.dproj index 093ab973..df2568a3 100644 --- a/Demos/Demo16/Example2/Demo16b.dproj +++ b/Demos/Demo16/Example2/Demo16b.dproj @@ -1,189 +1,192 @@ - - - {3B870EA7-EAEB-434F-8C0D-2800B09DC00C} - Demo16b.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo16b.exe - 00400000 - x86 - Demo16b - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo16b.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {3B870EA7-EAEB-434F-8C0D-2800B09DC00C} + Demo16b.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo16b.exe + 00400000 + x86 + Demo16b + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\..\SearchPath2.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\..\SearchPath2.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo16b.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo16/Example2/Unit1.dfm b/Demos/Demo16/Example2/Unit1.dfm index c1b00546..8d831c0f 100644 --- a/Demos/Demo16/Example2/Unit1.dfm +++ b/Demos/Demo16/Example2/Unit1.dfm @@ -1,234 +1,239 @@ -object Form1: TForm1 - Left = 200 - Top = 108 - Caption = 'Example 2 : using module functions' - ClientHeight = 441 - ClientWidth = 680 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 305 - Top = 0 - Height = 441 - ExplicitHeight = 453 - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 305 - Height = 441 - Align = alLeft - BevelOuter = bvNone - TabOrder = 0 - object GroupBox1: TGroupBox - Left = 16 - Top = 8 - Width = 273 - Height = 377 - Caption = 'Properties' - TabOrder = 0 - object Label1: TLabel - Left = 16 - Top = 16 - Width = 23 - Height = 13 - Caption = 'Title:' - end - object Label2: TLabel - Left = 16 - Top = 64 - Width = 31 - Height = 13 - Caption = 'Name:' - end - object Label3: TLabel - Left = 128 - Top = 176 - Width = 22 - Height = 13 - Caption = 'Age:' - end - object edName: TEdit - Left = 16 - Top = 80 - Width = 241 - Height = 21 - TabOrder = 0 - Text = 'Smith' - end - object cbInformatician: TCheckBox - Left = 16 - Top = 120 - Width = 97 - Height = 17 - Caption = 'Informatician ?' - Checked = True - State = cbChecked - TabOrder = 1 - end - object rgSex: TRadioGroup - Left = 16 - Top = 168 - Width = 97 - Height = 65 - Caption = 'Sex' - ItemIndex = 0 - Items.Strings = ( - 'Male' - 'Female') - TabOrder = 2 - end - object cbPythonUser: TCheckBox - Left = 16 - Top = 136 - Width = 97 - Height = 17 - Caption = 'Python User ?' - TabOrder = 3 - end - object cbTitle: TComboBox - Left = 16 - Top = 32 - Width = 241 - Height = 21 - TabOrder = 4 - Text = 'Mr' - Items.Strings = ( - 'Mr' - 'Mrs' - 'Miss' - 'Dr') - end - object edAge: TEdit - Left = 128 - Top = 192 - Width = 121 - Height = 21 - TabOrder = 5 - Text = '35' - end - end - object Button1: TButton - Left = 88 - Top = 408 - Width = 129 - Height = 25 - Caption = 'Execute Script' - TabOrder = 1 - OnClick = Button1Click - end - end - object Panel2: TPanel - Left = 308 - Top = 0 - Width = 372 - Height = 441 - Align = alClient - BevelOuter = bvNone - TabOrder = 1 - object Splitter2: TSplitter - Left = 0 - Top = 209 - Width = 372 - Height = 3 - Cursor = crVSplit - Align = alTop - ExplicitWidth = 380 - end - object Memo1: TMemo - Left = 0 - Top = 212 - Width = 372 - Height = 229 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'import props' - '# Define some constants' - 'Male = 0' - 'Female = 1' - '' - '# Get one of the properties' - 'print (props.GetProperty('#39'Title'#39'))' - '# Change one of the properties' - 'props.SetProperty('#39'Age'#39', 55)' - '' - '# We can simplify it with a new class' - 'class TProperties:' - ' def __getattr__(Self, Key):' - ' return props.GetProperty(Key)' - '' - ' def __setattr__(Self, Key, Value):' - ' props.SetProperty(Key, Value)' - '' - ' def __repr__(Self):' - ' tmp = ""' - ' for i in props.GetPropertyList():' - ' if tmp:' - ' tmp = tmp + ", "' - ' tmp = tmp + i + " = " + str(getattr(Self,i))' - ' return tmp' - '' - '# Instantiate our new class' - 'Props = TProperties()' - '# Use this instance to read/write the properties' - 'print ("Name:", Props.Name)' - 'Props.Name = "Watson"' - 'Props.PythonUser = True' - 'if Props.Sex == Male:' - ' print (Props.Name, "is male!")' - 'else:' - ' print (Props.Name, "is female!")' - 'print (Props)') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 0 - WordWrap = False - end - object Memo2: TMemo - Left = 0 - Top = 0 - Width = 372 - Height = 209 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - ParentFont = False - TabOrder = 1 - end - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 8 - Top = 400 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo2 - Left = 40 - Top = 400 - end - object PythonModule1: TPythonModule - Engine = PythonEngine1 - OnInitialization = PythonModule1Initialization - ModuleName = 'props' - Errors = <> - Left = 232 - Top = 400 - end -end +object Form1: TForm1 + Left = 200 + Top = 108 + Caption = 'Example 2 : using module functions' + ClientHeight = 441 + ClientWidth = 680 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 305 + Top = 0 + Height = 441 + ExplicitHeight = 453 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 305 + Height = 441 + Align = alLeft + BevelOuter = bvNone + TabOrder = 0 + object GroupBox1: TGroupBox + Left = 16 + Top = 8 + Width = 273 + Height = 377 + Caption = 'Properties' + TabOrder = 0 + object Label1: TLabel + Left = 16 + Top = 16 + Width = 23 + Height = 13 + Caption = 'Title:' + end + object Label2: TLabel + Left = 16 + Top = 64 + Width = 31 + Height = 13 + Caption = 'Name:' + end + object Label3: TLabel + Left = 128 + Top = 176 + Width = 22 + Height = 13 + Caption = 'Age:' + end + object edName: TEdit + Left = 16 + Top = 80 + Width = 241 + Height = 21 + TabOrder = 0 + Text = 'Smith' + end + object cbInformatician: TCheckBox + Left = 16 + Top = 120 + Width = 97 + Height = 17 + Caption = 'Informatician ?' + Checked = True + State = cbChecked + TabOrder = 1 + end + object rgSex: TRadioGroup + Left = 16 + Top = 168 + Width = 97 + Height = 65 + Caption = 'Sex' + ItemIndex = 0 + Items.Strings = ( + 'Male' + 'Female') + TabOrder = 2 + end + object cbPythonUser: TCheckBox + Left = 16 + Top = 136 + Width = 97 + Height = 17 + Caption = 'Python User ?' + TabOrder = 3 + end + object cbTitle: TComboBox + Left = 16 + Top = 32 + Width = 241 + Height = 21 + TabOrder = 4 + Text = 'Mr' + Items.Strings = ( + 'Mr' + 'Mrs' + 'Miss' + 'Dr') + end + object edAge: TEdit + Left = 128 + Top = 192 + Width = 121 + Height = 21 + TabOrder = 5 + Text = '35' + end + end + object Button1: TButton + Left = 88 + Top = 408 + Width = 129 + Height = 25 + Caption = 'Execute Script' + TabOrder = 1 + OnClick = Button1Click + end + end + object Panel2: TPanel + Left = 308 + Top = 0 + Width = 372 + Height = 441 + Align = alClient + BevelOuter = bvNone + TabOrder = 1 + object Splitter2: TSplitter + Left = 0 + Top = 209 + Width = 372 + Height = 3 + Cursor = crVSplit + Align = alTop + ExplicitWidth = 380 + end + object Memo1: TMemo + Left = 0 + Top = 212 + Width = 372 + Height = 229 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'import props' + '# Define some constants' + 'Male = 0' + 'Female = 1' + '' + '# Get one of the properties' + 'print (props.GetProperty('#39'Title'#39'))' + '# Change one of the properties' + 'props.SetProperty('#39'Age'#39', 55)' + '' + '# We can simplify it with a new class' + 'class TProperties:' + ' def __getattr__(Self, Key):' + ' return props.GetProperty(Key)' + '' + ' def __setattr__(Self, Key, Value):' + ' props.SetProperty(Key, Value)' + '' + ' def __repr__(Self):' + ' tmp = ""' + ' for i in props.GetPropertyList():' + ' if tmp:' + ' tmp = tmp + ", "' + ' tmp = tmp + i + " = " + str(getattr(Self,i))' + ' return tmp' + '' + '# Instantiate our new class' + 'Props = TProperties()' + '# Use this instance to read/write the properties' + 'print ("Name:", Props.Name)' + 'Props.Name = "Watson"' + 'Props.PythonUser = True' + 'if Props.Sex == Male:' + ' print (Props.Name, "is male!")' + 'else:' + ' print (Props.Name, "is female!")' + 'print (Props)') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object Memo2: TMemo + Left = 0 + Top = 0 + Width = 372 + Height = 209 + Align = alTop + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + ParentFont = False + TabOrder = 1 + end + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + IO = PythonGUIInputOutput1 + Left = 8 + Top = 400 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo2 + Left = 40 + Top = 400 + end + object PythonModule1: TPythonModule + Engine = PythonEngine1 + OnInitialization = PythonModule1Initialization + ModuleName = 'props' + Errors = <> + Left = 232 + Top = 400 + end +end diff --git a/Demos/Demo17/Demo17.dpr b/Demos/Demo17/Demo17.dpr index c8fa2a6a..f99a8739 100644 --- a/Demos/Demo17/Demo17.dpr +++ b/Demos/Demo17/Demo17.dpr @@ -1,15 +1,15 @@ -program Demo17; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo17; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo17/Demo17.dproj b/Demos/Demo17/Demo17.dproj index 34ec8770..f85422eb 100644 --- a/Demos/Demo17/Demo17.dproj +++ b/Demos/Demo17/Demo17.dproj @@ -1,189 +1,192 @@ - - - {45B70068-605E-4FFB-B78E-2045071FD5FA} - Demo17.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo17.exe - 00400000 - x86 - Demo17 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo17.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {45B70068-605E-4FFB-B78E-2045071FD5FA} + Demo17.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo17.exe + 00400000 + x86 + Demo17 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo17.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo17/Unit1.dfm b/Demos/Demo17/Unit1.dfm index d5def1fd..94ef9879 100644 --- a/Demos/Demo17/Unit1.dfm +++ b/Demos/Demo17/Unit1.dfm @@ -1,123 +1,126 @@ -object Form1: TForm1 - Left = 237 - Top = 135 - Caption = 'Demo of Python' - ClientHeight = 421 - ClientWidth = 528 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 280 - Width = 528 - Height = 3 - Cursor = crVSplit - Align = alTop - ExplicitTop = 273 - ExplicitWidth = 536 - end - object Memo1: TMemo - Left = 0 - Top = 283 - Width = 528 - Height = 94 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'import test' - 'print ("Displaying a sequence generated from a variant array:")' - 'print (test.L)' - 'print') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 1 - end - object Panel1: TPanel - Left = 0 - Top = 377 - Width = 528 - Height = 44 - Align = alBottom - BevelOuter = bvNone - TabOrder = 0 - object Button1: TButton - Left = 6 - Top = 8 - Width = 115 - Height = 25 - Caption = 'Execute script' - TabOrder = 0 - OnClick = Button1Click - end - object Button2: TButton - Left = 168 - Top = 8 - Width = 91 - Height = 25 - Caption = 'Load script...' - TabOrder = 1 - OnClick = Button2Click - end - object Button3: TButton - Left = 264 - Top = 8 - Width = 89 - Height = 25 - Caption = 'Save script...' - TabOrder = 2 - OnClick = Button3Click - end - end - object Memo2: TMemo - Left = 0 - Top = 0 - Width = 528 - Height = 280 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - ParentFont = False - ScrollBars = ssBoth - TabOrder = 2 - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 32 - end - object OpenDialog1: TOpenDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 176 - end - object SaveDialog1: TSaveDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 208 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo2 - Left = 64 - end - object PythonModule1: TPythonModule - Engine = PythonEngine1 - ModuleName = 'test' - Errors = <> - Left = 96 - end -end +object Form1: TForm1 + Left = 237 + Top = 135 + Caption = 'Demo of Python' + ClientHeight = 421 + ClientWidth = 528 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 280 + Width = 528 + Height = 3 + Cursor = crVSplit + Align = alTop + ExplicitTop = 273 + ExplicitWidth = 536 + end + object Memo1: TMemo + Left = 0 + Top = 283 + Width = 528 + Height = 94 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'import test' + 'print ("Displaying a sequence generated from a variant array:")' + 'print (test.L)' + 'print') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 1 + end + object Panel1: TPanel + Left = 0 + Top = 377 + Width = 528 + Height = 44 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object Button1: TButton + Left = 6 + Top = 8 + Width = 115 + Height = 25 + Caption = 'Execute script' + TabOrder = 0 + OnClick = Button1Click + end + object Button2: TButton + Left = 168 + Top = 8 + Width = 91 + Height = 25 + Caption = 'Load script...' + TabOrder = 1 + OnClick = Button2Click + end + object Button3: TButton + Left = 264 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Save script...' + TabOrder = 2 + OnClick = Button3Click + end + end + object Memo2: TMemo + Left = 0 + Top = 0 + Width = 528 + Height = 280 + Align = alTop + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + ParentFont = False + ScrollBars = ssBoth + TabOrder = 2 + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + UseLastKnownVersion = False + IO = PythonGUIInputOutput1 + Left = 32 + end + object OpenDialog1: TOpenDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 176 + end + object SaveDialog1: TSaveDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 208 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo2 + Left = 64 + end + object PythonModule1: TPythonModule + Engine = PythonEngine1 + ModuleName = 'test' + Errors = <> + Left = 96 + end +end diff --git a/Demos/Demo20/Unit1.dfm b/Demos/Demo20/Unit1.dfm index 48b03302..9c70e64e 100644 --- a/Demos/Demo20/Unit1.dfm +++ b/Demos/Demo20/Unit1.dfm @@ -119,6 +119,9 @@ object Form1: TForm1 end end object PythonEngine1: TPythonEngine + UseLastKnownVersion = False + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' AutoLoad = False IO = PythonGUIInputOutput1 Left = 16 diff --git a/Demos/Demo21/Demo21.dpr b/Demos/Demo21/Demo21.dpr index 4e33a039..f700414e 100644 --- a/Demos/Demo21/Demo21.dpr +++ b/Demos/Demo21/Demo21.dpr @@ -1,15 +1,15 @@ -program Demo21; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo21; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo21/Demo21.dproj b/Demos/Demo21/Demo21.dproj index 6923bc14..0f3823c5 100644 --- a/Demos/Demo21/Demo21.dproj +++ b/Demos/Demo21/Demo21.dproj @@ -1,189 +1,192 @@ - - - {8A0913B4-35C9-4DDA-A98A-02C28A91C049} - Demo21.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo21.exe - 00400000 - x86 - Demo21 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo21.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {8A0913B4-35C9-4DDA-A98A-02C28A91C049} + Demo21.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo21.exe + 00400000 + x86 + Demo21 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo21.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo21/Unit1.dfm b/Demos/Demo21/Unit1.dfm index 888384e4..335198dc 100644 --- a/Demos/Demo21/Unit1.dfm +++ b/Demos/Demo21/Unit1.dfm @@ -95,6 +95,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 32 end diff --git a/Demos/Demo22/Demo22.dpr b/Demos/Demo22/Demo22.dpr index e689f19f..86330e45 100644 --- a/Demos/Demo22/Demo22.dpr +++ b/Demos/Demo22/Demo22.dpr @@ -1,15 +1,15 @@ -program Demo22; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo22; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo22/Demo22.dproj b/Demos/Demo22/Demo22.dproj index 31273eb7..dd497e25 100644 --- a/Demos/Demo22/Demo22.dproj +++ b/Demos/Demo22/Demo22.dproj @@ -1,190 +1,193 @@ - - - {17D5A3A6-4820-4D9C-BD8A-71D8B83709A0} - Demo22.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo22.exe - 00400000 - x86 - Demo22 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo22.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {17D5A3A6-4820-4D9C-BD8A-71D8B83709A0} + Demo22.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo22.exe + 00400000 + x86 + Demo22 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo22.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo22/Unit1.dfm b/Demos/Demo22/Unit1.dfm index f05bdac3..9c826608 100644 --- a/Demos/Demo22/Unit1.dfm +++ b/Demos/Demo22/Unit1.dfm @@ -81,6 +81,11 @@ object Form1: TForm1 end end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False UseWindowsConsole = True Left = 32 end diff --git a/Demos/Demo22/threading_test.py b/Demos/Demo22/threading_test.py index cf76f22e..423a85be 100644 --- a/Demos/Demo22/threading_test.py +++ b/Demos/Demo22/threading_test.py @@ -1,96 +1,96 @@ -from threading import * -from collections import deque -from time import sleep - -def _test(): - - class BoundedQueue(): - - def __init__(self, limit): - self.mon = RLock() - self.rc = Condition(self.mon) - self.wc = Condition(self.mon) - self.limit = limit - self.queue = deque() - - def put(self, item): - self.mon.acquire() - while len(self.queue) >= self.limit: - self._note("put(%s): queue full", item) - self.wc.wait() - self.queue.append(item) - self._note("put(%s): appended, length now %d", - item, len(self.queue)) - self.rc.notify() - self.mon.release() - - def get(self): - self.mon.acquire() - while not self.queue: - self._note("get(): queue empty") - self.rc.wait() - item = self.queue.popleft() - self._note("get(): got %s, %d left", item, len(self.queue)) - self.wc.notify() - self.mon.release() - return item - - def _note(self, format, *args): - format = format % args - ident = get_ident() - try: - name = current_thread().name - except KeyError: - name = "" % ident - format = "%s: %s" % (name, format) - print(format) - - class ProducerThread(Thread): - - def __init__(self, queue, quota): - Thread.__init__(self, name="Producer") - self.queue = queue - self.quota = quota - - def run(self): - from random import random - counter = 0 - while counter < self.quota: - counter = counter + 1 - self.queue.put("%s.%d" % (self.name, counter)) - sleep(random() * 0.00001) - - - class ConsumerThread(Thread): - - def __init__(self, queue, count): - Thread.__init__(self, name="Consumer") - self.queue = queue - self.count = count - - def run(self): - while self.count > 0: - item = self.queue.get() - print(item) - self.count = self.count - 1 - - NP = 3 - QL = 4 - NI = 5 - - Q = BoundedQueue(QL) - P = [] - for i in range(NP): - t = ProducerThread(Q, NI) - t.name = ("Producer-%d" % (i+1)) - P.append(t) - C = ConsumerThread(Q, NI*NP) - for t in P: - t.start() - sleep(0.000001) - C.start() - for t in P: - t.join() - C.join() - +from threading import * +from collections import deque +from time import sleep + +def _test(): + + class BoundedQueue(): + + def __init__(self, limit): + self.mon = RLock() + self.rc = Condition(self.mon) + self.wc = Condition(self.mon) + self.limit = limit + self.queue = deque() + + def put(self, item): + self.mon.acquire() + while len(self.queue) >= self.limit: + self._note("put(%s): queue full", item) + self.wc.wait() + self.queue.append(item) + self._note("put(%s): appended, length now %d", + item, len(self.queue)) + self.rc.notify() + self.mon.release() + + def get(self): + self.mon.acquire() + while not self.queue: + self._note("get(): queue empty") + self.rc.wait() + item = self.queue.popleft() + self._note("get(): got %s, %d left", item, len(self.queue)) + self.wc.notify() + self.mon.release() + return item + + def _note(self, format, *args): + format = format % args + ident = get_ident() + try: + name = current_thread().name + except KeyError: + name = "" % ident + format = "%s: %s" % (name, format) + print(format) + + class ProducerThread(Thread): + + def __init__(self, queue, quota): + Thread.__init__(self, name="Producer") + self.queue = queue + self.quota = quota + + def run(self): + from random import random + counter = 0 + while counter < self.quota: + counter = counter + 1 + self.queue.put("%s.%d" % (self.name, counter)) + sleep(random() * 0.00001) + + + class ConsumerThread(Thread): + + def __init__(self, queue, count): + Thread.__init__(self, name="Consumer") + self.queue = queue + self.count = count + + def run(self): + while self.count > 0: + item = self.queue.get() + print(item) + self.count = self.count - 1 + + NP = 3 + QL = 4 + NI = 5 + + Q = BoundedQueue(QL) + P = [] + for i in range(NP): + t = ProducerThread(Q, NI) + t.name = ("Producer-%d" % (i+1)) + P.append(t) + C = ConsumerThread(Q, NI*NP) + for t in P: + t.start() + sleep(0.000001) + C.start() + for t in P: + t.join() + C.join() + _test() \ No newline at end of file diff --git a/Demos/Demo23/Demo23.dpr b/Demos/Demo23/Demo23.dpr index 0d37f15a..68ae9b3b 100644 --- a/Demos/Demo23/Demo23.dpr +++ b/Demos/Demo23/Demo23.dpr @@ -1,15 +1,15 @@ -program Demo23; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo23; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo23/Demo23.dproj b/Demos/Demo23/Demo23.dproj index 3c6b7a16..b31aee0a 100644 --- a/Demos/Demo23/Demo23.dproj +++ b/Demos/Demo23/Demo23.dproj @@ -1,189 +1,192 @@ - - - {C077A77D-C4BE-486B-A654-6605F805E4FE} - Demo23.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo23.exe - 00400000 - x86 - Demo23 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo23.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {C077A77D-C4BE-486B-A654-6605F805E4FE} + Demo23.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo23.exe + 00400000 + x86 + Demo23 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo23.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo23/Unit1.dfm b/Demos/Demo23/Unit1.dfm index 976c2ca2..94692a9b 100644 --- a/Demos/Demo23/Unit1.dfm +++ b/Demos/Demo23/Unit1.dfm @@ -77,6 +77,11 @@ object Form1: TForm1 end end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonInputOutput1 Left = 32 end diff --git a/Demos/Demo23/threading_test.py b/Demos/Demo23/threading_test.py index cf76f22e..423a85be 100644 --- a/Demos/Demo23/threading_test.py +++ b/Demos/Demo23/threading_test.py @@ -1,96 +1,96 @@ -from threading import * -from collections import deque -from time import sleep - -def _test(): - - class BoundedQueue(): - - def __init__(self, limit): - self.mon = RLock() - self.rc = Condition(self.mon) - self.wc = Condition(self.mon) - self.limit = limit - self.queue = deque() - - def put(self, item): - self.mon.acquire() - while len(self.queue) >= self.limit: - self._note("put(%s): queue full", item) - self.wc.wait() - self.queue.append(item) - self._note("put(%s): appended, length now %d", - item, len(self.queue)) - self.rc.notify() - self.mon.release() - - def get(self): - self.mon.acquire() - while not self.queue: - self._note("get(): queue empty") - self.rc.wait() - item = self.queue.popleft() - self._note("get(): got %s, %d left", item, len(self.queue)) - self.wc.notify() - self.mon.release() - return item - - def _note(self, format, *args): - format = format % args - ident = get_ident() - try: - name = current_thread().name - except KeyError: - name = "" % ident - format = "%s: %s" % (name, format) - print(format) - - class ProducerThread(Thread): - - def __init__(self, queue, quota): - Thread.__init__(self, name="Producer") - self.queue = queue - self.quota = quota - - def run(self): - from random import random - counter = 0 - while counter < self.quota: - counter = counter + 1 - self.queue.put("%s.%d" % (self.name, counter)) - sleep(random() * 0.00001) - - - class ConsumerThread(Thread): - - def __init__(self, queue, count): - Thread.__init__(self, name="Consumer") - self.queue = queue - self.count = count - - def run(self): - while self.count > 0: - item = self.queue.get() - print(item) - self.count = self.count - 1 - - NP = 3 - QL = 4 - NI = 5 - - Q = BoundedQueue(QL) - P = [] - for i in range(NP): - t = ProducerThread(Q, NI) - t.name = ("Producer-%d" % (i+1)) - P.append(t) - C = ConsumerThread(Q, NI*NP) - for t in P: - t.start() - sleep(0.000001) - C.start() - for t in P: - t.join() - C.join() - +from threading import * +from collections import deque +from time import sleep + +def _test(): + + class BoundedQueue(): + + def __init__(self, limit): + self.mon = RLock() + self.rc = Condition(self.mon) + self.wc = Condition(self.mon) + self.limit = limit + self.queue = deque() + + def put(self, item): + self.mon.acquire() + while len(self.queue) >= self.limit: + self._note("put(%s): queue full", item) + self.wc.wait() + self.queue.append(item) + self._note("put(%s): appended, length now %d", + item, len(self.queue)) + self.rc.notify() + self.mon.release() + + def get(self): + self.mon.acquire() + while not self.queue: + self._note("get(): queue empty") + self.rc.wait() + item = self.queue.popleft() + self._note("get(): got %s, %d left", item, len(self.queue)) + self.wc.notify() + self.mon.release() + return item + + def _note(self, format, *args): + format = format % args + ident = get_ident() + try: + name = current_thread().name + except KeyError: + name = "" % ident + format = "%s: %s" % (name, format) + print(format) + + class ProducerThread(Thread): + + def __init__(self, queue, quota): + Thread.__init__(self, name="Producer") + self.queue = queue + self.quota = quota + + def run(self): + from random import random + counter = 0 + while counter < self.quota: + counter = counter + 1 + self.queue.put("%s.%d" % (self.name, counter)) + sleep(random() * 0.00001) + + + class ConsumerThread(Thread): + + def __init__(self, queue, count): + Thread.__init__(self, name="Consumer") + self.queue = queue + self.count = count + + def run(self): + while self.count > 0: + item = self.queue.get() + print(item) + self.count = self.count - 1 + + NP = 3 + QL = 4 + NI = 5 + + Q = BoundedQueue(QL) + P = [] + for i in range(NP): + t = ProducerThread(Q, NI) + t.name = ("Producer-%d" % (i+1)) + P.append(t) + C = ConsumerThread(Q, NI*NP) + for t in P: + t.start() + sleep(0.000001) + C.start() + for t in P: + t.join() + C.join() + _test() \ No newline at end of file diff --git a/Demos/Demo25/VarPythUnitTest.dproj b/Demos/Demo25/VarPythUnitTest.dproj index e0ad0fb0..4b22f499 100644 --- a/Demos/Demo25/VarPythUnitTest.dproj +++ b/Demos/Demo25/VarPythUnitTest.dproj @@ -7,7 +7,7 @@ 19.1 VCL True - Win64 + Win32 3 Application
@@ -46,6 +46,7 @@ true true + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace) CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= @@ -54,6 +55,7 @@ 00400000 x86 VarPythUnitTest + ..\SearchPath1.optset $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png @@ -102,6 +104,7 @@ Base + ..\SearchPath1.optset Cfg_1 diff --git a/Demos/Demo25/fmMain.dfm b/Demos/Demo25/fmMain.dfm index 97f5305e..e4a1564d 100644 --- a/Demos/Demo25/fmMain.dfm +++ b/Demos/Demo25/fmMain.dfm @@ -290,6 +290,11 @@ object Main: TMain TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 192 Top = 48 diff --git a/Demos/Demo26/Demo26.dpr b/Demos/Demo26/Demo26.dpr index d36a8783..55127c29 100644 --- a/Demos/Demo26/Demo26.dpr +++ b/Demos/Demo26/Demo26.dpr @@ -1,15 +1,15 @@ -program Demo26; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo26; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo26/Demo26.dproj b/Demos/Demo26/Demo26.dproj index ee960ee1..08e046c4 100644 --- a/Demos/Demo26/Demo26.dproj +++ b/Demos/Demo26/Demo26.dproj @@ -1,189 +1,192 @@ - - - {910E2A03-F875-4153-9E58-3434C6D9AB6F} - Demo26.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo26.exe - 00400000 - x86 - Demo26 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo26.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {910E2A03-F875-4153-9E58-3434C6D9AB6F} + Demo26.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo26.exe + 00400000 + x86 + Demo26 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo26.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo26/Unit1.dfm b/Demos/Demo26/Unit1.dfm index 70fec754..107f5864 100644 --- a/Demos/Demo26/Unit1.dfm +++ b/Demos/Demo26/Unit1.dfm @@ -156,6 +156,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 16 Top = 16 diff --git a/Demos/Demo27/Demo27.dpr b/Demos/Demo27/Demo27.dpr index f6289d6f..117e145b 100644 --- a/Demos/Demo27/Demo27.dpr +++ b/Demos/Demo27/Demo27.dpr @@ -1,13 +1,13 @@ -program Demo27; - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo27; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo27/Demo27.dproj b/Demos/Demo27/Demo27.dproj index 88c92d12..f400c0da 100644 --- a/Demos/Demo27/Demo27.dproj +++ b/Demos/Demo27/Demo27.dproj @@ -1,192 +1,195 @@ - - - {5A404EF7-3EA9-4DDC-AF3D-D6434CB20EEA} - Demo27.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo27.exe - 00400000 - x86 - Demo27 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 4105 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - true - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo27.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 4105 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {5A404EF7-3EA9-4DDC-AF3D-D6434CB20EEA} + Demo27.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo27.exe + 00400000 + x86 + Demo27 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 4105 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + true + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo27.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 4105 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo27/Unit1.dfm b/Demos/Demo27/Unit1.dfm index c4d1bb2e..4471e197 100644 --- a/Demos/Demo27/Unit1.dfm +++ b/Demos/Demo27/Unit1.dfm @@ -60,6 +60,9 @@ object Form1: TForm1 OnClick = Button1Click end object PythonEngine1: TPythonEngine + UseLastKnownVersion = False + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' IO = PythonGUIInputOutput1 Left = 40 Top = 144 diff --git a/Demos/Demo28/Demo28.dpr b/Demos/Demo28/Demo28.dpr index 46ba377f..d8519fbe 100644 --- a/Demos/Demo28/Demo28.dpr +++ b/Demos/Demo28/Demo28.dpr @@ -1,15 +1,15 @@ -program Demo28; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo28; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo28/Demo28.dproj b/Demos/Demo28/Demo28.dproj index d6e0c20f..1033f7cc 100644 --- a/Demos/Demo28/Demo28.dproj +++ b/Demos/Demo28/Demo28.dproj @@ -1,189 +1,192 @@ - - - {8B96EA5E-DEEA-4208-93B8-31AC94C87BCE} - Demo28.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo28.exe - 00400000 - x86 - Demo28 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo28.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {8B96EA5E-DEEA-4208-93B8-31AC94C87BCE} + Demo28.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo28.exe + 00400000 + x86 + Demo28 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo28.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo28/Unit1.dfm b/Demos/Demo28/Unit1.dfm index 89e7b1ad..d34e6484 100644 --- a/Demos/Demo28/Unit1.dfm +++ b/Demos/Demo28/Unit1.dfm @@ -112,6 +112,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 32 end diff --git a/Demos/Demo29/Demo29.dpr b/Demos/Demo29/Demo29.dpr index ac722099..585b9b25 100644 --- a/Demos/Demo29/Demo29.dpr +++ b/Demos/Demo29/Demo29.dpr @@ -1,13 +1,13 @@ -program Demo29; - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} -{$R XP_UAC.RES} -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo29; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} +{$R XP_UAC.RES} +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo29/Demo29.dproj b/Demos/Demo29/Demo29.dproj index 918ea928..4510e5a9 100644 --- a/Demos/Demo29/Demo29.dproj +++ b/Demos/Demo29/Demo29.dproj @@ -1,183 +1,186 @@ - - - {2F621E09-DAC5-4AB2-83F7-BD019D49AAF2} - Demo29.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 4105 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - Demo29.exe - 00400000 - x86 - Demo29 - - - $(BDS)\bin\default_app.manifest - 1033 - true - true - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - $(BDS)\bin\delphi_PROJECTICON.ico - PerMonitorV2 - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - true - PerMonitorV2 - $(BDS)\bin\delphi_PROJECTICON.ico - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - Debug - true - 1033 - true - - - true - true - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo29.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 4105 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - True - True - - - 12 - - -
+ + + {2F621E09-DAC5-4AB2-83F7-BD019D49AAF2} + Demo29.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 4105 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + Demo29.exe + 00400000 + x86 + Demo29 + ..\SearchPath1.optset + + + $(BDS)\bin\default_app.manifest + 1033 + true + true + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + $(BDS)\bin\delphi_PROJECTICON.ico + PerMonitorV2 + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + true + PerMonitorV2 + $(BDS)\bin\delphi_PROJECTICON.ico + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + Debug + true + 1033 + true + + + true + true + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo29.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 4105 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo29/Unit1.dfm b/Demos/Demo29/Unit1.dfm index c149398f..75aabc76 100644 --- a/Demos/Demo29/Unit1.dfm +++ b/Demos/Demo29/Unit1.dfm @@ -110,6 +110,9 @@ object Form1: TForm1 Top = 336 end object PythonEngine1: TPythonEngine + UseLastKnownVersion = False + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' AutoUnload = False IO = PythonGUIInputOutput1 Left = 168 diff --git a/Demos/Demo30/Demo30.dpr b/Demos/Demo30/Demo30.dpr index ceea88c2..2ce1d60a 100644 --- a/Demos/Demo30/Demo30.dpr +++ b/Demos/Demo30/Demo30.dpr @@ -1,15 +1,15 @@ -program Demo30; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo30; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo30/Demo30.dproj b/Demos/Demo30/Demo30.dproj index c219d66f..2d86d118 100644 --- a/Demos/Demo30/Demo30.dproj +++ b/Demos/Demo30/Demo30.dproj @@ -1,190 +1,193 @@ - - - {E779713C-E867-4111-98ED-796E46162694} - Demo30.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo30.exe - 00400000 - x86 - Demo30 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - DEBUG;$(DCC_Define) - - - true - PerMonitorV2 - - - true - PerMonitorV2 - 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= - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo30.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - True - True - - - 12 - - -
+ + + {E779713C-E867-4111-98ED-796E46162694} + Demo30.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo30.exe + 00400000 + x86 + Demo30 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + + + true + PerMonitorV2 + + + true + PerMonitorV2 + 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= + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo30.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo30/Unit1.dfm b/Demos/Demo30/Unit1.dfm index 481c588b..27081d49 100644 --- a/Demos/Demo30/Unit1.dfm +++ b/Demos/Demo30/Unit1.dfm @@ -1,132 +1,137 @@ -object Form1: TForm1 - Left = 241 - Top = 155 - Width = 597 - Height = 557 - VertScrollBar.Range = 200 - ActiveControl = Button1 - Caption = 'Demo of Python' - Color = clBackground - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 209 - Width = 581 - Height = 3 - Cursor = crVSplit - Align = alTop - Color = clBtnFace - ParentColor = False - ExplicitWidth = 589 - end - object Memo1: TMemo - Left = 0 - Top = 212 - Width = 581 - Height = 262 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Pitch = fpVariable - Font.Style = [] - Lines.Strings = ( - '# Look at the code in TForm1.Button1Click' - '' - 'class Person:' - - ' def __init__(self, first_name, last_name, age=None, height=Non' + - 'e, weight=None):' - ' self.first_name = first_name' - ' self.last_name = last_name' - ' self.age = age' - ' self.height = height' - ' self.weight = weight') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 1 - end - object Panel1: TPanel - Left = 0 - Top = 474 - Width = 581 - Height = 44 - Align = alBottom - BevelOuter = bvNone - TabOrder = 0 - object Button1: TButton - Left = 6 - Top = 8 - Width = 115 - Height = 25 - Caption = 'Execute script' - TabOrder = 0 - OnClick = Button1Click - end - object Button2: TButton - Left = 168 - Top = 8 - Width = 91 - Height = 25 - Caption = 'Load script...' - TabOrder = 1 - OnClick = Button2Click - end - object Button3: TButton - Left = 264 - Top = 8 - Width = 89 - Height = 25 - Caption = 'Save script...' - TabOrder = 2 - OnClick = Button3Click - end - end - object Memo2: TMemo - Left = 0 - Top = 0 - Width = 581 - Height = 209 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Pitch = fpVariable - Font.Style = [] - ParentFont = False - ScrollBars = ssBoth - TabOrder = 2 - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 32 - end - object OpenDialog1: TOpenDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Title = 'Open' - Left = 176 - end - object SaveDialog1: TSaveDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Title = 'Save As' - Left = 208 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo2 - Left = 64 - end -end +object Form1: TForm1 + Left = 241 + Top = 155 + Width = 597 + Height = 557 + VertScrollBar.Range = 200 + ActiveControl = Button1 + Caption = 'Demo of Python' + Color = clBackground + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = 11 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Style = [] + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 209 + Width = 581 + Height = 3 + Cursor = crVSplit + Align = alTop + Color = clBtnFace + ParentColor = False + ExplicitWidth = 589 + end + object Memo1: TMemo + Left = 0 + Top = 212 + Width = 581 + Height = 262 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Pitch = fpVariable + Font.Style = [] + Lines.Strings = ( + '# Look at the code in TForm1.Button1Click' + '' + 'class Person:' + + ' def __init__(self, first_name, last_name, age=None, height=Non' + + 'e, weight=None):' + ' self.first_name = first_name' + ' self.last_name = last_name' + ' self.age = age' + ' self.height = height' + ' self.weight = weight') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 1 + end + object Panel1: TPanel + Left = 0 + Top = 474 + Width = 581 + Height = 44 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object Button1: TButton + Left = 6 + Top = 8 + Width = 115 + Height = 25 + Caption = 'Execute script' + TabOrder = 0 + OnClick = Button1Click + end + object Button2: TButton + Left = 168 + Top = 8 + Width = 91 + Height = 25 + Caption = 'Load script...' + TabOrder = 1 + OnClick = Button2Click + end + object Button3: TButton + Left = 264 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Save script...' + TabOrder = 2 + OnClick = Button3Click + end + end + object Memo2: TMemo + Left = 0 + Top = 0 + Width = 581 + Height = 209 + Align = alTop + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Pitch = fpVariable + Font.Style = [] + ParentFont = False + ScrollBars = ssBoth + TabOrder = 2 + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + IO = PythonGUIInputOutput1 + Left = 32 + end + object OpenDialog1: TOpenDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Title = 'Open' + Left = 176 + end + object SaveDialog1: TSaveDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Title = 'Save As' + Left = 208 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo2 + Left = 64 + end +end diff --git a/Demos/Demo31/Demo31.dpr b/Demos/Demo31/Demo31.dpr index 62bbc2c6..2aac7769 100644 --- a/Demos/Demo31/Demo31.dpr +++ b/Demos/Demo31/Demo31.dpr @@ -1,25 +1,25 @@ -program Demo31; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}, - Unit2 in 'Unit2.pas' {TestForm}, - WrapDelphiTypes, - WrapDelphiWindows, - WrapVclExtCtrls, - WrapVclComCtrls, - WrapVclGrids, - WrapVclGraphics, - WrapVclButtons, - WrapVclDialogs; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.CreateForm(TTestForm, TestForm); - Application.Run; -end. +program Demo31; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {TestForm}, + WrapDelphiTypes, + WrapDelphiWindows, + WrapVclExtCtrls, + WrapVclComCtrls, + WrapVclGrids, + WrapVclGraphics, + WrapVclButtons, + WrapVclDialogs; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TTestForm, TestForm); + Application.Run; +end. diff --git a/Demos/Demo31/Demo31.dproj b/Demos/Demo31/Demo31.dproj index c7e0eed9..ae474dba 100644 --- a/Demos/Demo31/Demo31.dproj +++ b/Demos/Demo31/Demo31.dproj @@ -7,7 +7,7 @@ 19.1 VCL True - Win64 + Win32 3 Application
@@ -46,6 +46,7 @@ true true + Demo31 Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) @@ -54,6 +55,7 @@ Demo31.exe 00400000 x86 + ..\SearchPath1.optset true @@ -116,6 +118,7 @@ Base + ..\SearchPath1.optset Cfg_1 diff --git a/Demos/Demo31/Unit1.dfm b/Demos/Demo31/Unit1.dfm index 08ef253f..26efeeed 100644 --- a/Demos/Demo31/Unit1.dfm +++ b/Demos/Demo31/Unit1.dfm @@ -539,6 +539,11 @@ object Form1: TForm1 TabOrder = 2 end object PyEngine: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 16 Top = 16 diff --git a/Demos/Demo32/Demo32.dpr b/Demos/Demo32/Demo32.dpr index b3e0be6b..778fd851 100644 --- a/Demos/Demo32/Demo32.dpr +++ b/Demos/Demo32/Demo32.dpr @@ -1,17 +1,17 @@ -// JCL_DEBUG_EXPERT_GENERATEJDBG OFF -// JCL_DEBUG_EXPERT_INSERTJDBG OFF -program Demo32; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +// JCL_DEBUG_EXPERT_GENERATEJDBG OFF +// JCL_DEBUG_EXPERT_INSERTJDBG OFF +program Demo32; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo32/Demo32.dproj b/Demos/Demo32/Demo32.dproj index 64833a60..e501d338 100644 --- a/Demos/Demo32/Demo32.dproj +++ b/Demos/Demo32/Demo32.dproj @@ -1,167 +1,170 @@ - - - {26D3B086-D6C0-40C9-820A-269741BAC910} - Demo32.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo32 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - 1032 - Demo32.exe - 00400000 - x86 - - - true - $(BDS)\bin\delphi_PROJECTICON.ico - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - 1033 - $(BDS)\bin\default_app.manifest - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - $(BDS)\bin\default_app.manifest - true - 1033 - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - DEBUG;$(DCC_Define) - - - Debug - - - 1033 - true - Debug - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo32.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1032 - 1253 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - True - True - - - 12 - - -
+ + + {26D3B086-D6C0-40C9-820A-269741BAC910} + Demo32.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo32 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1032 + Demo32.exe + 00400000 + x86 + ..\SearchPath1.optset + + + true + $(BDS)\bin\delphi_PROJECTICON.ico + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + $(BDS)\bin\default_app.manifest + true + 1033 + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + DEBUG;$(DCC_Define) + + + Debug + + + 1033 + true + Debug + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo32.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1032 + 1253 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + True + True + + + 12 + + +
diff --git a/Demos/Demo32/Unit1.dfm b/Demos/Demo32/Unit1.dfm index d50dfec3..0c691ad2 100644 --- a/Demos/Demo32/Unit1.dfm +++ b/Demos/Demo32/Unit1.dfm @@ -155,6 +155,11 @@ object Form1: TForm1 TabOrder = 2 end object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False IO = PythonGUIInputOutput1 Left = 32 Top = 16 diff --git a/Demos/Demo33/ThSort.dfm b/Demos/Demo33/ThSort.dfm index 857c809d..6e29f1d6 100644 --- a/Demos/Demo33/ThSort.dfm +++ b/Demos/Demo33/ThSort.dfm @@ -1,202 +1,207 @@ -object ThreadSortForm: TThreadSortForm - Left = 171 - Top = 19 - BorderStyle = bsDialog - Caption = 'Thread Sorting Demo' - ClientHeight = 564 - ClientWidth = 566 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCloseQuery = FormCloseQuery - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Bevel1: TBevel - Left = 8 - Top = 24 - Width = 177 - Height = 355 - end - object Bevel3: TBevel - Left = 376 - Top = 24 - Width = 177 - Height = 355 - end - object Bevel2: TBevel - Left = 192 - Top = 24 - Width = 177 - Height = 355 - end - object BubbleSortBox: TPaintBox - Left = 8 - Top = 24 - Width = 177 - Height = 355 - OnPaint = BubbleSortBoxPaint - end - object SelectionSortBox: TPaintBox - Left = 192 - Top = 24 - Width = 177 - Height = 355 - OnPaint = SelectionSortBoxPaint - end - object QuickSortBox: TPaintBox - Left = 376 - Top = 24 - Width = 177 - Height = 355 - OnPaint = QuickSortBoxPaint - end - object Label1: TLabel - Left = 8 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc1' - end - object Label2: TLabel - Left = 192 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc2' - end - object Label3: TLabel - Left = 376 - Top = 8 - Width = 49 - Height = 13 - Caption = 'SortFunc3' - end - object Start3Btn: TButton - Left = 334 - Top = 385 - Width = 108 - Height = 25 - Caption = 'three interpreters' - TabOrder = 0 - OnClick = Start3BtnClick - end - object PythonMemo: TMemo - Left = 0 - Top = 419 - Width = 566 - Height = 145 - Align = alBottom - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Consolas' - Font.Style = [] - Lines.Strings = ( - 'from SortModule import getvalue,swap' - ' ' - 'def SortFunc1(handle, low, high):' - ' for i in range(low, high):' - ' for j in range(low+1,high):' - ' if getvalue(handle,j-1) > getvalue(handle,j):' - ' swap(handle,j-1,j)' - '' - 'def SortFunc2(handle,low,high):' - ' for i in range(low,high-1):' - ' for j in range(i+1,high):' - ' if getvalue(handle,i) > getvalue(handle,j):' - ' swap(handle,i,j)' - '' - 'def SortFunc3(handle,low,high):' - ' Lo = low' - ' Hi = high-1' - ' Mid = getvalue(handle,(Lo+Hi) // 2)' - ' while 1:' - ' while getvalue(handle,Lo) < Mid: ' - ' Lo = Lo + 1' - ' while getvalue(handle,Hi) > Mid:' - ' Hi = Hi - 1' - ' if Lo <= Hi:' - ' swap(handle,Lo,Hi)' - ' Lo = Lo + 1' - ' Hi = Hi - 1' - ' if Lo > Hi:' - ' break' - ' if Hi > low:' - ' SortFunc3(handle,low,Hi+1)' - ' if Lo < high-1:' - ' SortFunc3(handle,Lo,high)') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 1 - WordWrap = False - end - object Start1Btn: TButton - Left = 224 - Top = 385 - Width = 104 - Height = 25 - Caption = 'one interpreter' - TabOrder = 2 - OnClick = Start1BtnClick - end - object LoadBtn: TButton - Left = 8 - Top = 384 - Width = 97 - Height = 25 - Caption = 'Load Script' - TabOrder = 3 - OnClick = LoadBtnClick - end - object SaveBtn: TButton - Left = 111 - Top = 385 - Width = 107 - Height = 25 - Caption = 'Save Script' - TabOrder = 4 - OnClick = SaveBtnClick - end - object StopBtn: TButton - Left = 448 - Top = 385 - Width = 105 - Height = 25 - Caption = 'stop interpreters' - TabOrder = 5 - OnClick = StopBtnClick - end - object PythonEngine1: TPythonEngine - InitThreads = True - PyFlags = [pfDebug, pfInteractive, pfVerbose] - RedirectIO = False - Left = 16 - Top = 88 - end - object SortModule: TPythonModule - Engine = PythonEngine1 - OnInitialization = SortModuleInitialization - ModuleName = 'SortModule' - Errors = <> - Left = 64 - Top = 88 - end - object PythonDialog: TOpenDialog - DefaultExt = 'py' - Filter = 'Python scripts|*.py|All files|*.*' - Left = 64 - Top = 40 - end - object SaveDialog: TSaveDialog - DefaultExt = 'py' - Filter = 'Python scripts|*.py|All files|*.*' - Left = 16 - Top = 40 - end -end +object ThreadSortForm: TThreadSortForm + Left = 171 + Top = 19 + BorderStyle = bsDialog + Caption = 'Thread Sorting Demo' + ClientHeight = 564 + ClientWidth = 566 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poScreenCenter + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Bevel1: TBevel + Left = 8 + Top = 24 + Width = 177 + Height = 355 + end + object Bevel3: TBevel + Left = 376 + Top = 24 + Width = 177 + Height = 355 + end + object Bevel2: TBevel + Left = 192 + Top = 24 + Width = 177 + Height = 355 + end + object BubbleSortBox: TPaintBox + Left = 8 + Top = 24 + Width = 177 + Height = 355 + OnPaint = BubbleSortBoxPaint + end + object SelectionSortBox: TPaintBox + Left = 192 + Top = 24 + Width = 177 + Height = 355 + OnPaint = SelectionSortBoxPaint + end + object QuickSortBox: TPaintBox + Left = 376 + Top = 24 + Width = 177 + Height = 355 + OnPaint = QuickSortBoxPaint + end + object Label1: TLabel + Left = 8 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc1' + end + object Label2: TLabel + Left = 192 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc2' + end + object Label3: TLabel + Left = 376 + Top = 8 + Width = 49 + Height = 13 + Caption = 'SortFunc3' + end + object Start3Btn: TButton + Left = 334 + Top = 385 + Width = 108 + Height = 25 + Caption = 'three interpreters' + TabOrder = 0 + OnClick = Start3BtnClick + end + object PythonMemo: TMemo + Left = 0 + Top = 419 + Width = 566 + Height = 145 + Align = alBottom + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Consolas' + Font.Style = [] + Lines.Strings = ( + 'from SortModule import getvalue,swap' + ' ' + 'def SortFunc1(handle, low, high):' + ' for i in range(low, high):' + ' for j in range(low+1,high):' + ' if getvalue(handle,j-1) > getvalue(handle,j):' + ' swap(handle,j-1,j)' + '' + 'def SortFunc2(handle,low,high):' + ' for i in range(low,high-1):' + ' for j in range(i+1,high):' + ' if getvalue(handle,i) > getvalue(handle,j):' + ' swap(handle,i,j)' + '' + 'def SortFunc3(handle,low,high):' + ' Lo = low' + ' Hi = high-1' + ' Mid = getvalue(handle,(Lo+Hi) // 2)' + ' while 1:' + ' while getvalue(handle,Lo) < Mid: ' + ' Lo = Lo + 1' + ' while getvalue(handle,Hi) > Mid:' + ' Hi = Hi - 1' + ' if Lo <= Hi:' + ' swap(handle,Lo,Hi)' + ' Lo = Lo + 1' + ' Hi = Hi - 1' + ' if Lo > Hi:' + ' break' + ' if Hi > low:' + ' SortFunc3(handle,low,Hi+1)' + ' if Lo < high-1:' + ' SortFunc3(handle,Lo,high)') + ParentFont = False + ScrollBars = ssBoth + TabOrder = 1 + WordWrap = False + end + object Start1Btn: TButton + Left = 224 + Top = 385 + Width = 104 + Height = 25 + Caption = 'one interpreter' + TabOrder = 2 + OnClick = Start1BtnClick + end + object LoadBtn: TButton + Left = 8 + Top = 384 + Width = 97 + Height = 25 + Caption = 'Load Script' + TabOrder = 3 + OnClick = LoadBtnClick + end + object SaveBtn: TButton + Left = 111 + Top = 385 + Width = 107 + Height = 25 + Caption = 'Save Script' + TabOrder = 4 + OnClick = SaveBtnClick + end + object StopBtn: TButton + Left = 448 + Top = 385 + Width = 105 + Height = 25 + Caption = 'stop interpreters' + TabOrder = 5 + OnClick = StopBtnClick + end + object PythonEngine1: TPythonEngine + DllName = 'python39.dll' + DllPath = 'E:\EXE\Python3' + APIVersion = 1013 + RegVersion = '3.10' + UseLastKnownVersion = False + InitThreads = True + PyFlags = [pfDebug, pfInteractive, pfVerbose] + RedirectIO = False + Left = 16 + Top = 88 + end + object SortModule: TPythonModule + Engine = PythonEngine1 + OnInitialization = SortModuleInitialization + ModuleName = 'SortModule' + Errors = <> + Left = 64 + Top = 88 + end + object PythonDialog: TOpenDialog + DefaultExt = 'py' + Filter = 'Python scripts|*.py|All files|*.*' + Left = 64 + Top = 40 + end + object SaveDialog: TSaveDialog + DefaultExt = 'py' + Filter = 'Python scripts|*.py|All files|*.*' + Left = 16 + Top = 40 + end +end diff --git a/Demos/Demo33/ThSort.pas b/Demos/Demo33/ThSort.pas index adf7156b..3bc31c14 100644 --- a/Demos/Demo33/ThSort.pas +++ b/Demos/Demo33/ThSort.pas @@ -1,6 +1,6 @@ unit ThSort; - +{$I '..\..\Source\Definition.Inc'} interface diff --git a/Demos/Demo33/ThrdDemo2.dpr b/Demos/Demo33/ThrdDemo2.dpr index fb790876..36abc5ca 100644 --- a/Demos/Demo33/ThrdDemo2.dpr +++ b/Demos/Demo33/ThrdDemo2.dpr @@ -1,15 +1,15 @@ -program ThrdDemo2; - -uses - Forms, - SortThds in 'SortThds.pas', - ThSort in 'ThSort.pas' {ThreadSortForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.MainFormOnTaskbar := True; - Application.CreateForm(TThreadSortForm, ThreadSortForm); - Application.Run; -end. +program ThrdDemo2; + +uses + Forms, + SortThds in 'SortThds.pas', + ThSort in 'ThSort.pas' {ThreadSortForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TThreadSortForm, ThreadSortForm); + Application.Run; +end. diff --git a/Demos/Demo33/ThrdDemo2.dproj b/Demos/Demo33/ThrdDemo2.dproj index 7fe61c0a..7b1414ee 100644 --- a/Demos/Demo33/ThrdDemo2.dproj +++ b/Demos/Demo33/ThrdDemo2.dproj @@ -1,200 +1,203 @@ - - - {9e78092e-5a16-44b9-97bf-b879c252b4ba} - Debug - DCC32 - ThrdDemo2.exe - ThrdDemo2.dpr - 19.1 - Debug - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - ThrdDemo2.exe - ThrdDemo2 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1049 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - PerMonitorV2 - - - 7.0 - 0 - False - 0 - RELEASE;$(DCC_Define) - - - true - PerMonitor - - - true - PerMonitor - - - 7.0 - DEBUG;JVCLThemesEnabled;COMPILER5_UP;PS_USESSUPPORT;$(DCC_Define) - C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_UnitSearchPath) - C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_ResourcePath) - C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_ObjPath) - C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_IncludePath) - - - true - PerMonitor - - - true - PerMonitor - true - 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= - - - Delphi.Personality.12 - - - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1049 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ThrdDemo2.dpr - - - - True - True - - - 12 - - - - MainSource - - - -
ThreadSortForm
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - -
+ + + {9e78092e-5a16-44b9-97bf-b879c252b4ba} + Debug + DCC32 + ThrdDemo2.exe + ThrdDemo2.dpr + 19.1 + Debug + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + ThrdDemo2.exe + ThrdDemo2 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1049 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + PerMonitorV2 + + + 7.0 + 0 + False + 0 + RELEASE;$(DCC_Define) + + + true + PerMonitor + + + true + PerMonitor + + + 7.0 + DEBUG;JVCLThemesEnabled;COMPILER5_UP;PS_USESSUPPORT;$(DCC_Define) + C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_UnitSearchPath) + C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_ResourcePath) + C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_ObjPath) + C:\Users\alex\python4delphi-read-only\PythonForDelphi\Components\Sources\Core;$(DCC_IncludePath) + + + true + PerMonitor + + + true + PerMonitor + true + 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= + + + + MainSource + + + +
ThreadSortForm
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + + + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + ThrdDemo2.dpr + + + + True + True + + + 12 + + + +
diff --git a/Demos/Demo34/Demo34.dpr b/Demos/Demo34/Demo34.dpr index ea91f388..57216a73 100644 --- a/Demos/Demo34/Demo34.dpr +++ b/Demos/Demo34/Demo34.dpr @@ -1,15 +1,15 @@ -program Demo34; - - - -uses - Forms, - Unit1 in 'Unit1.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program Demo34; + + + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/Demo34/Demo34.dproj b/Demos/Demo34/Demo34.dproj index 93b43433..e304a6a4 100644 --- a/Demos/Demo34/Demo34.dproj +++ b/Demos/Demo34/Demo34.dproj @@ -1,962 +1,965 @@ - - - {EB7F2134-A78B-4510-B8F3-113A978D6B14} - Demo34.dpr - Debug - DCC32 - 19.1 - VCL - True - Win64 - 3 - Application - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - Demo34.exe - 00400000 - x86 - Demo34 - Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) - 1033 - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= - - - 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - $(BDS)\bin\default_app.manifest - $(BDS)\bin\delphi_PROJECTICON.ico - true - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - PerMonitorV2 - - - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - $(BDS)\bin\default_app.manifest - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitor - - - true - PerMonitor - - - DEBUG;$(DCC_Define) - - - true - PerMonitor - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) - - - 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= - PerMonitor - - - - MainSource - - -
Form1
-
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - - Delphi.Personality.12 - VCLApplication - - - - Demo34.dpr - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - True - True - - - - - Demo34.exe - 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 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - 1 - - - 1 - - - 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 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 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 - - - -
+ + + {EB7F2134-A78B-4510-B8F3-113A978D6B14} + Demo34.dpr + Debug + DCC32 + 19.1 + VCL + True + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + Demo34.exe + 00400000 + x86 + Demo34 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 1033 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + ..\SearchPath1.optset + + + 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=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + $(BDS)\bin\default_app.manifest + $(BDS)\bin\delphi_PROJECTICON.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitorV2 + + + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitor + + + true + PerMonitor + + + DEBUG;$(DCC_Define) + + + true + PerMonitor + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + + + 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= + PerMonitor + + + + MainSource + + +
Form1
+
+ + Cfg_2 + Base + + + Base + ..\SearchPath1.optset + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Demo34.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + True + True + + + + + Demo34.exe + 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 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 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 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 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/Demos/Demos_01_to_34.groupproj b/Demos/Demos_01_to_34.groupproj index ae2057df..522280b0 100644 --- a/Demos/Demos_01_to_34.groupproj +++ b/Demos/Demos_01_to_34.groupproj @@ -1,360 +1,360 @@ - - - {76780D20-AE3E-46C6-A0D6-B270C4F2AEC5} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default.Personality.12 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + {76780D20-AE3E-46C6-A0D6-B270C4F2AEC5} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/FMX/BasicTypes/PointF/MainForm.fmx b/Demos/FMX/BasicTypes/PointF/MainForm.fmx index 69635976..dd6c7d0e 100644 --- a/Demos/FMX/BasicTypes/PointF/MainForm.fmx +++ b/Demos/FMX/BasicTypes/PointF/MainForm.fmx @@ -1,138 +1,138 @@ -object Form1: TForm1 - Left = 0 - Top = 0 - Caption = 'Demo of PointF' - ClientHeight = 517 - ClientWidth = 640 - FormFactor.Width = 320 - FormFactor.Height = 480 - FormFactor.Devices = [Desktop] - DesignerMasterStyle = 0 - object OpenDialog1: TOpenDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 360 - Top = 8 - end - object SaveDialog1: TSaveDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 392 - Top = 8 - end - object Memo1: TMemo - Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] - DataDetectorTypes = [] - Align = Top - Size.Width = 640.000000000000000000 - Size.Height = 200.000000000000000000 - Size.PlatformDefault = False - TabOrder = 9 - Viewport.Width = 636.000000000000000000 - Viewport.Height = 196.000000000000000000 - end - object Splitter1: TSplitter - Align = Top - Cursor = crVSplit - MinSize = 20.000000000000000000 - Position.Y = 200.000000000000000000 - Size.Width = 640.000000000000000000 - Size.Height = 3.000000000000000000 - Size.PlatformDefault = False - end - object Memo2: TMemo - Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] - DataDetectorTypes = [] - Lines.Strings = ( - 'from spam import PointF' - '' - 'print('#39'-------- Shows wrapped PointF info --------'#39')' - 'print(PointF)' - 'print(PointF.__doc__)' - 'help(PointF)' - '' - 'print('#39'-------- Creates a new PointF --------'#39')' - '' - 'p = PointF(2.3, 5.1)' - 'print(p)' - 'print(p.X)' - 'print(p.Y)' - 'print(format(p.X, '#39'.2f'#39'))' - 'print(format(p.Y, '#39'.2f'#39'))' - '' - 'print('#39'-------- Updates X and Y values --------'#39')' - '' - 'p.X = 3.1' - 'p.Y = 10.4' - '' - 'print(p)' - 'print(p.X)' - 'print(p.Y)' - 'print(format(p.X, '#39'.2f'#39'))' - 'print(format(p.Y, '#39'.2f'#39'))') - Align = Client - Size.Width = 640.000000000000000000 - Size.Height = 269.000000000000000000 - Size.PlatformDefault = False - TabOrder = 11 - Viewport.Width = 620.000000000000000000 - Viewport.Height = 265.000000000000000000 - end - object Panel1: TPanel - Align = Bottom - Position.Y = 472.000000000000000000 - Size.Width = 640.000000000000000000 - Size.Height = 45.000000000000000000 - Size.PlatformDefault = False - TabOrder = 12 - object Button1: TButton - Position.X = 8.000000000000000000 - Position.Y = 10.000000000000000000 - Size.Width = 97.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - Text = 'Execute script' - OnClick = Button1Click - end - object Button2: TButton - Position.X = 192.000000000000000000 - Position.Y = 10.000000000000000000 - TabOrder = 1 - Text = 'Load script...' - OnClick = Button2Click - end - object Button3: TButton - Position.X = 280.000000000000000000 - Position.Y = 10.000000000000000000 - TabOrder = 0 - Text = 'Save script...' - OnClick = Button3Click - end - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 288 - Top = 64 - end - object PythonModule1: TPythonModule - Engine = PythonEngine1 - ModuleName = 'spam' - Errors = <> - Left = 376 - Top = 64 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo1 - Left = 352 - Top = 112 - end - object PyDelphiWrapper1: TPyDelphiWrapper - Engine = PythonEngine1 - Module = PythonModule1 - Left = 480 - Top = 64 - end -end +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Demo of PointF' + ClientHeight = 517 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object OpenDialog1: TOpenDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 360 + Top = 8 + end + object SaveDialog1: TSaveDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 392 + Top = 8 + end + object Memo1: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + Align = Top + Size.Width = 640.000000000000000000 + Size.Height = 200.000000000000000000 + Size.PlatformDefault = False + TabOrder = 9 + Viewport.Width = 636.000000000000000000 + Viewport.Height = 196.000000000000000000 + end + object Splitter1: TSplitter + Align = Top + Cursor = crVSplit + MinSize = 20.000000000000000000 + Position.Y = 200.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + end + object Memo2: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + Lines.Strings = ( + 'from spam import PointF' + '' + 'print('#39'-------- Shows wrapped PointF info --------'#39')' + 'print(PointF)' + 'print(PointF.__doc__)' + 'help(PointF)' + '' + 'print('#39'-------- Creates a new PointF --------'#39')' + '' + 'p = PointF(2.3, 5.1)' + 'print(p)' + 'print(p.X)' + 'print(p.Y)' + 'print(format(p.X, '#39'.2f'#39'))' + 'print(format(p.Y, '#39'.2f'#39'))' + '' + 'print('#39'-------- Updates X and Y values --------'#39')' + '' + 'p.X = 3.1' + 'p.Y = 10.4' + '' + 'print(p)' + 'print(p.X)' + 'print(p.Y)' + 'print(format(p.X, '#39'.2f'#39'))' + 'print(format(p.Y, '#39'.2f'#39'))') + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 269.000000000000000000 + Size.PlatformDefault = False + TabOrder = 11 + Viewport.Width = 620.000000000000000000 + Viewport.Height = 265.000000000000000000 + end + object Panel1: TPanel + Align = Bottom + Position.Y = 472.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 45.000000000000000000 + Size.PlatformDefault = False + TabOrder = 12 + object Button1: TButton + Position.X = 8.000000000000000000 + Position.Y = 10.000000000000000000 + Size.Width = 97.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + Text = 'Execute script' + OnClick = Button1Click + end + object Button2: TButton + Position.X = 192.000000000000000000 + Position.Y = 10.000000000000000000 + TabOrder = 1 + Text = 'Load script...' + OnClick = Button2Click + end + object Button3: TButton + Position.X = 280.000000000000000000 + Position.Y = 10.000000000000000000 + TabOrder = 0 + Text = 'Save script...' + OnClick = Button3Click + end + end + object PythonEngine1: TPythonEngine + IO = PythonGUIInputOutput1 + Left = 288 + Top = 64 + end + object PythonModule1: TPythonModule + Engine = PythonEngine1 + ModuleName = 'spam' + Errors = <> + Left = 376 + Top = 64 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo1 + Left = 352 + Top = 112 + end + object PyDelphiWrapper1: TPyDelphiWrapper + Engine = PythonEngine1 + Module = PythonModule1 + Left = 480 + Top = 64 + end +end diff --git a/Demos/FMX/BasicTypes/PointF/MainForm.pas b/Demos/FMX/BasicTypes/PointF/MainForm.pas index f99383a2..48f9c047 100644 --- a/Demos/FMX/BasicTypes/PointF/MainForm.pas +++ b/Demos/FMX/BasicTypes/PointF/MainForm.pas @@ -1,63 +1,63 @@ -unit MainForm; - -interface - -uses - System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, - FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types, - FMX.StdCtrls, PythonEngine, FMX.PythonGUIInputOutput, - FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, WrapFmxTypes, WrapDelphi; - -type - TForm1 = class(TForm) - PythonEngine1: TPythonEngine; - PythonModule1: TPythonModule; - PythonGUIInputOutput1: TPythonGUIInputOutput; - PyDelphiWrapper1: TPyDelphiWrapper; - OpenDialog1: TOpenDialog; - SaveDialog1: TSaveDialog; - Memo1: TMemo; - Splitter1: TSplitter; - Memo2: TMemo; - Panel1: TPanel; - Button1: TButton; - Button2: TButton; - Button3: TButton; - procedure Button3Click(Sender: TObject); - procedure Button2Click(Sender: TObject); - procedure Button1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.fmx} - -procedure TForm1.Button1Click(Sender: TObject); -begin - PythonEngine1.ExecStrings(Memo2.Lines); -end; - -procedure TForm1.Button2Click(Sender: TObject); -begin - with OpenDialog1 do begin - if Execute then - Memo2.Lines.LoadFromFile( FileName ); - end; -end; - -procedure TForm1.Button3Click(Sender: TObject); -begin - with SaveDialog1 do begin - if Execute then - Memo2.Lines.SaveToFile(FileName); - end; -end; - -end. +unit MainForm; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types, + FMX.StdCtrls, PythonEngine, FMX.PythonGUIInputOutput, + FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, WrapFmxTypes, WrapDelphi; + +type + TForm1 = class(TForm) + PythonEngine1: TPythonEngine; + PythonModule1: TPythonModule; + PythonGUIInputOutput1: TPythonGUIInputOutput; + PyDelphiWrapper1: TPyDelphiWrapper; + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + Memo1: TMemo; + Splitter1: TSplitter; + Memo2: TMemo; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + Button3: TButton; + procedure Button3Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.fmx} + +procedure TForm1.Button1Click(Sender: TObject); +begin + PythonEngine1.ExecStrings(Memo2.Lines); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + with OpenDialog1 do begin + if Execute then + Memo2.Lines.LoadFromFile( FileName ); + end; +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + with SaveDialog1 do begin + if Execute then + Memo2.Lines.SaveToFile(FileName); + end; +end; + +end. diff --git a/Demos/FMX/BasicTypes/PointF/PointF.dpr b/Demos/FMX/BasicTypes/PointF/PointF.dpr index de3aa575..7cc2d960 100644 --- a/Demos/FMX/BasicTypes/PointF/PointF.dpr +++ b/Demos/FMX/BasicTypes/PointF/PointF.dpr @@ -1,14 +1,14 @@ -program PointF; - -uses - System.StartUpCopy, - FMX.Forms, - MainForm in 'MainForm.pas' {Form1}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program PointF; + +uses + System.StartUpCopy, + FMX.Forms, + MainForm in 'MainForm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/FMX/BasicTypes/PointF/PointF.dproj b/Demos/FMX/BasicTypes/PointF/PointF.dproj index 9748ad15..e80a025b 100644 --- a/Demos/FMX/BasicTypes/PointF/PointF.dproj +++ b/Demos/FMX/BasicTypes/PointF/PointF.dproj @@ -1,1103 +1,1106 @@ - - - {E685A25A-2863-46E1-882C-16AA3E302630} - 19.1 - FMX - True - Debug - Win64 - 37915 - Application - PointF.dpr - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - .\$(Platform)\$(Config) - .\$(Platform)\$(Config) - false - false - false - false - false - System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) - true - true - true - true - true - true - true - true - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\delphi_PROJECTICNS.icns - PointF - - - DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) - package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= - Debug - true - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png - android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar - - - DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) - package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= - Debug - true - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png - $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png - $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png - $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png - android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar - - - DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) - CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers - iPhoneAndiPad - true - Debug - $(MSBuildProjectName) - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png - $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png - $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png - $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png - $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png - $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png - $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png - $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png - - - DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) - CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers - iPhoneAndiPad - true - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png - $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png - $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png - $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png - $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png - $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png - $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png - $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png - $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png - 10.0 - - - DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;fmx;FireDACIBDriver;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers - Debug - true - - - DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;Python;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;PythonVcl;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;PythonFmx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;SynEditDR;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;SynEditDR;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - DEBUG;$(DCC_Define) - true - false - true - true - true - - - false - true - PerMonitorV2 - - - true - PerMonitorV2 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - - MainSource - - -
Form1
- fmx -
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - Delphi.Personality.12 - Application - - - - PointF.dpr - - - - - - true - - - - - true - - - - - true - - - - - PointF.exe - true - - - - - PointF.rsm - true - - - - - PointF.exe - true - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - classes - 1 - - - classes - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - library\lib\mips - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\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 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen - 64 - - - ..\$(PROJECTNAME).launchscreen - 64 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - Contents - 1 - - - Contents - 1 - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - - - - - - - - - - - True - True - False - True - True - False - True - True - True - - - 12 - - - - -
+ + + {E685A25A-2863-46E1-882C-16AA3E302630} + 19.1 + FMX + True + Debug + Win64 + 37915 + Application + PointF.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + PointF + ..\..\..\SearchPath3.optset + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + 10.0 + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;fmx;FireDACIBDriver;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;Python;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;PythonVcl;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;PythonFmx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;SynEditDR;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;SynEditDR;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
Form1
+ fmx +
+ + Cfg_2 + Base + + + Base + ..\..\..\SearchPath3.optset + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + PointF.dpr + + + + + + true + + + + + true + + + + + true + + + + + PointF.exe + true + + + + + PointF.rsm + true + + + + + PointF.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + True + True + False + True + True + False + True + True + True + + + 12 + + + + +
diff --git a/Demos/FMX/FormDemo/FormDemo.dpr b/Demos/FMX/FormDemo/FormDemo.dpr index 5cd27c59..677bb6eb 100644 --- a/Demos/FMX/FormDemo/FormDemo.dpr +++ b/Demos/FMX/FormDemo/FormDemo.dpr @@ -1,15 +1,15 @@ -program FormDemo; - -uses - System.StartUpCopy, - FMX.Forms, - MainForm in 'MainForm.pas' {Form1}, - SecondForm in 'SecondForm.pas' {DelphiSecondForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. +program FormDemo; + +uses + System.StartUpCopy, + FMX.Forms, + MainForm in 'MainForm.pas' {Form1}, + SecondForm in 'SecondForm.pas' {DelphiSecondForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Demos/FMX/FormDemo/FormDemo.dproj b/Demos/FMX/FormDemo/FormDemo.dproj index e83c0f22..92274d32 100644 --- a/Demos/FMX/FormDemo/FormDemo.dproj +++ b/Demos/FMX/FormDemo/FormDemo.dproj @@ -1,976 +1,979 @@ - - - {1C2733B2-64A7-4C99-BBD6-00BD9304B46E} - 19.1 - FMX - True - Debug - Win64 - 3 - Application - FormDemo.dpr - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - true - Cfg_2 - true - true - - - .\$(Platform)\$(Config) - .\$(Platform)\$(Config) - false - false - false - false - false - System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) - $(BDS)\bin\delphi_PROJECTICON.ico - $(BDS)\bin\delphi_PROJECTICNS.icns - FormDemo - - - DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;Python;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;PythonVcl;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;PythonFmx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - $(BDS)\bin\default_app.manifest - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png - $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png - - - DEBUG;$(DCC_Define) - true - false - true - true - true - - - false - true - PerMonitorV2 - - - true - PerMonitorV2 - true - 1033 - - - false - RELEASE;$(DCC_Define) - 0 - 0 - - - true - PerMonitorV2 - - - true - PerMonitorV2 - - - - MainSource - - -
Form1
- fmx -
- -
DelphiSecondForm
- fmx -
- - Cfg_2 - Base - - - Base - - - Cfg_1 - Base - -
- - Delphi.Personality.12 - Application - - - - FormDemo.dpr - - - Microsoft Office 2000 Sample Automation Server Wrapper Components - Microsoft Office XP Sample Automation Server Wrapper Components - - - - - - true - - - - - FormDemo.rsm - true - - - - - true - - - - - true - - - - - FormDemo.exe - true - - - - - FormDemo.exe - true - - - - - FormDemo.exe - true - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - classes - 1 - - - classes - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - library\lib\mips - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\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 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen - 64 - - - ..\$(PROJECTNAME).launchscreen - 64 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - Contents - 1 - - - Contents - 1 - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - - - - - - - - - - - True - True - - - 12 - - - - -
+ + + {1C2733B2-64A7-4C99-BBD6-00BD9304B46E} + 19.1 + FMX + True + Debug + Win64 + 3 + Application + FormDemo.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + FormDemo + ..\..\SearchPath2.optset + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;Python;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;PythonVcl;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;PythonFmx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + true + PerMonitorV2 + true + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
Form1
+ fmx +
+ +
DelphiSecondForm
+ fmx +
+ + Cfg_2 + Base + + + Base + ..\..\SearchPath2.optset + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + FormDemo.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + true + + + + + FormDemo.rsm + true + + + + + true + + + + + true + + + + + FormDemo.exe + true + + + + + FormDemo.exe + true + + + + + FormDemo.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/Demos/FMX/FormDemo/MainForm.fmx b/Demos/FMX/FormDemo/MainForm.fmx index 2dd3dcb4..a889bd21 100644 --- a/Demos/FMX/FormDemo/MainForm.fmx +++ b/Demos/FMX/FormDemo/MainForm.fmx @@ -1,153 +1,153 @@ -object Form1: TForm1 - Left = 0 - Top = 0 - Caption = 'MainForm' - ClientHeight = 480 - ClientWidth = 640 - FormFactor.Width = 320 - FormFactor.Height = 480 - FormFactor.Devices = [Desktop] - DesignerMasterStyle = 0 - object OpenDialog1: TOpenDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 200 - end - object SaveDialog1: TSaveDialog - DefaultExt = '*.py' - Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' - Left = 232 - end - object Memo1: TMemo - Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] - DataDetectorTypes = [] - Align = Top - Size.Width = 640.000000000000000000 - Size.Height = 200.000000000000000000 - Size.PlatformDefault = False - TabOrder = 8 - Viewport.Width = 636.000000000000000000 - Viewport.Height = 196.000000000000000000 - end - object Splitter1: TSplitter - Align = Top - Cursor = crVSplit - MinSize = 20.000000000000000000 - Position.Y = 200.000000000000000000 - Size.Width = 640.000000000000000000 - Size.Height = 3.000000000000000000 - Size.PlatformDefault = False - end - object Memo2: TMemo - Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] - DataDetectorTypes = [] - Lines.Strings = ( - 'from spam import Form' - '' - 'class SubForm(Form): ' - ' def __init__(self, Owner):' - ' self.Caption = '#39'Subclassed form defined in Python'#39 - '' - 'class DelphiSecondForm(Form):' - ' pass' - '' - 'def createbaseform():' - ' print('#39'Creates a Delphi FMX.TForm'#39')' - ' form = Form(None)' - ' try:' - ' form.Caption = "Delphi FMX base form"' - ' form.ShowModal()' - ' finally:' - ' form.Free();' - '' - 'def createpysubform():' - ' print('#39'Creates a Delphi FMX.TForm subtype defined in Python'#39')' - ' form = SubForm(None)' - ' try:' - ' form.ShowModal()' - ' finally:' - ' form.Free()' - '' - 'def createdelphisubform():' - - ' print('#39'Creates an instance of TDelphiSecondForm registerd form' + - #39')' - ' form = DelphiSecondForm(None)' - ' try:' - ' print('#39'Label: '#39', form.Label1.Text)' - ' form.ShowModal()' - ' finally:' - ' form.Free()' - '' - 'def main():' - ' createbaseform()' - ' createpysubform()' - ' createdelphisubform()' - '' - 'if __name__ == '#39'__main__'#39':' - ' try:' - ' main()' - ' except SystemExit:' - ' pass') - Align = Client - Size.Width = 640.000000000000000000 - Size.Height = 232.000000000000000000 - Size.PlatformDefault = False - TabOrder = 10 - Viewport.Width = 620.000000000000000000 - Viewport.Height = 228.000000000000000000 - end - object Panel1: TPanel - Align = Bottom - Position.Y = 435.000000000000000000 - Size.Width = 640.000000000000000000 - Size.Height = 45.000000000000000000 - Size.PlatformDefault = False - TabOrder = 11 - object Button1: TButton - Position.X = 8.000000000000000000 - Position.Y = 10.000000000000000000 - Size.Width = 97.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - Text = 'Execute script' - OnClick = Button1Click - end - object Button2: TButton - Position.X = 192.000000000000000000 - Position.Y = 10.000000000000000000 - TabOrder = 1 - Text = 'Load script...' - OnClick = Button2Click - end - object Button3: TButton - Position.X = 280.000000000000000000 - Position.Y = 10.000000000000000000 - TabOrder = 0 - Text = 'Save script...' - OnClick = Button3Click - end - end - object PythonEngine1: TPythonEngine - IO = PythonGUIInputOutput1 - Left = 8 - end - object PythonModule1: TPythonModule - Engine = PythonEngine1 - ModuleName = 'spam' - Errors = <> - Left = 40 - end - object PythonGUIInputOutput1: TPythonGUIInputOutput - UnicodeIO = True - RawOutput = False - Output = Memo1 - Left = 104 - end - object PyDelphiWrapper1: TPyDelphiWrapper - Engine = PythonEngine1 - Module = PythonModule1 - Left = 72 - end -end +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'MainForm' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object OpenDialog1: TOpenDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 200 + end + object SaveDialog1: TSaveDialog + DefaultExt = '*.py' + Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' + Left = 232 + end + object Memo1: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + Align = Top + Size.Width = 640.000000000000000000 + Size.Height = 200.000000000000000000 + Size.PlatformDefault = False + TabOrder = 8 + Viewport.Width = 636.000000000000000000 + Viewport.Height = 196.000000000000000000 + end + object Splitter1: TSplitter + Align = Top + Cursor = crVSplit + MinSize = 20.000000000000000000 + Position.Y = 200.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + end + object Memo2: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + Lines.Strings = ( + 'from spam import Form' + '' + 'class SubForm(Form): ' + ' def __init__(self, Owner):' + ' self.Caption = '#39'Subclassed form defined in Python'#39 + '' + 'class DelphiSecondForm(Form):' + ' pass' + '' + 'def createbaseform():' + ' print('#39'Creates a Delphi FMX.TForm'#39')' + ' form = Form(None)' + ' try:' + ' form.Caption = "Delphi FMX base form"' + ' form.ShowModal()' + ' finally:' + ' form.Free();' + '' + 'def createpysubform():' + ' print('#39'Creates a Delphi FMX.TForm subtype defined in Python'#39')' + ' form = SubForm(None)' + ' try:' + ' form.ShowModal()' + ' finally:' + ' form.Free()' + '' + 'def createdelphisubform():' + + ' print('#39'Creates an instance of TDelphiSecondForm registerd form' + + #39')' + ' form = DelphiSecondForm(None)' + ' try:' + ' print('#39'Label: '#39', form.Label1.Text)' + ' form.ShowModal()' + ' finally:' + ' form.Free()' + '' + 'def main():' + ' createbaseform()' + ' createpysubform()' + ' createdelphisubform()' + '' + 'if __name__ == '#39'__main__'#39':' + ' try:' + ' main()' + ' except SystemExit:' + ' pass') + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 232.000000000000000000 + Size.PlatformDefault = False + TabOrder = 10 + Viewport.Width = 620.000000000000000000 + Viewport.Height = 228.000000000000000000 + end + object Panel1: TPanel + Align = Bottom + Position.Y = 435.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 45.000000000000000000 + Size.PlatformDefault = False + TabOrder = 11 + object Button1: TButton + Position.X = 8.000000000000000000 + Position.Y = 10.000000000000000000 + Size.Width = 97.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + Text = 'Execute script' + OnClick = Button1Click + end + object Button2: TButton + Position.X = 192.000000000000000000 + Position.Y = 10.000000000000000000 + TabOrder = 1 + Text = 'Load script...' + OnClick = Button2Click + end + object Button3: TButton + Position.X = 280.000000000000000000 + Position.Y = 10.000000000000000000 + TabOrder = 0 + Text = 'Save script...' + OnClick = Button3Click + end + end + object PythonEngine1: TPythonEngine + IO = PythonGUIInputOutput1 + Left = 8 + end + object PythonModule1: TPythonModule + Engine = PythonEngine1 + ModuleName = 'spam' + Errors = <> + Left = 40 + end + object PythonGUIInputOutput1: TPythonGUIInputOutput + UnicodeIO = True + RawOutput = False + Output = Memo1 + Left = 104 + end + object PyDelphiWrapper1: TPyDelphiWrapper + Engine = PythonEngine1 + Module = PythonModule1 + Left = 72 + end +end diff --git a/Demos/FMX/FormDemo/MainForm.pas b/Demos/FMX/FormDemo/MainForm.pas index 3f9768ca..e76da392 100644 --- a/Demos/FMX/FormDemo/MainForm.pas +++ b/Demos/FMX/FormDemo/MainForm.pas @@ -1,63 +1,63 @@ -unit MainForm; - -interface - -uses - System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, - FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types, - FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, - PythonEngine, WrapDelphi, FMX.PythonGUIInputOutput, WrapDelphiFmx; - -type - TForm1 = class(TForm) - OpenDialog1: TOpenDialog; - SaveDialog1: TSaveDialog; - Memo1: TMemo; - Splitter1: TSplitter; - Memo2: TMemo; - Panel1: TPanel; - Button1: TButton; - Button2: TButton; - Button3: TButton; - PythonEngine1: TPythonEngine; - PythonModule1: TPythonModule; - PythonGUIInputOutput1: TPythonGUIInputOutput; - PyDelphiWrapper1: TPyDelphiWrapper; - procedure Button2Click(Sender: TObject); - procedure Button3Click(Sender: TObject); - procedure Button1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.fmx} - -procedure TForm1.Button1Click(Sender: TObject); -begin - PythonEngine1.ExecStrings(Memo2.Lines); -end; - -procedure TForm1.Button2Click(Sender: TObject); -begin - with OpenDialog1 do begin - if Execute then - Memo2.Lines.LoadFromFile( FileName ); - end; -end; - -procedure TForm1.Button3Click(Sender: TObject); -begin - with SaveDialog1 do begin - if Execute then - Memo2.Lines.SaveToFile(FileName); - end; -end; - -end. +unit MainForm; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types, + FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, + PythonEngine, WrapDelphi, FMX.PythonGUIInputOutput, WrapDelphiFmx; + +type + TForm1 = class(TForm) + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + Memo1: TMemo; + Splitter1: TSplitter; + Memo2: TMemo; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + Button3: TButton; + PythonEngine1: TPythonEngine; + PythonModule1: TPythonModule; + PythonGUIInputOutput1: TPythonGUIInputOutput; + PyDelphiWrapper1: TPyDelphiWrapper; + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.fmx} + +procedure TForm1.Button1Click(Sender: TObject); +begin + PythonEngine1.ExecStrings(Memo2.Lines); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + with OpenDialog1 do begin + if Execute then + Memo2.Lines.LoadFromFile( FileName ); + end; +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + with SaveDialog1 do begin + if Execute then + Memo2.Lines.SaveToFile(FileName); + end; +end; + +end. diff --git a/Demos/FMX/FormDemo/SecondForm.fmx b/Demos/FMX/FormDemo/SecondForm.fmx index b18c8f4d..0666c3b5 100644 --- a/Demos/FMX/FormDemo/SecondForm.fmx +++ b/Demos/FMX/FormDemo/SecondForm.fmx @@ -1,31 +1,31 @@ -object DelphiSecondForm: TDelphiSecondForm - Left = 0 - Top = 0 - Caption = 'Delphi second form' - ClientHeight = 480 - ClientWidth = 640 - FormFactor.Width = 320 - FormFactor.Height = 480 - FormFactor.Devices = [Desktop] - DesignerMasterStyle = 0 - object Label1: TLabel - Align = Top - AutoSize = True - StyledSettings = [Family, FontColor] - Margins.Left = 10.000000000000000000 - Margins.Top = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 10.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 10.000000000000000000 - Size.Width = 620.000000000000000000 - Size.Height = 30.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'labelstyle' - TextSettings.Font.Size = 22.000000000000000000 - TextSettings.Font.StyleExt = {00070000000000000004000000} - TextSettings.HorzAlign = Center - Text = 'This is a Delphi registerd form' - TabOrder = 1 - end -end +object DelphiSecondForm: TDelphiSecondForm + Left = 0 + Top = 0 + Caption = 'Delphi second form' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Label1: TLabel + Align = Top + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Left = 10.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Margins.Bottom = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 10.000000000000000000 + Size.Width = 620.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'labelstyle' + TextSettings.Font.Size = 22.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.HorzAlign = Center + Text = 'This is a Delphi registerd form' + TabOrder = 1 + end +end diff --git a/Demos/FMX/FormDemo/SecondForm.pas b/Demos/FMX/FormDemo/SecondForm.pas index 732d0fcf..78ab3872 100644 --- a/Demos/FMX/FormDemo/SecondForm.pas +++ b/Demos/FMX/FormDemo/SecondForm.pas @@ -1,29 +1,29 @@ -unit SecondForm; - -interface - -uses - System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, - FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, - FMX.Controls.Presentation, FMX.StdCtrls; - -type - TDelphiSecondForm = class(TForm) - Label1: TLabel; - private - { Private declarations } - public - { Public declarations } - end; - -var - DelphiSecondForm: TDelphiSecondForm; - -implementation - -{$R *.fmx} - -initialization - RegisterClass(TDelphiSecondForm); - -end. +unit SecondForm; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.StdCtrls; + +type + TDelphiSecondForm = class(TForm) + Label1: TLabel; + private + { Private declarations } + public + { Public declarations } + end; + +var + DelphiSecondForm: TDelphiSecondForm; + +implementation + +{$R *.fmx} + +initialization + RegisterClass(TDelphiSecondForm); + +end. diff --git a/Demos/FMX/SimpleDemo/Entitlement.TemplateOSX.xml b/Demos/FMX/SimpleDemo/Entitlement.TemplateOSX.xml index a66e8c2a..7756dc0d 100644 --- a/Demos/FMX/SimpleDemo/Entitlement.TemplateOSX.xml +++ b/Demos/FMX/SimpleDemo/Entitlement.TemplateOSX.xml @@ -1,7 +1,7 @@ - - - - - <%appSandboxKeys%> - - + + + + + <%appSandboxKeys%> + + diff --git a/Demos/FMX/SimpleDemo/Project1.dproj b/Demos/FMX/SimpleDemo/Project1.dproj index cbf5d09a..b652f79d 100644 --- a/Demos/FMX/SimpleDemo/Project1.dproj +++ b/Demos/FMX/SimpleDemo/Project1.dproj @@ -77,6 +77,7 @@ true true
+ .\$(Platform)\$(Config) .\$(Platform)\$(Config) @@ -97,6 +98,7 @@ $(BDS)\bin\delphi_PROJECTICON.ico $(BDS)\bin\delphi_PROJECTICNS.icns Project1 + ..\..\SearchPath2.optset DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;dbexpress;IndyCore;dsnap;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;dbrtl;IndyProtocols;$(DCC_UsePackage) @@ -219,6 +221,7 @@ Base + ..\..\SearchPath2.optset Cfg_1 diff --git a/Demos/FMX/SimpleDemo/info.plist.TemplateOSX.xml b/Demos/FMX/SimpleDemo/info.plist.TemplateOSX.xml index 421b334d..cde5e8b9 100644 --- a/Demos/FMX/SimpleDemo/info.plist.TemplateOSX.xml +++ b/Demos/FMX/SimpleDemo/info.plist.TemplateOSX.xml @@ -1,8 +1,8 @@ - - - - -<%VersionInfoPListKeys%> -<%ExtraInfoPListKeys%> - - + + + + +<%VersionInfoPListKeys%> +<%ExtraInfoPListKeys%> + + diff --git a/Demos/SearchPath1.optset b/Demos/SearchPath1.optset new file mode 100644 index 00000000..154f0153 --- /dev/null +++ b/Demos/SearchPath1.optset @@ -0,0 +1,13 @@ + + + ..\..\Source;..\..\Source\vcl;..\..\Source\fmx;$(DCC_UnitSearchPath) + + + Delphi.Personality.12 + OptionSet + + + + 12 + + diff --git a/Demos/SearchPath2.optset b/Demos/SearchPath2.optset new file mode 100644 index 00000000..f454c370 --- /dev/null +++ b/Demos/SearchPath2.optset @@ -0,0 +1,13 @@ + + + ..\..\..\Source;..\..\..\Source\vcl;..\..\..\Source\fmx;$(DCC_UnitSearchPath) + + + Delphi.Personality.12 + OptionSet + + + + 12 + + diff --git a/Demos/SearchPath3.optset b/Demos/SearchPath3.optset new file mode 100644 index 00000000..7e896767 --- /dev/null +++ b/Demos/SearchPath3.optset @@ -0,0 +1,13 @@ + + + ..\..\..\..\Source;..\..\..\..\Source\vcl;..\..\..\..\Source\fmx;$(DCC_UnitSearchPath) + + + Delphi.Personality.12 + OptionSet + + + + 12 + + diff --git a/LICENSE b/LICENSE index bd34b125..4c3c043d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2018 Dietmar Budelsky, Morgan Martinet, Kiriakos Vlahos - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2018 Dietmar Budelsky, Morgan Martinet, Kiriakos Vlahos + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Modules/BuildAllModules.bat b/Modules/BuildAllModules.bat index 685e4e3f..d707d331 100644 --- a/Modules/BuildAllModules.bat +++ b/Modules/BuildAllModules.bat @@ -1,11 +1,11 @@ -@echo off -call rsvars.bat -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiVCL/DelphiVCL.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiVCL/DelphiVCL.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Android DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Android64 DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=Linux64 DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=OSX32 DelphiFMX/DelphiFMX.dproj -msbuild /t:Clean /t:Build /p:config=Release /p:platform=OSX64 DelphiFMX/DelphiFMX.dproj +@echo off +call rsvars.bat +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiVCL/DelphiVCL.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiVCL/DelphiVCL.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Android DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Android64 DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=Linux64 DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=OSX32 DelphiFMX/DelphiFMX.dproj +msbuild /t:Clean /t:Build /p:config=Release /p:platform=OSX64 DelphiFMX/DelphiFMX.dproj diff --git a/Modules/BuildAllVersions.bat b/Modules/BuildAllVersions.bat index 06381ef7..2e1a6db3 100644 --- a/Modules/BuildAllVersions.bat +++ b/Modules/BuildAllVersions.bat @@ -1,31 +1,31 @@ -@echo off -call rsvars.bat -for /L %%G in (4,1,7) do ( - echo %%G > DelphiFMX\PythonVersionIndex.inc - echo %%G > DelphiVCL\PythonVersionIndex.inc - rmdir /s /q DelphiFMX\pyd%%G >nul - rmdir /s /q DelphiVCL\pyd%%G >nul - Echo VCL Win32 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiVCL/DelphiVCL.dproj - Echo VCL Win64 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiVCL/DelphiVCL.dproj - echo FMX Win32 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiFMX/DelphiFMX.dproj - Echo FMX Win64 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiFMX/DelphiFMX.dproj - if %%G==7 ( - echo FMX Android 32-bit Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Android DelphiFMX/DelphiFMX.dproj - echo FMX Android 64-bit Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Android64 DelphiFMX/DelphiFMX.dproj - ) - echo FMX Linux64 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Linux64 DelphiFMX/DelphiFMX.dproj -rem echo FMX OSX32 Index %%G -rem msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=OSX32 DelphiFMX/DelphiFMX.dproj - echo FMX OSX64 Index %%G - msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=OSX64 DelphiFMX/DelphiFMX.dproj - - ren DelphiFMX\pyd pyd%%G - ren DelphiVCL\pyd pyd%%G +@echo off +call rsvars.bat +for /L %%G in (4,1,7) do ( + echo %%G > DelphiFMX\PythonVersionIndex.inc + echo %%G > DelphiVCL\PythonVersionIndex.inc + rmdir /s /q DelphiFMX\pyd%%G >nul + rmdir /s /q DelphiVCL\pyd%%G >nul + Echo VCL Win32 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiVCL/DelphiVCL.dproj + Echo VCL Win64 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiVCL/DelphiVCL.dproj + echo FMX Win32 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win32 DelphiFMX/DelphiFMX.dproj + Echo FMX Win64 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Win64 DelphiFMX/DelphiFMX.dproj + if %%G==7 ( + echo FMX Android 32-bit Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Android DelphiFMX/DelphiFMX.dproj + echo FMX Android 64-bit Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Android64 DelphiFMX/DelphiFMX.dproj + ) + echo FMX Linux64 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=Linux64 DelphiFMX/DelphiFMX.dproj +rem echo FMX OSX32 Index %%G +rem msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=OSX32 DelphiFMX/DelphiFMX.dproj + echo FMX OSX64 Index %%G + msbuild /nologo /v:m /t:Clean /t:Build /p:config=Release /p:platform=OSX64 DelphiFMX/DelphiFMX.dproj + + ren DelphiFMX\pyd pyd%%G + ren DelphiVCL\pyd pyd%%G ) \ No newline at end of file diff --git a/Modules/DelphiFMX/TestFMX.py b/Modules/DelphiFMX/TestFMX.py index 252a0add..dfd04466 100644 --- a/Modules/DelphiFMX/TestFMX.py +++ b/Modules/DelphiFMX/TestFMX.py @@ -1,46 +1,46 @@ -from DelphiFMX import * - -class MainForm(Form): - - def __init__(self, Owner): - self.Caption = "A FMX Form..." - self.SetBounds(10, 10, 500, 400) - - self.lblHello = Label(self) - self.lblHello.SetProps(Parent=self, Text="Hello Python") - self.lblHello.SetBounds(10, 10, 300, 24) - - self.edit1 = Edit(self) - self.edit1.SetProps(Parent=self) - self.edit1.SetBounds(10, 30, 250, 24) - - self.button1 = Button(self) - self.button1.Parent = self - self.button1.SetBounds(270,24,100,30) - self.button1.Text = "Add" - self.button1.OnClick = self.Button1Click - - self.lb1 = ListBox(self) - self.lb1.Parent = self - self.lb1.SetBounds(10,60,300,300) - - self.OnClose = self.MainFormClose - - def MainFormClose(self, Sender, Action): - Action.Value = caFree - Application.Terminate - - def Button1Click(self, Sender): - self.lb1.Items.Add(self.edit1.Text) - self.edit1.Text = "" - -def main(): - Application.Initialize() - Application.Title = "MyDelphiApp" - f = MainForm(Application) - f.Show() - #FreeConsole() - Application.Run() - -main() - +from DelphiFMX import * + +class MainForm(Form): + + def __init__(self, Owner): + self.Caption = "A FMX Form..." + self.SetBounds(10, 10, 500, 400) + + self.lblHello = Label(self) + self.lblHello.SetProps(Parent=self, Text="Hello Python") + self.lblHello.SetBounds(10, 10, 300, 24) + + self.edit1 = Edit(self) + self.edit1.SetProps(Parent=self) + self.edit1.SetBounds(10, 30, 250, 24) + + self.button1 = Button(self) + self.button1.Parent = self + self.button1.SetBounds(270,24,100,30) + self.button1.Text = "Add" + self.button1.OnClick = self.Button1Click + + self.lb1 = ListBox(self) + self.lb1.Parent = self + self.lb1.SetBounds(10,60,300,300) + + self.OnClose = self.MainFormClose + + def MainFormClose(self, Sender, Action): + Action.Value = caFree + Application.Terminate + + def Button1Click(self, Sender): + self.lb1.Items.Add(self.edit1.Text) + self.edit1.Text = "" + +def main(): + Application.Initialize() + Application.Title = "MyDelphiApp" + f = MainForm(Application) + f.Show() + #FreeConsole() + Application.Run() + +main() + diff --git a/Modules/DelphiVCL/DelphiVCL.dproj b/Modules/DelphiVCL/DelphiVCL.dproj index c4794793..0ea8aaf9 100644 --- a/Modules/DelphiVCL/DelphiVCL.dproj +++ b/Modules/DelphiVCL/DelphiVCL.dproj @@ -1,139 +1,139 @@ - - - True - Library - Release - None - DelphiVCL.dpr - Win32 - {7E56095C-46B8-4F28-87A2-EEA8D9D2448D} - 19.2 - 3 - - - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Cfg_1 - true - true - - - true - Cfg_1 - true - true - - - true - Base - true - - - true - Cfg_2 - true - true - - - DelphiVCL - .\dcu\$(Config)\$(Platform) - .\pyd\$(Config)\$(Platform) - 00400000 - System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) - ..\..\Source;..\..\Source\VCL;$(DCC_UnitSearchPath) - true - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= - 1033 - - - Debug - .\dcu\$(Config)\$(Platform) - .\pyd\$(Config)\$(Platform) - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - (None) - - - Debug - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - - - 0 - RELEASE;$(DCC_Define) - false - 0 - - - (None) - - - (None) - - - DEBUG;$(DCC_Define) - true - false - - - (None) - - - - MainSource - - - - Base - - - Cfg_1 - Base - - - Cfg_2 - Base - - - - Delphi.Personality.12 - - - - - DelphiVCL.dpr - - - - - False - False - False - False - True - True - False - False - - - 12 - - - - - + + + True + Library + Release + None + DelphiVCL.dpr + Win32 + {7E56095C-46B8-4F28-87A2-EEA8D9D2448D} + 19.2 + 3 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + DelphiVCL + .\dcu\$(Config)\$(Platform) + .\pyd\$(Config)\$(Platform) + 00400000 + System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) + ..\..\Source;..\..\Source\VCL;$(DCC_UnitSearchPath) + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + 1033 + + + Debug + .\dcu\$(Config)\$(Platform) + .\pyd\$(Config)\$(Platform) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + (None) + + + Debug + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + + + 0 + RELEASE;$(DCC_Define) + false + 0 + + + (None) + + + (None) + + + DEBUG;$(DCC_Define) + true + false + + + (None) + + + + MainSource + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + DelphiVCL.dpr + + + + + False + False + False + False + True + True + False + False + + + 12 + + + + + diff --git a/Modules/DelphiVCL/TestVCL.py b/Modules/DelphiVCL/TestVCL.py index fba8f36a..2641d390 100644 --- a/Modules/DelphiVCL/TestVCL.py +++ b/Modules/DelphiVCL/TestVCL.py @@ -1,45 +1,45 @@ -from DelphiVCL import * - -class MainForm(Form): - - def __init__(self, Owner): - self.Caption = "A VCL Form..." - self.SetBounds(10, 10, 500, 400) - - self.lblHello = Label(self) - self.lblHello.SetProps(Parent=self, Caption="Hello Python") - self.lblHello.SetBounds(10, 10, 300, 24) - - self.edit1 = Edit(self) - self.edit1.SetProps(Parent=self) - self.edit1.SetBounds(10, 30, 250, 24) - - self.button1 = Button(self) - self.button1.Parent = self - self.button1.SetBounds(270,24,100,30) - self.button1.Caption = "Add" - self.button1.OnClick = self.Button1Click - - self.lb1 = ListBox(self) - self.lb1.Parent = self - self.lb1.SetBounds(10,60,300,300) - - self.OnClose = self.MainFormClose - - def MainFormClose(self, Sender, Action): - Action.Value = caFree - - def Button1Click(self, Sender): - self.lb1.Items.Add(self.edit1.Text) - self.edit1.Text = "" - -def main(): - Application.Initialize() - Application.Title = "MyDelphiApp" - f = MainForm(Application) - f.Show() - FreeConsole() - Application.Run() - -main() - +from DelphiVCL import * + +class MainForm(Form): + + def __init__(self, Owner): + self.Caption = "A VCL Form..." + self.SetBounds(10, 10, 500, 400) + + self.lblHello = Label(self) + self.lblHello.SetProps(Parent=self, Caption="Hello Python") + self.lblHello.SetBounds(10, 10, 300, 24) + + self.edit1 = Edit(self) + self.edit1.SetProps(Parent=self) + self.edit1.SetBounds(10, 30, 250, 24) + + self.button1 = Button(self) + self.button1.Parent = self + self.button1.SetBounds(270,24,100,30) + self.button1.Caption = "Add" + self.button1.OnClick = self.Button1Click + + self.lb1 = ListBox(self) + self.lb1.Parent = self + self.lb1.SetBounds(10,60,300,300) + + self.OnClose = self.MainFormClose + + def MainFormClose(self, Sender, Action): + Action.Value = caFree + + def Button1Click(self, Sender): + self.lb1.Items.Add(self.edit1.Text) + self.edit1.Text = "" + +def main(): + Application.Initialize() + Application.Title = "MyDelphiApp" + f = MainForm(Application) + f.Show() + FreeConsole() + Application.Run() + +main() + diff --git a/Modules/PythonFMXandVCL.groupproj b/Modules/PythonFMXandVCL.groupproj index d0e15de4..796be097 100644 --- a/Modules/PythonFMXandVCL.groupproj +++ b/Modules/PythonFMXandVCL.groupproj @@ -1,48 +1,48 @@ - - - {8CE82B03-1B21-45C9-8091-DF9D8A8F4E5C} - - - - - - - - - - - Default.Personality.12 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + {8CE82B03-1B21-45C9-8091-DF9D8A8F4E5C} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Modules/README.md b/Modules/README.md index a425abd7..539247a9 100644 --- a/Modules/README.md +++ b/Modules/README.md @@ -1,9 +1,9 @@ -# Create Python extension modules using P4D - -You can use P4D to create Python extension modules that expose your own classes and functions to the Python interpreter. You can package your extension with setuptools and distribute it through [PyPi](https://pypi.org/). - -- The project in the subdirectory Delphi generates a Python extension module (a dynamic link library with extension "pyd" in Windows) that allows you to create user interfaces using delphi from within python. The whole VCL (almost) is wrapped with a few lines of code! The small demo TestApp.py gives you a flavour of what is possible. The machinery by which this is achieved is the WrapDelphi unit. - - - The subdirectory DemoModule demonstrates how to create Python extension modules using Delphi, that allow you to use in Python, functions defined in Delphi. Compile the project and run test.py from the command prompt (e.g. py test.py). The generated pyd file should be in the same directory as the python file. This project should be easily adapted to use with Lazarus and FPC. - +# Create Python extension modules using P4D + +You can use P4D to create Python extension modules that expose your own classes and functions to the Python interpreter. You can package your extension with setuptools and distribute it through [PyPi](https://pypi.org/). + +- The project in the subdirectory Delphi generates a Python extension module (a dynamic link library with extension "pyd" in Windows) that allows you to create user interfaces using delphi from within python. The whole VCL (almost) is wrapped with a few lines of code! The small demo TestApp.py gives you a flavour of what is possible. The machinery by which this is achieved is the WrapDelphi unit. + + - The subdirectory DemoModule demonstrates how to create Python extension modules using Delphi, that allow you to use in Python, functions defined in Delphi. Compile the project and run test.py from the command prompt (e.g. py test.py). The generated pyd file should be in the same directory as the python file. This project should be easily adapted to use with Lazarus and FPC. + - The subdirectory RttiModule contains a project that does the same as the DemoModule, but using extended RTTI to export Delphi functions. This currently is not supported by FPC. \ No newline at end of file diff --git a/Packages/Delphi/Delphi 10.3-/Python_D.dpk b/Packages/Delphi/Delphi 10.3-/Python_D.dpk index f28c000f..86570074 100644 --- a/Packages/Delphi/Delphi 10.3-/Python_D.dpk +++ b/Packages/Delphi/Delphi 10.3-/Python_D.dpk @@ -1,29 +1,29 @@ package Python_D; +{$R *.res} {$R '..\..\..\Source\PythonEngine.dcr'} {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} -{$DEBUGINFO OFF} +{$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} -{$OPTIMIZATION OFF} +{$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} -{$STACKFRAMES ON} +{$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} -{$DEFINE DEBUG} {$ENDIF IMPLICITBUILDING} {$DESCRIPTION 'Components for Python'} {$IMPLICITBUILD OFF} diff --git a/Packages/Delphi/Delphi 10.3-/Python_D.dproj b/Packages/Delphi/Delphi 10.3-/Python_D.dproj new file mode 100644 index 00000000..90a80742 --- /dev/null +++ b/Packages/Delphi/Delphi 10.3-/Python_D.dproj @@ -0,0 +1,130 @@ + + + {0E8E26DF-AEAD-437D-9B90-C3AD0416250B} + Python_D.dpk + True + Debug + Win32 + Package + VCL + DCC32 + 12.3 + + + true + + + true + Base + true + + + true + Base + true + + + 150 + false + true + false + true + S:\Prodat2005\_dcu + S:\Prodat2005\_dcp + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias) + false + Components for Python + false + true + 3 + 00400000 + false + + + RELEASE;$(DCC_Define) + 0 + false + false + + + true + DEBUG;$(DCC_Define) + false + true + + + + MainSource + + + + + + + + + + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + + + Delphi.Personality.12 + Package + + + + Python_D.dpk + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TeeChart Standard 9 Components + Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automation Server + Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server + + + + True + + + 12 + + diff --git a/Packages/Delphi/Delphi 10.3-/Python_D.res b/Packages/Delphi/Delphi 10.3-/Python_D.res new file mode 100644 index 00000000..f5414538 Binary files /dev/null and b/Packages/Delphi/Delphi 10.3-/Python_D.res differ diff --git a/Packages/Delphi/Delphi 10.4+/Python.dpk b/Packages/Delphi/Delphi 10.4+/Python.dpk index b27c7bb2..12235361 100644 --- a/Packages/Delphi/Delphi 10.4+/Python.dpk +++ b/Packages/Delphi/Delphi 10.4+/Python.dpk @@ -26,7 +26,7 @@ package Python; {$DESCRIPTION 'Python4Delphi - Run-time Engine Package'} {$LIBSUFFIX AUTO} {$RUNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/Python.dproj b/Packages/Delphi/Delphi 10.4+/Python.dproj index 689ea6e5..516171b9 100644 --- a/Packages/Delphi/Delphi 10.4+/Python.dproj +++ b/Packages/Delphi/Delphi 10.4+/Python.dproj @@ -2,37 +2,17 @@ True Package - Release + Debug VCL Python.dpk Win32 {018AAA56-F5BD-4A04-BCCA-A0043EAAA5CE} - 19.5 - 168083 + 19.1 + 3 true - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - true Base @@ -48,80 +28,40 @@ 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 - - - 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 - 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 - 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 + true + true + $(_dcu) + $(_dcp) + $(_bpl) + $(_dcp) + $(_dcu) + $(_dcu) Debug - Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(CimNamespace);Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(CimDefines_Extern);$(DCC_Define) + $(CimSearchPath);$(DCC_UnitSearchPath) + $(CimUnitAliases);$(DCC_UnitAlias) - Debug Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug true CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= @@ -131,30 +71,11 @@ 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 @@ -164,8 +85,6 @@ - - @@ -175,8 +94,10 @@ - - + + Cfg_2 + Base + Base @@ -184,10 +105,6 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 @@ -200,16 +117,699 @@ - True - True - True - True - True True True - False - False + + + + 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+/Python.res b/Packages/Delphi/Delphi 10.4+/Python.res new file mode 100644 index 00000000..74359957 Binary files /dev/null and b/Packages/Delphi/Delphi 10.4+/Python.res differ diff --git a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk index 8167888e..1c8288c5 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk +++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dpk @@ -27,7 +27,7 @@ package PythonFmx; {$DESCRIPTION 'Python4Delphi - Run-time Engine Package for FMX'} {$LIBSUFFIX AUTO} {$RUNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj b/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj index f3da3849..30ef733d 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj +++ b/Packages/Delphi/Delphi 10.4+/PythonFmx.dproj @@ -1,38 +1,18 @@  - True - Package - Release - FMX + {6C9FBAC1-1024-4A46-96EE-2CADEFE347AA} PythonFmx.dpk + 19.1 + FMX + True + Debug Win32 - {513BF750-373D-4C95-A672-78CA8DDF3F63} - 19.5 - 167955 + 3 + Package true - - true - Base - true - - - true - Base - true - - - true - Base - true - - - true - Base - true - true Base @@ -60,60 +40,43 @@ true - PythonFmx - All - ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Run-time Engine Package for FMX + .\$(Platform)\$(Config) .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) - $(Auto) + false + false + false + false + false true true - true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + true + PythonFmx + 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= - 1046 - - - 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 - 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 - 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 + Python4Delphi - Run-time Engine Package for FMX + true + $(Auto) - 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 + true false - true + true + true true @@ -122,10 +85,10 @@ 1033 - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 + 0 @@ -133,32 +96,24 @@ - - + - - - - - - - - - - - - + + + Cfg_2 + Base + Base @@ -166,10 +121,6 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 @@ -179,18 +130,721 @@ 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 + + + + + true + + + + + PythonFmx.bpl + 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 + + + + + + + + + + + + + - True - True - False - True - True True True - False - False 12 diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk b/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk index bc68ac72..9c712737 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk +++ b/Packages/Delphi/Delphi 10.4+/PythonVcl.dpk @@ -28,7 +28,7 @@ package PythonVcl; {$DESCRIPTION 'Python4Delphi - Run-time Engine Package for VCL'} {$LIBSUFFIX AUTO} {$RUNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj index 5e059dc0..d46de6b9 100644 --- a/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj +++ b/Packages/Delphi/Delphi 10.4+/PythonVcl.dproj @@ -1,14 +1,14 @@  - True - Package - Release - VCL + {D8908301-393C-4CFA-8842-4948A9935E21} PythonVcl.dpk + 19.1 + VCL + True + Debug Win32 - {D8908301-393C-4CFA-8842-4948A9935E21} - 19.5 3 + Package true @@ -23,6 +23,11 @@ Base true + + true + Base + true + true Base @@ -39,43 +44,58 @@ Base true - - true - Cfg_2 - true - true - - PythonVcl - ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Run-time Engine Package for VCL + $(_dcu) .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) - $(Auto) + false + false + false + false + false 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= + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + All + true + 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) + $(_dcp) + $(_bpl) + $(_dcp) + $(_dcu) + $(_dcu) + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + $(CimNamespace);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 + $(CimDefines_Extern);$(DCC_Define) + $(CimSearchPath);$(DCC_UnitSearchPath) + $(CimUnitAliases);$(DCC_UnitAlias) - Debug Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug true - true - true DEBUG;$(DCC_Define) - true + true false + true + true true @@ -83,13 +103,10 @@ true - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 - - - true + 0 @@ -99,12 +116,9 @@ - - - @@ -115,9 +129,10 @@ - - - + + Cfg_2 + Base + Base @@ -125,10 +140,6 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 @@ -140,16 +151,720 @@ + + + + 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 True True - False - False 12 diff --git a/Packages/Delphi/Delphi 10.4+/PythonVcl.res b/Packages/Delphi/Delphi 10.4+/PythonVcl.res new file mode 100644 index 00000000..7dfe267f Binary files /dev/null and b/Packages/Delphi/Delphi 10.4+/PythonVcl.res differ diff --git a/Packages/Delphi/Delphi 10.4+/dclPython.dpk b/Packages/Delphi/Delphi 10.4+/dclPython.dpk index 8b8781e2..0fe53a3d 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPython.dpk +++ b/Packages/Delphi/Delphi 10.4+/dclPython.dpk @@ -28,7 +28,7 @@ package dclPython; {$DESCRIPTION 'Python4Delphi - Design-time Engine Package'} {$LIBSUFFIX AUTO} {$DESIGNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/dclPython.dproj b/Packages/Delphi/Delphi 10.4+/dclPython.dproj index a2f01927..87f37eaa 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPython.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPython.dproj @@ -1,14 +1,14 @@  - True - Package - Release - None + {D9AB994C-54A3-4E76-81C8-6D0BB035A091} dclPython.dpk + 19.1 + None + True + Debug Win32 - {D9AB994C-54A3-4E76-81C8-6D0BB035A091} - 19.5 - 1 + 3 + Package true @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -34,55 +39,64 @@ Base true - - true - Cfg_2 - true - true - - dclPython - All - ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Design-time Engine Package + $(_dcu) .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) - true - $(Auto) + false + false + false + false + false 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= + System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) + All + true + 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= + Python4Delphi - Design-time Engine Package + true + $(Auto) + $(_dcp) + $(_bpl) + $(_dcp) + $(_dcu) + $(_dcu) + $(CimNamespace);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 rtl;Python;$(DCC_UsePackage) + $(CimDefines_Extern);$(DCC_Define) + $(CimSearchPath);$(DCC_UnitSearchPath) + $(CimUnitAliases);$(DCC_UnitAlias) + + + rtl;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 - true - true DEBUG;$(DCC_Define) - true + true false + true + true true - 3 false true + 3 - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 - - - true + 0 @@ -119,6 +133,10 @@ BITMAP TPythonType + + Cfg_2 + Base + Base @@ -126,31 +144,725 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 Package + 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 True - False - False - False + True 12 diff --git a/Packages/Delphi/Delphi 10.4+/dclPython.res b/Packages/Delphi/Delphi 10.4+/dclPython.res new file mode 100644 index 00000000..a9f9fbd1 Binary files /dev/null and b/Packages/Delphi/Delphi 10.4+/dclPython.res differ diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk index 913f8b17..48e3e4cf 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk +++ b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dpk @@ -28,7 +28,7 @@ package dclPythonFmx; {$DESCRIPTION 'Python4Delphi - Design-time Engine Package for FMX'} {$LIBSUFFIX AUTO} {$DESIGNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj index 9fed4132..75efc09e 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPythonFmx.dproj @@ -1,14 +1,14 @@  - True - Package - Release - None + {E057921E-25DB-426E-8090-FE3F428894FF} dclPythonFmx.dpk + 19.1 + None + True + Debug Win32 - {E057921E-25DB-426E-8090-FE3F428894FF} - 19.5 - 1 + 3 + Package true @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -34,55 +39,58 @@ Base true - - true - Cfg_2 - true - true - - dclPythonFmx - All - ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Design-time Engine Package for FMX + .\$(Platform)\$(Config) .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) - ..\..\..\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath) - true - $(Auto) + false + false + false + false + false 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= + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + true + 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= + Python4Delphi - Design-time Engine Package for FMX + true + $(Auto) - Debug Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) - rtl;PythonFmx;$(DCC_UsePackage) + 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 + rtl;PythonFmx;$(DCC_UsePackage) + + + rtl;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true - true - true DEBUG;$(DCC_Define) - true + true false + true + true true false true + 1033 - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 - - - true + 0 @@ -95,6 +103,10 @@ BITMAP TPythonGUIInputOutput + + Cfg_2 + Base + Base @@ -102,10 +114,6 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 @@ -115,18 +123,721 @@ 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 + + + + + true + + + + + true + + + + + true + + + + + dclPythonFmx.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 True - False - False - False + True 12 diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonResource.rc b/Packages/Delphi/Delphi 10.4+/dclPythonResource.rc new file mode 100644 index 00000000..b14cb3b4 --- /dev/null +++ b/Packages/Delphi/Delphi 10.4+/dclPythonResource.rc @@ -0,0 +1,7 @@ +TPyDelphiWrapper BITMAP "..\\..\\Resources\\TPYDELPHIWRAPPER.bmp" +TPythonDelphiVar BITMAP "..\\..\\Resources\\TPYTHONDELPHIVAR.bmp" +TPythonEngine BITMAP "..\\..\\Resources\\TPYTHONENGINE.bmp" +TPythonGUIInputOutput BITMAP "..\\..\\Resources\\TPYTHONGUIINPUTOUTPUT.bmp" +TPythonInputOutput BITMAP "..\\..\\Resources\\TPYTHONINPUTOUTPUT.bmp" +TPythonModule BITMAP "..\\..\\Resources\\TPYTHONMODULE.bmp" +TPythonType BITMAP "..\\..\\Resources\\TPYTHONTYPE.bmp" diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dpk b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dpk index 7302489d..767fcdf3 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dpk +++ b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dpk @@ -29,7 +29,7 @@ package dclPythonVcl; {$DESCRIPTION 'Python4Delphi - Design-Time Engine Package for VCL'} {$LIBSUFFIX AUTO} {$DESIGNONLY} -{$IMPLICITBUILD ON} +{$IMPLICITBUILD OFF} requires rtl, diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj index 3944b8d3..d39a77d5 100644 --- a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj +++ b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.dproj @@ -1,14 +1,14 @@  - True - Package - Release - None + {48DDC28A-E154-4CA0-864A-30EB8C4CCBB3} dclPythonVcl.dpk + 19.1 + None + True + Debug Win32 - {48DDC28A-E154-4CA0-864A-30EB8C4CCBB3} - 19.5 - 1 + 3 + Package true @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -34,54 +39,64 @@ Base true - - true - Cfg_2 - true - true - - dclPythonVcl - All - ..\..\..\lib\$(Platform)\$(Config) - Python4Delphi - Design-Time Engine Package for VCL + $(_dcu) .\$(Platform)\$(Config) - System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) - true - $(Auto) + false + false + false + false + false 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= + System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) + All + true + 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= + Python4Delphi - Design-Time Engine Package for VCL + true + $(Auto) + $(_dcp) + $(_bpl) + $(_dcp) + $(_dcu) + $(_dcu) + $(CimNamespace);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 rtl;vcl;PythonVcl;$(DCC_UsePackage) + $(CimDefines_Extern);$(DCC_Define) + $(CimSearchPath);$(DCC_UnitSearchPath) + $(CimUnitAliases);$(DCC_UnitAlias) + + + rtl;vcl;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug true - true - true DEBUG;$(DCC_Define) - true + true false + true + true true - 3 false true + 3 - 0 - RELEASE;$(DCC_Define) false + RELEASE;$(DCC_Define) 0 - - - ..\..\..\lib\$(Platform)\$(Config) - true + 0 @@ -95,6 +110,10 @@ BITMAP TPythonGUIInputOutput + + Cfg_2 + Base + Base @@ -102,10 +121,6 @@ Cfg_1 Base - - Cfg_2 - Base - Delphi.Personality.12 @@ -117,16 +132,714 @@ + + + + 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 True - False - False - False + True 12 diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonVcl.res b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.res new file mode 100644 index 00000000..06004792 Binary files /dev/null and b/Packages/Delphi/Delphi 10.4+/dclPythonVcl.res differ diff --git a/Packages/Delphi/Delphi 10.4+/dclPythonVclResource.rc b/Packages/Delphi/Delphi 10.4+/dclPythonVclResource.rc new file mode 100644 index 00000000..f3a83271 --- /dev/null +++ b/Packages/Delphi/Delphi 10.4+/dclPythonVclResource.rc @@ -0,0 +1 @@ +TPythonGUIInputOutput BITMAP "..\\..\\Resources\\TPYTHONGUIINPUTOUTPUT.bmp" diff --git a/Packages/FPC/p4dlaz_register.pas b/Packages/FPC/p4dlaz_register.pas index ab6b0986..f693a653 100644 --- a/Packages/FPC/p4dlaz_register.pas +++ b/Packages/FPC/p4dlaz_register.pas @@ -1,25 +1,25 @@ -unit P4DLaz_register; - -interface - -uses SysUtils, Classes; - -procedure Register; - -implementation -{$R '..\..\Source\PythonEngine.dcr'} - -uses - PythonEngine, - Lcl.PythonGUIInputOutput, - WrapDelphi; - -procedure Register; -begin - RegisterComponents('Python', [TPythonEngine, TPythonInputOutput, - TPythonType, TPythonModule, TPythonDelphiVar]); - RegisterComponents('Python', [TPythonGUIInputOutput]); - RegisterComponents('Python', [TPyDelphiWrapper]); -end; - -end. +unit P4DLaz_register; + +interface + +uses SysUtils, Classes; + +procedure Register; + +implementation +{$R '..\..\Source\PythonEngine.dcr'} + +uses + PythonEngine, + Lcl.PythonGUIInputOutput, + WrapDelphi; + +procedure Register; +begin + RegisterComponents('Python', [TPythonEngine, TPythonInputOutput, + TPythonType, TPythonModule, TPythonDelphiVar]); + RegisterComponents('Python', [TPythonGUIInputOutput]); + RegisterComponents('Python', [TPyDelphiWrapper]); +end; + +end. diff --git a/Source/Definition.Inc b/Source/Definition.Inc index 826b61a9..5d1efe02 100644 --- a/Source/Definition.Inc +++ b/Source/Definition.Inc @@ -173,7 +173,7 @@ {$DEFINE DELPHI10_4_OR_HIGHER} {$IF RTLVERSION1042} {$DEFINE DELPHI10_4_2} //Delphi 10.4.2 - {$ENDIF RTLVERSION1042} + {$IFEND RTLVERSION1042} {$ENDIF} {$IFDEF VER350} // Delphi 11 {$DEFINE DELPHI11} @@ -244,7 +244,7 @@ {$ENDIF FPC} {$IFDEF DELPHIXE_OR_HIGHER} - {$DEFINE EXTENDED_RTTI} + //{$DEFINE EXTENDED_RTTI} {$ENDIF DELPHIXE_OR_HIGHER} {$IFDEF DELPHIXE4_OR_HIGHER} diff --git a/Source/PythonEngine.pas b/Source/PythonEngine.pas index e29bed72..06ead906 100644 --- a/Source/PythonEngine.pas +++ b/Source/PythonEngine.pas @@ -19,11 +19,11 @@ { TODO -oMMM : implement tp_as_buffer slot } { TODO -oMMM : implement Attribute descriptor and subclassing stuff } -{$IFNDEF FPC} - {$IFNDEF DELPHIXE2_OR_HIGHER} - Error! Delphi XE2 or higher is required! - {$ENDIF} -{$ENDIF} +//{$IFNDEF FPC} +// {$IFNDEF DELPHIXE2_OR_HIGHER} +// Error! Delphi XE2 or higher is required! +// {$ENDIF} +//{$ENDIF} {$IF defined(LINUX) or (defined(BSD) and not defined(DARWIN)) or defined(SOLARIS) or defined(HAIKU)} {$define _so_files} @@ -173,7 +173,7 @@ TPythonVersionProp = record C_Long = Integer; C_ULong = Cardinal; {$ELSE} - C_Long = NativeInt; + C_Long= NativeInt; C_ULong = NativeUInt; {$ENDIF} @@ -1396,6 +1396,7 @@ TPythonInterface=class(TDynamicDll) Py_BuildValue: TPy_BuildValue; Py_Initialize: procedure; cdecl; + Py_InitializeEx: procedure(initsigs: Integer); cdecl; Py_Exit: procedure( RetVal: Integer); cdecl; PyEval_GetBuiltins: function: PPyObject; cdecl; PyDict_Copy: function(mp: PPyObject):PPyObject; cdecl; @@ -2023,8 +2024,8 @@ TEngineClient = class(TComponent) //-- -- //------------------------------------------------------- - TDelphiMethod = function ( self, args : PPyObject ) : PPyObject of object; cdecl; - TDelphiMethodWithKW = function ( self, args, keywords : PPyObject ) : PPyObject of object; cdecl; + TDelphiMethod = function ( PSelf, Args : PPyObject ) : PPyObject of object; cdecl; + TDelphiMethodWithKW = function ( PSelf, Args, keywords : PPyObject ) : PPyObject of object; cdecl; TPythonEvent = procedure(Sender: TObject; PSelf, Args: PPyObject; var Result: PPyObject) of object; TMethodsContainer = class; // forward declaration TEventDefs = class; // forward declaration @@ -3033,7 +3034,7 @@ function TDynamicDll.GetDllPath : string; Result := DllPath; if (DLLPath = '') and not FInExtensionModule then begin - {$IFDEF MSWINDOWS} + {$IFDEF MSWINDOWS} if IsPythonVersionRegistered(RegVersion, Result, AllUserInstall) and (Self is TPythonEngine) then // https://github.com/python/cpython/issues/100171 TPythonEngine(Self).SetPythonHome(Result); @@ -3617,6 +3618,7 @@ procedure TPythonInterface.MapDll; PyArg_ParseTupleAndKeywords := Import('PyArg_ParseTupleAndKeywords'); Py_BuildValue := Import('Py_BuildValue'); Py_Initialize := Import('Py_Initialize'); + Py_InitializeEx := Import('Py_InitializeEx'); PyModule_GetDict := Import('PyModule_GetDict'); PyObject_Str := Import('PyObject_Str'); PyRun_String := Import('PyRun_String'); @@ -4177,7 +4179,7 @@ procedure TPythonTraceback.Refresh(pytraceback: PPyObject); alimit := PyLong_AsLong(limitv); tb := pytraceback; if tb = nil then - tb := PySys_GetObject('last_traceback'); + tb := PySys_GetObject('last_traceback'); tb1 := tb; Py_XIncRef(tb1); depth := 0; @@ -4311,10 +4313,14 @@ procedure TPythonEngine.Finalize; begin RedirectIO := False; // restore the initial streams also. - ExecString('import sys'+LF+ - 'if hasattr(sys, "old_stdin"): sys.stdin=sys.old_stdin'+LF+ - 'if hasattr(sys, "old_stdout"): sys.stdout=sys.old_stdout'+LF+ - 'if hasattr(sys, "old_stderr"): sys.stderr=sys.old_stderr' ); + try + ExecString('import sys'+LF+ + 'if hasattr(sys, "old_stdin"): sys.stdin=sys.old_stdin'+LF+ + 'if hasattr(sys, "old_stdout"): sys.stdout=sys.old_stdout'+LF+ + 'if hasattr(sys, "old_stderr"): sys.stderr=sys.old_stderr' ); + except + // Exception if a script error occurred previously. e.g. in CheckExecSyntax with incorrect syntax. + end; end; // First finalize our clients if Initialized then @@ -4654,9 +4660,9 @@ procedure TPythonEngine.SetProgramArgs; TempS := '' else TempS := ParamStr(I); - {$IFDEF POSIX} + {$IFDEF POSIX} WL[I] := UnicodeStringToUCS4String(TempS); - {$ELSE} + {$ELSE} WL[I] := UnicodeString(TempS); {$ENDIF} wargv[I] := PWCharT(WL[I]); @@ -4781,7 +4787,7 @@ procedure TPythonEngine.SetPythonHome(const PythonHome: UnicodeString); {$IFDEF POSIX} FPythonHome := UnicodeStringToUCS4String(PythonHome); {$ELSE} - FPythonHome := PythonHome; + FPythonHome := PythonHome; {$ENDIF} end; @@ -5431,7 +5437,7 @@ function TPythonEngine.ModuleByName( const aModuleName : AnsiString ) : PPyObj raise Exception.CreateFmt('Could not find module: %s', [aModuleName]); end; -function TPythonEngine.MethodsByName( const aMethodsContainer: string ) : PPyMethodDef; +function TPythonEngine.MethodsByName( const aMethodsContainer: string ) : PPyMethodDef; var i : Integer; begin @@ -6092,7 +6098,7 @@ function TPythonEngine.PyUnicodeFromString(const AString : UnicodeString) : PPyO _ucs4Str := WideStringToUCS4String(AString); Result := PyUnicode_FromWideChar(@_ucs4Str[0], Length(_ucs4Str)-1 {trim trailing zero}); {$ELSE} - Result := PyUnicode_FromWideChar(PWideChar(AString), Length(AString)); + Result := PyUnicode_FromWideChar( PWideChar(AString), Length(AString) ); {$ENDIF} end; @@ -6221,7 +6227,7 @@ procedure TPythonEngine.CheckError(ACatchStopEx : Boolean = False); var errtype, errvalue, errtraceback: PPyObject; SErrValue: string; - begin +begin PyErr_Fetch(errtype, errvalue, errtraceback); Traceback.Refresh(errtraceback); SErrValue := PyObjectAsString(errvalue); @@ -6231,10 +6237,10 @@ procedure TPythonEngine.CheckError(ACatchStopEx : Boolean = False); var PyException: PPyObject; -begin + begin PyException := PyErr_Occurred; if PyException <> nil then - begin + begin if ACatchStopEx and (PyErr_GivenExceptionMatches(PyException, PyExc_StopIteration^) <> 0) then begin PyErr_Clear; diff --git a/Tests/FMX/Android/MethodCallBackTest.pas b/Tests/FMX/Android/MethodCallBackTest.pas index f4d2044f..9ea45f45 100644 --- a/Tests/FMX/Android/MethodCallBackTest.pas +++ b/Tests/FMX/Android/MethodCallBackTest.pas @@ -1,262 +1,262 @@ -(**************************************************************************) -(* *) -(* Module: Unit 'MethodCallbackTest' Copyright (c) 2021 *) -(* *) -(* Lucas Moura Belo - lmbelo *) -(* lucas.belo@live.com *) -(* BH, Brazil *) -(* *) -(* PyScripter *) -(* e-mail: pyscripter@gmail.com *) -(* *) -(* Project pages: https://github.com/Embarcadero/python4delphi *) -(* https://github.com/pyscripter/python4delphi *) -(**************************************************************************) -(* Functionality: Test unit for MethodCallback *) -(* *) -(* *) -(**************************************************************************) -(* 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 MethodCallBackTest; - -interface - -uses - DUnitX.TestFramework, - MethodCallback, - PythonLoad; - -implementation - -type - TTwoArgArmStdFunction = function (arg1, arg2: string): integer; - TThreeArgArmStdProcedure = procedure (arg1, arg2, arg3: string); - - TFourArgArmStdFunction = function(arg1, arg2, arg3, arg4: integer): integer; - TFiveArgArmStdFunction = function(arg1, arg2, arg3, arg4, arg5: integer): integer; - - TMyFuncCallback = function(arg1, arg2: string): integer of object; - TMyProcCallback = procedure (arg1, arg2, arg3: string) of object; - - TTestObj = class - public - Argument1: string; - Argument2: string; - Argument3: string; - function TwoArgArmStdFunction(arg1, arg2: string): integer; - procedure ThreeArgArmStdProcedure(arg1, arg2, arg3: string); - function FourArgArmStdFunction(arg1, arg2, arg3, arg4: integer): integer; - function FiveArgArmStdFunction(arg1, arg2, arg3, arg4, arg5: integer): integer; - end; - - [TestFixture] - TMethodCallbackTest = class - private - fTestObj: TTestObj; - public - [SetupFixture] - procedure SetupFixture; - [TearDownFixture] - procedure Teardown; - [Test] - procedure TestDeleteOnEmptyAllocator; - [Test] - procedure TestCallBackArmStd; - [Test] - procedure TestOfObjectCallBackArmStd; - [Test] - procedure TestDeleteCallBack; - [Test] - procedure TestFourArgArmStdFunction; - [Test] - procedure TestFiveArgArmStdFunction; - [Test] - procedure TestMemoryMgmt; - end; - -{ TTestObj } - -function TTestObj.FiveArgArmStdFunction(arg1, arg2, arg3, arg4, - arg5: integer): integer; -begin - Result := arg1 * arg4 + arg2 * arg5 + arg3; -end; - -function TTestObj.FourArgArmStdFunction(arg1, arg2, arg3, arg4: integer): integer; -begin - Result := arg1 * arg3 + arg2 * arg4; -end; - -procedure TTestObj.ThreeArgArmStdProcedure(arg1, arg2, arg3: string); -begin - Argument1:=arg1; - Argument2:=arg2; - Argument3:=arg3; -end; - -function TTestObj.TwoArgArmStdFunction(arg1, arg2: string): integer; -begin - Argument1:=arg1; - Argument2:=arg2; - result:=1; -end; - -{ TMethodCallbackTest } - -procedure TMethodCallbackTest.SetupFixture; -begin - fTestObj:=TTestObj.Create; -end; - -procedure TMethodCallbackTest.Teardown; -begin - fTestObj.Free; - FreeCallBacks; -end; - -procedure TMethodCallbackTest.TestMemoryMgmt; -const - AllocCount = {$IFDEF CPUARM} - {$IFDEF CPUARM32} - 31 - {$ELSE} - 46 - {$ENDIF CPUARM32} - {$ELSE} - {$IFDEF CPUX64} - {$IFDEF MSWINDOWS} - 51 - {$ELSE} - 88 - {$ENDIF} - {$ELSE} - 90 - {$ENDIF} - {$ENDIF}; -var - i: integer; - ptr: Pointer; -begin - //---Test the code-memory manager - - FreeCallBacks; - Assert.AreEqual(0, CodeMemPageCount); - - for i:=1 to AllocCount do - ptr:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 5, ctArmStd); - - // there should still be 1 page allocated - Assert.AreEqual(1, CodeMemPageCount); - - // get one callback more and we should have 2 pages - ptr:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 5, ctArmStd); - // getting CodeMemPageCount would crash as the next page pointer was overwritten by the - // last allocation - Assert.AreEqual(2, CodeMemPageCount); -end; - -procedure TMethodCallbackTest.TestCallBackArmStd; -var - ptr: pointer; - func: TTwoArgArmStdFunction; -begin - ptr:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); - - //---call method through pointer - func:=TTwoArgArmStdFunction(ptr); - - Assert.AreEqual(1, func('first arg', 'second arg')); - Assert.AreEqual(string('first arg'), fTestObj.Argument1); - Assert.AreEqual(string('second arg'), fTestObj.Argument2); -end; - -procedure TMethodCallbackTest.TestDeleteCallBack; -var - ptr1, ptr2, ptr3: Pointer; - proc: TThreeArgArmStdProcedure; - func: TTwoArgArmStdFunction; -begin - //---we create 3 callbacks and delete them. - // if there aren't any AV, we assume it works... - ptr1:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 3, ctArmStd); - ptr2:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); - DeleteCallBack(ptr1); - ptr1:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); - ptr3:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 3, ctArmStd); - - func:=TTwoArgArmStdFunction(ptr1); - func('arg1', 'arg2'); - func:=TTwoArgArmStdFunction(ptr2); - func('arg1', 'arg2'); - proc:=TThreeArgArmStdProcedure(ptr3); - proc('arg1', 'arg2', 'arg3'); - - DeleteCallBack(ptr1); - DeleteCallBack(ptr2); - DeleteCallback(ptr3); - Assert.Pass; -end; - -procedure TMethodCallbackTest.TestDeleteOnEmptyAllocator; -var - ptr1 : Pointer; -begin - ptr1 := nil; - DeleteCallBack(ptr1); - Assert.Pass(); -end; - -procedure TMethodCallbackTest.TestFiveArgArmStdFunction; -Var - CallBack : TFiveArgArmStdFunction; -begin - CallBack := GetCallBack(fTestObj, @TTestObj.FiveArgArmStdFunction, 5, ctArmStd); - Assert.AreEqual(CallBack(1,2,3,4,5), 1*4+2*5+3); - DeleteCallBack(@CallBack); -end; - -procedure TMethodCallbackTest.TestFourArgArmStdFunction; -Var - CallBack : TFourArgArmStdFunction; -begin - CallBack := GetCallBack(fTestObj, @TTestObj.FourArgArmStdFunction, 4, ctArmStd); - Assert.AreEqual(CallBack(1,2,3,4), 1*3+2*4); - DeleteCallBack(@CallBack); -end; - -procedure TMethodCallbackTest.TestOfObjectCallBackArmStd; -var - ptr: pointer; - func: TTwoArgArmStdFunction; - cb: TMyFuncCallBack; -begin - cb:=fTestObj.TwoArgArmStdFunction; - ptr:=GetOfObjectCallBack(TCallBack(cb), 2, ctARMSTD); - - //---call method through pointer - func:=TTwoArgArmStdFunction(ptr); - - Assert.AreEqual(1, func('first arg', 'second arg')); - Assert.AreEqual('first arg', fTestObj.Argument1); - Assert.AreEqual('second arg', fTestObj.Argument2); -end; - -initialization - TDUnitX.RegisterTestFixture(TMethodCallBackTest); - -end. +(**************************************************************************) +(* *) +(* Module: Unit 'MethodCallbackTest' Copyright (c) 2021 *) +(* *) +(* Lucas Moura Belo - lmbelo *) +(* lucas.belo@live.com *) +(* BH, Brazil *) +(* *) +(* PyScripter *) +(* e-mail: pyscripter@gmail.com *) +(* *) +(* Project pages: https://github.com/Embarcadero/python4delphi *) +(* https://github.com/pyscripter/python4delphi *) +(**************************************************************************) +(* Functionality: Test unit for MethodCallback *) +(* *) +(* *) +(**************************************************************************) +(* 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 MethodCallBackTest; + +interface + +uses + DUnitX.TestFramework, + MethodCallback, + PythonLoad; + +implementation + +type + TTwoArgArmStdFunction = function (arg1, arg2: string): integer; + TThreeArgArmStdProcedure = procedure (arg1, arg2, arg3: string); + + TFourArgArmStdFunction = function(arg1, arg2, arg3, arg4: integer): integer; + TFiveArgArmStdFunction = function(arg1, arg2, arg3, arg4, arg5: integer): integer; + + TMyFuncCallback = function(arg1, arg2: string): integer of object; + TMyProcCallback = procedure (arg1, arg2, arg3: string) of object; + + TTestObj = class + public + Argument1: string; + Argument2: string; + Argument3: string; + function TwoArgArmStdFunction(arg1, arg2: string): integer; + procedure ThreeArgArmStdProcedure(arg1, arg2, arg3: string); + function FourArgArmStdFunction(arg1, arg2, arg3, arg4: integer): integer; + function FiveArgArmStdFunction(arg1, arg2, arg3, arg4, arg5: integer): integer; + end; + + [TestFixture] + TMethodCallbackTest = class + private + fTestObj: TTestObj; + public + [SetupFixture] + procedure SetupFixture; + [TearDownFixture] + procedure Teardown; + [Test] + procedure TestDeleteOnEmptyAllocator; + [Test] + procedure TestCallBackArmStd; + [Test] + procedure TestOfObjectCallBackArmStd; + [Test] + procedure TestDeleteCallBack; + [Test] + procedure TestFourArgArmStdFunction; + [Test] + procedure TestFiveArgArmStdFunction; + [Test] + procedure TestMemoryMgmt; + end; + +{ TTestObj } + +function TTestObj.FiveArgArmStdFunction(arg1, arg2, arg3, arg4, + arg5: integer): integer; +begin + Result := arg1 * arg4 + arg2 * arg5 + arg3; +end; + +function TTestObj.FourArgArmStdFunction(arg1, arg2, arg3, arg4: integer): integer; +begin + Result := arg1 * arg3 + arg2 * arg4; +end; + +procedure TTestObj.ThreeArgArmStdProcedure(arg1, arg2, arg3: string); +begin + Argument1:=arg1; + Argument2:=arg2; + Argument3:=arg3; +end; + +function TTestObj.TwoArgArmStdFunction(arg1, arg2: string): integer; +begin + Argument1:=arg1; + Argument2:=arg2; + result:=1; +end; + +{ TMethodCallbackTest } + +procedure TMethodCallbackTest.SetupFixture; +begin + fTestObj:=TTestObj.Create; +end; + +procedure TMethodCallbackTest.Teardown; +begin + fTestObj.Free; + FreeCallBacks; +end; + +procedure TMethodCallbackTest.TestMemoryMgmt; +const + AllocCount = {$IFDEF CPUARM} + {$IFDEF CPUARM32} + 31 + {$ELSE} + 46 + {$ENDIF CPUARM32} + {$ELSE} + {$IFDEF CPUX64} + {$IFDEF MSWINDOWS} + 51 + {$ELSE} + 88 + {$ENDIF} + {$ELSE} + 90 + {$ENDIF} + {$ENDIF}; +var + i: integer; + ptr: Pointer; +begin + //---Test the code-memory manager + + FreeCallBacks; + Assert.AreEqual(0, CodeMemPageCount); + + for i:=1 to AllocCount do + ptr:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 5, ctArmStd); + + // there should still be 1 page allocated + Assert.AreEqual(1, CodeMemPageCount); + + // get one callback more and we should have 2 pages + ptr:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 5, ctArmStd); + // getting CodeMemPageCount would crash as the next page pointer was overwritten by the + // last allocation + Assert.AreEqual(2, CodeMemPageCount); +end; + +procedure TMethodCallbackTest.TestCallBackArmStd; +var + ptr: pointer; + func: TTwoArgArmStdFunction; +begin + ptr:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); + + //---call method through pointer + func:=TTwoArgArmStdFunction(ptr); + + Assert.AreEqual(1, func('first arg', 'second arg')); + Assert.AreEqual(string('first arg'), fTestObj.Argument1); + Assert.AreEqual(string('second arg'), fTestObj.Argument2); +end; + +procedure TMethodCallbackTest.TestDeleteCallBack; +var + ptr1, ptr2, ptr3: Pointer; + proc: TThreeArgArmStdProcedure; + func: TTwoArgArmStdFunction; +begin + //---we create 3 callbacks and delete them. + // if there aren't any AV, we assume it works... + ptr1:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 3, ctArmStd); + ptr2:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); + DeleteCallBack(ptr1); + ptr1:=GetCallBack(fTestObj, @TTestObj.TwoArgArmStdFunction, 2, ctArmStd); + ptr3:=GetCallBack(fTestObj, @TTestObj.ThreeArgArmStdProcedure, 3, ctArmStd); + + func:=TTwoArgArmStdFunction(ptr1); + func('arg1', 'arg2'); + func:=TTwoArgArmStdFunction(ptr2); + func('arg1', 'arg2'); + proc:=TThreeArgArmStdProcedure(ptr3); + proc('arg1', 'arg2', 'arg3'); + + DeleteCallBack(ptr1); + DeleteCallBack(ptr2); + DeleteCallback(ptr3); + Assert.Pass; +end; + +procedure TMethodCallbackTest.TestDeleteOnEmptyAllocator; +var + ptr1 : Pointer; +begin + ptr1 := nil; + DeleteCallBack(ptr1); + Assert.Pass(); +end; + +procedure TMethodCallbackTest.TestFiveArgArmStdFunction; +Var + CallBack : TFiveArgArmStdFunction; +begin + CallBack := GetCallBack(fTestObj, @TTestObj.FiveArgArmStdFunction, 5, ctArmStd); + Assert.AreEqual(CallBack(1,2,3,4,5), 1*4+2*5+3); + DeleteCallBack(@CallBack); +end; + +procedure TMethodCallbackTest.TestFourArgArmStdFunction; +Var + CallBack : TFourArgArmStdFunction; +begin + CallBack := GetCallBack(fTestObj, @TTestObj.FourArgArmStdFunction, 4, ctArmStd); + Assert.AreEqual(CallBack(1,2,3,4), 1*3+2*4); + DeleteCallBack(@CallBack); +end; + +procedure TMethodCallbackTest.TestOfObjectCallBackArmStd; +var + ptr: pointer; + func: TTwoArgArmStdFunction; + cb: TMyFuncCallBack; +begin + cb:=fTestObj.TwoArgArmStdFunction; + ptr:=GetOfObjectCallBack(TCallBack(cb), 2, ctARMSTD); + + //---call method through pointer + func:=TTwoArgArmStdFunction(ptr); + + Assert.AreEqual(1, func('first arg', 'second arg')); + Assert.AreEqual('first arg', fTestObj.Argument1); + Assert.AreEqual('second arg', fTestObj.Argument2); +end; + +initialization + TDUnitX.RegisterTestFixture(TMethodCallBackTest); + +end. diff --git a/Tests/FMX/Android/P4DAndroidTest.dpr b/Tests/FMX/Android/P4DAndroidTest.dpr index c711bef2..a4b96caa 100644 --- a/Tests/FMX/Android/P4DAndroidTest.dpr +++ b/Tests/FMX/Android/P4DAndroidTest.dpr @@ -1,18 +1,18 @@ -program P4DAndroidTest; -uses - System.StartUpCopy, - FMX.Forms, - DUNitX.Loggers.MobileGUI, - MethodCallBackTest in 'MethodCallBackTest.pas', - NumberServicesTest in 'NumberServicesTest.pas', - PyEnvTest in 'PyEnvTest.pas', - PythonLoad in 'PythonLoad.pas', - VarPythTest in 'VarPythTest.pas', - WrapDelphiTest in 'WrapDelphiTest.pas'; - -{$R *.res} -begin - Application.Initialize; - Application.CreateForm(TMobileGUITestRunner, MobileGUITestRunner); - Application.Run; -end. +program P4DAndroidTest; +uses + System.StartUpCopy, + FMX.Forms, + DUNitX.Loggers.MobileGUI, + MethodCallBackTest in 'MethodCallBackTest.pas', + NumberServicesTest in 'NumberServicesTest.pas', + PyEnvTest in 'PyEnvTest.pas', + PythonLoad in 'PythonLoad.pas', + VarPythTest in 'VarPythTest.pas', + WrapDelphiTest in 'WrapDelphiTest.pas'; + +{$R *.res} +begin + Application.Initialize; + Application.CreateForm(TMobileGUITestRunner, MobileGUITestRunner); + Application.Run; +end. diff --git a/Tests/FMX/Android/PyEnvTest.pas b/Tests/FMX/Android/PyEnvTest.pas index d76098b2..1832098c 100644 --- a/Tests/FMX/Android/PyEnvTest.pas +++ b/Tests/FMX/Android/PyEnvTest.pas @@ -1,106 +1,106 @@ -(**************************************************************************) -(* *) -(* Module: Unit 'PyEnvTest' Copyright (c) 2021 *) -(* *) -(* Lucas Moura Belo - lmbelo *) -(* lucas.belo@live.com *) -(* BH, Brazil *) -(* *) -(* PyScripter *) -(* e-mail: pyscripter@gmail.com *) -(* *) -(* Project pages: https://github.com/Embarcadero/python4delphi *) -(* https://github.com/pyscripter/python4delphi *) -(**************************************************************************) -(* Functionality: Test unit for Python's environment *) -(* *) -(* *) -(**************************************************************************) -(* 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 PyEnvTest; - -interface - -uses - DUnitX.TestFramework, PythonEngine; - -type - [TestFixture] - TPyEnvTest = class - private - FPythonEngine: TPythonEngine; - public - [SetupFixture] - procedure SetupFixture; - [TearDownFixture] - procedure TearDownFixture; - [Test] - procedure TestLibFile(); - [Test] - procedure TestZipFile(); - [Test] - procedure TestExtraction(); - [Test] - procedure TestConfigure(); - end; - -implementation - -uses - PythonLoad; - -{ TPyEnvTest } - -procedure TPyEnvTest.SetupFixture; -begin - FPythonEngine := TPythonEngine.Create(nil); - FPythonEngine.Name := 'PythonEngine'; -end; - -procedure TPyEnvTest.TearDownFixture; -begin - FPythonEngine.Free(); -end; - -procedure TPyEnvTest.TestConfigure; -begin - TPythonLoad.Configure(FPythonEngine); - FPythonEngine.LoadDll; - Assert.IsTrue(FPythonEngine.IsHandleValid()); -end; - -procedure TPyEnvTest.TestExtraction; -begin - TPythonLoad.Extract(); - Assert.IsTrue(TPythonLoad.HasPythonDist()); -end; - -procedure TPyEnvTest.TestLibFile; -begin - Assert.IsTrue(TPythonLoad.HasPythonLib()); -end; - -procedure TPyEnvTest.TestZipFile; -begin - Assert.IsTrue(TPythonLoad.HasPythonZip()); -end; - -initialization - TDUnitX.RegisterTestFixture(TPyEnvTest); - -end. +(**************************************************************************) +(* *) +(* Module: Unit 'PyEnvTest' Copyright (c) 2021 *) +(* *) +(* Lucas Moura Belo - lmbelo *) +(* lucas.belo@live.com *) +(* BH, Brazil *) +(* *) +(* PyScripter *) +(* e-mail: pyscripter@gmail.com *) +(* *) +(* Project pages: https://github.com/Embarcadero/python4delphi *) +(* https://github.com/pyscripter/python4delphi *) +(**************************************************************************) +(* Functionality: Test unit for Python's environment *) +(* *) +(* *) +(**************************************************************************) +(* 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 PyEnvTest; + +interface + +uses + DUnitX.TestFramework, PythonEngine; + +type + [TestFixture] + TPyEnvTest = class + private + FPythonEngine: TPythonEngine; + public + [SetupFixture] + procedure SetupFixture; + [TearDownFixture] + procedure TearDownFixture; + [Test] + procedure TestLibFile(); + [Test] + procedure TestZipFile(); + [Test] + procedure TestExtraction(); + [Test] + procedure TestConfigure(); + end; + +implementation + +uses + PythonLoad; + +{ TPyEnvTest } + +procedure TPyEnvTest.SetupFixture; +begin + FPythonEngine := TPythonEngine.Create(nil); + FPythonEngine.Name := 'PythonEngine'; +end; + +procedure TPyEnvTest.TearDownFixture; +begin + FPythonEngine.Free(); +end; + +procedure TPyEnvTest.TestConfigure; +begin + TPythonLoad.Configure(FPythonEngine); + FPythonEngine.LoadDll; + Assert.IsTrue(FPythonEngine.IsHandleValid()); +end; + +procedure TPyEnvTest.TestExtraction; +begin + TPythonLoad.Extract(); + Assert.IsTrue(TPythonLoad.HasPythonDist()); +end; + +procedure TPyEnvTest.TestLibFile; +begin + Assert.IsTrue(TPythonLoad.HasPythonLib()); +end; + +procedure TPyEnvTest.TestZipFile; +begin + Assert.IsTrue(TPythonLoad.HasPythonZip()); +end; + +initialization + TDUnitX.RegisterTestFixture(TPyEnvTest); + +end. diff --git a/Tests/FMX/Android/VarPythTest.pas b/Tests/FMX/Android/VarPythTest.pas index ca1e0043..f26fce2b 100644 --- a/Tests/FMX/Android/VarPythTest.pas +++ b/Tests/FMX/Android/VarPythTest.pas @@ -1,1084 +1,1084 @@ -(**************************************************************************) -(* *) -(* Module: Unit 'VarPythTest' Copyright (c) 2021 *) -(* *) -(* Lucas Moura Belo - lmbelo *) -(* lucas.belo@live.com *) -(* BH, Brazil *) -(* *) -(* PyScripter *) -(* e-mail: pyscripter@gmail.com *) -(* *) -(* Project pages: https://github.com/Embarcadero/python4delphi *) -(* https://github.com/pyscripter/python4delphi *) -(**************************************************************************) -(* Functionality: Test unit for variants *) -(* *) -(* *) -(**************************************************************************) -(* 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 VarPythTest; - -interface - -uses - DUnitX.TestFramework, - PythonEngine, - PythonLoad; - -type - {$M+} - [TestFixture] - TVarPythTest = class - private - FPythonEngine: TPythonEngine; - public - [SetupFixture] - procedure SetupFixture; - [TearDownFixture] - procedure TearDownFixture; - [Test] - procedure TestIterator; - [Test] - procedure TestIntegers; - [Test] - procedure TestFloats; - [Test] - procedure TestStrings; - [Test] - procedure TestSequences; - [Test] - procedure TestMappings; - [Test] - procedure TestDates; - [Test] - procedure TestObjects; - end; - -implementation - -uses - SysUtils, StrUtils, - Variants, - VarPyth; - -{ TVarPythTest } - -procedure TVarPythTest.SetupFixture; -begin - FPythonEngine := TPythonEngine.Create(nil); - FPythonEngine.Name := 'PythonEngine'; - TPythonLoad.Configure(FPythonEngine); - FPythonEngine.LoadDll; -end; -procedure TVarPythTest.TearDownFixture; -begin - FPythonEngine.Free(); -end; -procedure TVarPythTest.TestDates; -var - a, b, _timeMod : Variant; - c : Variant; - _date, _date2 : TDateTime; - _year, _month, _day : Word; - _year2, _month2, _day2 : Word; - _hour, _min, _sec, _msec : Word; - _hour2, _min2, _sec2, _msec2 : Word; -begin - _timeMod := Import('time'); // get the time module of Python - _date := Now; - DecodeDate( _date, _year, _month, _day ); - DecodeTime( _date, _hour, _min, _sec, _msec ); - b := _timeMod.localtime(_timeMod.time()); // same as Now in Delphi - a := VarPythonCreate(_date); - Assert.IsTrue( a.Length = 9 ); - Assert.IsTrue( a.GetItem(0) = _year ); - Assert.IsTrue( a.GetItem(1) = _month ); - Assert.IsTrue( a.GetItem(2) = _day ); - Assert.IsTrue( a.GetItem(3) = _hour ); - Assert.IsTrue( a.GetItem(4) = _min ); - Assert.IsTrue( a.GetItem(5) = _sec ); - Assert.IsTrue( b.Length = 9 ); - Assert.IsTrue( b.GetItem(0) = a.GetItem(0) ); - Assert.IsTrue( b.GetItem(1) = a.GetItem(1) ); - Assert.IsTrue( b.GetItem(2) = a.GetItem(2) ); - Assert.IsTrue( b.GetItem(3) = a.GetItem(3) ); - Assert.IsTrue( b.GetItem(4) = a.GetItem(4) ); - Assert.IsTrue( b.GetItem(5) = a.GetItem(5) ); - Assert.IsTrue( b.GetItem(6) = a.GetItem(6) ); - Assert.IsTrue( b.GetItem(7) = a.GetItem(7) ); - // don't test the 9th item of the tuple, because it's the daylight saving, - // and it's not computed by the Python for Delphi. - //Assert.IsTrue( b.GetItem(8) = a.GetItem(8) ); - _date2 := b; - DecodeDate( _date2, _year2, _month2, _day2 ); - DecodeTime( _date2, _hour2, _min2, _sec2, _msec2 ); - Assert.IsTrue( _year2 = _year ); - Assert.IsTrue( _month2 = _month ); - Assert.IsTrue( _day2 = _day ); - Assert.IsTrue( _hour2 = _hour ); - Assert.IsTrue( _min2 = _min ); - Assert.IsTrue( _sec2 = _sec ); - // test new datetime module - _timeMod := Import('datetime'); // get the datetime module of Python - //or _timeMod := DatetimeModule; // get the datetime module of Python - a := _timeMod.datetime(2002, 12, 30, 22, 15, 38, 827738); - Assert.IsTrue(VarIsPythonDateTime(a)); - Assert.IsTrue(VarIsPythonDate(a)); - Assert.IsTrue(not VarIsPythonTime(a)); - Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); - Assert.IsTrue(a.year = 2002); - Assert.IsTrue(a.month = 12); - Assert.IsTrue(a.day = 30); - Assert.IsTrue(a.hour = 22); - Assert.IsTrue(a.minute = 15); - Assert.IsTrue(a.second = 38); - Assert.IsTrue(a.microsecond = 827738); - _date := a; - DecodeDate( _date, _year, _month, _day ); - DecodeTime( _date, _hour, _min, _sec, _msec ); - Assert.IsTrue(_year = 2002); - Assert.IsTrue(_month = 12); - Assert.IsTrue(_day = 30); - Assert.IsTrue(_hour = 22); - Assert.IsTrue(_min = 15); - Assert.IsTrue(_sec = 38); - Assert.IsTrue(_msec = 827738 div 1000); - a := _timeMod.date(2002, 12, 30); - Assert.IsTrue(not VarIsPythonDateTime(a)); - Assert.IsTrue(VarIsPythonDate(a)); - Assert.IsTrue(not VarIsPythonTime(a)); - Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); - _date := a; - DecodeDate( _date, _year, _month, _day ); - DecodeTime( _date, _hour, _min, _sec, _msec ); - Assert.IsTrue(_year = 2002); - Assert.IsTrue(_month = 12); - Assert.IsTrue(_day = 30); - Assert.IsTrue(_hour = 0); - Assert.IsTrue(_min = 0); - Assert.IsTrue(_sec = 0); - Assert.IsTrue(_msec = 0); - Assert.IsTrue(a.year = 2002); - Assert.IsTrue(a.month = 12); - Assert.IsTrue(a.day = 30); - a := _timeMod.time(22, 15, 38, 827738); - Assert.IsTrue(not VarIsPythonDateTime(a)); - Assert.IsTrue(not VarIsPythonDate(a)); - Assert.IsTrue(VarIsPythonTime(a)); - Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); - Assert.IsTrue(a.hour = 22); - Assert.IsTrue(a.minute = 15); - Assert.IsTrue(a.second = 38); - Assert.IsTrue(a.microsecond = 827738); - _date := a; - DecodeTime( _date, _hour, _min, _sec, _msec ); - Assert.IsTrue(_hour = 22); - Assert.IsTrue(_min = 15); - Assert.IsTrue(_sec = 38); - Assert.IsTrue(_msec = 827738 div 1000); - a := DatetimeModule.datetime(2002, 12, 30, 22, 15, 38, 827738); - b := _timeMod.datetime(2002, 12, 30, 22, 16, 38, 827738); - c := b - a; - Assert.IsTrue(VarIsPythonDateTimeDelta(c)); - Assert.IsTrue(c.days = 0); - Assert.IsTrue(c.seconds = 60); - Assert.IsTrue(c.microseconds = 0); - _date := c; - Assert.IsTrue(Trunc(_date)=0); - DecodeTime( _date, _hour, _min, _sec, _msec ); - Assert.IsTrue(_hour = 0); - Assert.IsTrue(_min = 1); - Assert.IsTrue(_sec = 0); - Assert.IsTrue(_msec = 0); - c := a - b; - Assert.IsTrue(VarIsPythonDateTimeDelta(c)); - Assert.IsTrue(c.days = -1); - Assert.IsTrue(c.seconds = 86340); - Assert.IsTrue(c.microseconds = 0); - _date := c; - Assert.IsTrue(Trunc(_date)=0); - Assert.IsTrue(_date<0); - DecodeTime( _date, _hour, _min, _sec, _msec ); - Assert.IsTrue(_hour = 0); - Assert.IsTrue(_min = 1); - Assert.IsTrue(_sec = 0); - Assert.IsTrue(_msec = 0); - c := a + (b-a); - Assert.IsTrue(VarIsPythonDateTime(c)); - Assert.IsTrue(c = b); - Assert.IsTrue(c <> a); - Assert.IsTrue(a < b); - Assert.IsTrue(b > a); - GetPythonEngine.DatetimeConversionMode := dcmToDatetime; - try - _date := EncodeDate(2003, 01, 28) + EncodeTime(12, 22, 33, 450); - a := VarPythonCreate(_date); - Assert.IsTrue(VarIsPythonDateTime(c)); - _date2 := a; - DecodeDate( _date, _year, _month, _day ); - DecodeTime( _date, _hour, _min, _sec, _msec ); - DecodeDate( _date2, _year2, _month2, _day2 ); - DecodeTime( _date2, _hour2, _min2, _sec2, _msec2 ); - Assert.IsTrue( _year2 = _year ); - Assert.IsTrue( _month2 = _month ); - Assert.IsTrue( _day2 = _day ); - Assert.IsTrue( _hour2 = _hour ); - Assert.IsTrue( _min2 = _min ); - Assert.IsTrue( _sec2 = _sec ); - Assert.IsTrue( _msec2 = _msec ); - Assert.IsTrue(a.year = 2003); - Assert.IsTrue(a.month = 01); - Assert.IsTrue(a.day = 28); - Assert.IsTrue(a.hour = 12); - Assert.IsTrue(a.minute = 22); - Assert.IsTrue(a.second = 33); - Assert.IsTrue(a.microsecond = 450000); - finally - GetPythonEngine.DatetimeConversionMode := dcmToTuple; - end; -end; -procedure TVarPythTest.TestFloats; -var - a, b, c : Variant; - dbl_a, dbl_b, dbl_c : Double; - int : Integer; -begin - // initialize the operands - dbl_a := 2.5; - a := VarPythonCreate(dbl_a); - Assert.IsTrue(VarIsPython(a)); - Assert.IsTrue(VarIsPythonNumber(a)); - Assert.IsTrue(VarIsPythonFloat(a)); - Assert.IsTrue(Double(a) = 2.5); - dbl_b := 3.2; - b := VarPythonCreate(dbl_b); - Assert.IsTrue(VarIsPython(b)); - Assert.IsTrue(VarIsPythonNumber(b)); - Assert.IsTrue(VarIsPythonFloat(b)); - Assert.IsTrue(Double(b) = dbl_b); // note that Assert.IsTrue(Double(b) = 3.2) fails. - // arithmetic operations - //---------------------- - // addition - c := a + b; - // check result of operation - Assert.IsTrue( Double(c) = (dbl_a + dbl_b) ); - // check that operation did not change the content of operands. - Assert.IsTrue(Double(a) = dbl_a); - Assert.IsTrue(Double(b) = dbl_b); - // now with a litteral - c := a + b + 1; - Assert.IsTrue( Double(c) = (dbl_a+dbl_b+1) ); - c := a + 1 + b; - Assert.IsTrue( Double(c) = (dbl_a+1+dbl_b) ); - c := 1 + a + b; - Assert.IsTrue( Double(c) = (1+dbl_a+dbl_b) ); - // substraction - c := b - a; - Assert.IsTrue( Double(c) = (dbl_b - dbl_a) ); - // now with a litteral - c := b - a - 1; - Assert.IsTrue( Double(c) = (dbl_b-dbl_a-1) ); - c := b - 1 - a; - Assert.IsTrue( Double(c) = (dbl_b-1-dbl_a) ); - c := 1 - b - a; - Assert.IsTrue( Double(c) = (1-dbl_b-dbl_a) ); - // multiplication - c := a * b; - dbl_c := dbl_a * dbl_b; - Assert.IsTrue( Double(c) = dbl_c ); - // now with a litteral - c := a * b * 2; - dbl_c := dbl_a * dbl_b * 2; - Assert.IsTrue( Double(c) = dbl_c ); - c := a * 2 * b; - dbl_c := dbl_a * 2 * dbl_b; - Assert.IsTrue( Double(c) = dbl_c ); - c := 2 * a * b; - dbl_c := 2 * dbl_a * dbl_b; - Assert.IsTrue( Double(c) = dbl_c ); - // division: in Python a division between 2 integers is the same as the integer division - c := b / a; - dbl_c := dbl_b / dbl_a; - Assert.IsTrue( Double(c) = dbl_c ); - // negation - c := -a; - Assert.IsTrue( Double(c) = -dbl_a ); - // comparisons - //------------ - // equal - c := a = b; - Assert.IsTrue(c = False); - c := a = a; - Assert.IsTrue(c = True); - Assert.IsTrue( a = dbl_a); - // not equal - c := a <> b; - Assert.IsTrue(c = True); - Assert.IsTrue( not (c = b) ); - c := a <> a; - Assert.IsTrue(c = False); - Assert.IsTrue( a = dbl_a); - // greater than - c := a > b; Assert.IsTrue(c = False); - c := b > a; Assert.IsTrue(c = True); - Assert.IsTrue( a > (dbl_a-1)); - // greater or equal than - c := a >= b; Assert.IsTrue(c = False); - c := b >= a; Assert.IsTrue(c = True); - c := a >= a; Assert.IsTrue(c = True); - Assert.IsTrue( a >= dbl_a ); - // less than - c := a < b; Assert.IsTrue(c = True); - c := b < a; Assert.IsTrue(c = False); - Assert.IsTrue( a < dbl_b); - // less or equal than - c := a <= b; Assert.IsTrue(c = True); - c := b <= a; Assert.IsTrue(c = False); - c := a <= a; Assert.IsTrue(c = True); - Assert.IsTrue( a <= dbl_a); - // parenthesis - c := a * ((a * b) / b); - dbl_c := dbl_a * ((dbl_a * dbl_b) / dbl_b); - Assert.IsTrue( c = dbl_c ); - // copy - c := a; - Assert.IsTrue( c = a); - Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. - // casts - int := a; - Assert.IsTrue(int = 2); -end; -procedure TVarPythTest.TestIntegers; -var - a, b, c : Variant; - big : Int64; -begin - // initialize the operands - a := VarPythonCreate(2); - Assert.IsTrue(VarIsPython(a)); - Assert.IsTrue(VarIsPythonNumber(a)); - Assert.IsTrue(VarIsPythonInteger(a)); - Assert.IsTrue(Integer(a) = 2); - b := VarPythonCreate(3); - Assert.IsTrue(VarIsPython(b)); - Assert.IsTrue(VarIsPythonNumber(b)); - Assert.IsTrue(VarIsPythonInteger(b)); - Assert.IsTrue(Integer(b) = 3); - // arithmetic operations - //---------------------- - // addition - c := a + b; - // check result of operation - Assert.IsTrue( Integer(c) = 5 ); - // check that operation did not change the content of operands. - Assert.IsTrue(Integer(a) = 2); - Assert.IsTrue(Integer(b) = 3); - // now with a litteral - c := a + b + 1; - Assert.IsTrue( Integer(c) = 6 ); - c := a + 1 + b; - Assert.IsTrue( Integer(c) = 6 ); - c := 1 + a + b; - Assert.IsTrue( Integer(c) = 6 ); - // substraction - c := b - a; - Assert.IsTrue( Integer(c) = 1 ); - // now with a litteral - c := b - a - 1; - Assert.IsTrue( Integer(c) = 0 ); - c := b - 1 - a; - Assert.IsTrue( Integer(c) = 0 ); - c := 1 - b - a; - Assert.IsTrue( Integer(c) = -4 ); - // multiplication - c := a * b; - Assert.IsTrue( Integer(c) = 6 ); - // now with a litteral - c := a * b * 2; - Assert.IsTrue( Integer(c) = 12 ); - c := a * 2 * b; - Assert.IsTrue( Integer(c) = 12 ); - c := 2 * a * b; - Assert.IsTrue( Integer(c) = 12 ); - // integer division - c := b div a; - Assert.IsTrue( Integer(c) = 1 ); - // division: in Python a division between 2 integers is the same as the integer division - c := b / a; - Assert.IsTrue( c = 1.5 ); - Assert.IsTrue( Integer(c) = 2 ); - // modulus - c := b mod a; - Assert.IsTrue( Integer(c) = 1 ); - c := BuiltinModule.divmod(b, a); // this returns a tuple whose first item is the result of the division, - // and second item the modulo. - if VarIsPythonSequence(c) and (c.Length = 2) then - begin - Assert.IsTrue(Integer(c.GetItem(0)) = 1); // division - Assert.IsTrue(Integer(c.GetItem(1)) = 1); // modulo - end; - // power - c := BuiltinModule.pow(a, b); - Assert.IsTrue(c = 8); - // negation - c := -a; - Assert.IsTrue( Integer(c) = -2 ); - // logical operations - //------------------ - // inverse - c := not a; // in python it would be: c = ~2 - Assert.IsTrue( Integer(c) = -3 ); - // shift left (<<) - c := a shl b; - Assert.IsTrue( Integer(c) = 16 ); - c := a shl 1; - Assert.IsTrue( Integer(c) = 4 ); - // shift right (>>) - c := a shl b; - c := c shr b; - Assert.IsTrue( Integer(c) = Integer(a) ); - c := b shr 1; - Assert.IsTrue( Integer(c) = 1 ); - // and - c := a and (a*5); - Assert.IsTrue( Integer(c) = Integer(a) ); - c := a and 6; - Assert.IsTrue( Integer(c) = Integer(a) ); - // or - c := a or b; - Assert.IsTrue( Integer(c) = 3 ); - c := a or 3; - Assert.IsTrue( Integer(c) = 3 ); - // xor - c := a xor b; - Assert.IsTrue( Integer(c) = 1 ); - c := a xor 3; - Assert.IsTrue( Integer(c) = 1 ); - // comparisons - //------------ - // equal - c := a = b; - Assert.IsTrue(c = False); - c := a = a; - Assert.IsTrue(c = True); - Assert.IsTrue( a = 2); - // not equal - c := a <> b; - Assert.IsTrue(c = True); - Assert.IsTrue( not (c = b) ); - c := a <> a; - Assert.IsTrue(c = False); - Assert.IsTrue( a = 2); - // greater than - c := a > b; Assert.IsTrue(c = False); - c := b > a; Assert.IsTrue(c = True); - Assert.IsTrue( a > 1); - // greater or equal than - c := a >= b; Assert.IsTrue(c = False); - c := b >= a; Assert.IsTrue(c = True); - c := a >= a; Assert.IsTrue(c = True); - Assert.IsTrue( a >= 2 ); - // less than - c := a < b; Assert.IsTrue(c = True); - c := b < a; Assert.IsTrue(c = False); - Assert.IsTrue( a < 6); - // less or equal than - c := a <= b; Assert.IsTrue(c = True); - c := b <= a; Assert.IsTrue(c = False); - c := a <= a; Assert.IsTrue(c = True); - Assert.IsTrue( a <= 2); - // parenthesis - c := a * ((a * b) div b); - Assert.IsTrue( c = a*2 ); - // copy - c := a; - Assert.IsTrue( c = a); - Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. - // test long long (Int64) - big := Int64(MaxInt)*4; - b := VarPythonCreate(big); - Assert.IsTrue( b = big ); - Assert.IsTrue( b <> big+1 ); - Assert.IsTrue( b > MaxInt ); - Assert.IsTrue( MaxInt < b ); - Assert.IsTrue( b+1 = big+1 ); - Assert.IsTrue( b*2 = big*2 ); - Assert.IsTrue( b div 2 = big div 2 ); - c := VarPythonCreate(True); - Assert.IsTrue(VarIsBool(c)); - Assert.IsTrue(VarIsTrue(c)); - c := VarPythonCreate(False); - Assert.IsTrue(VarIsBool(c)); - Assert.IsTrue(not VarIsTrue(c)); -end; -procedure TVarPythTest.TestIterator; -var - Module: Variant; - Count: integer; -begin - Count := 0; - for Module in VarPyIterate(SysModule.modules) do begin - Count := Count + 1; - Log(Module); - end; - Assert.IsTrue(Count = len(SysModule.modules)); -end; -procedure TVarPythTest.TestMappings; -var - a, b, c, keys, values : Variant; -begin - // initialize the operands - a := NewPythonDict; - Assert.IsTrue(VarIsPython(a)); - Assert.IsTrue(VarIsPythonMapping(a)); - Assert.IsTrue(VarIsPythonDict(a)); - // There is a bug in D2010 in which Char('a') gets translated to integer parameter - a.SetItem( string('a'), 1 ); - a.SetItem( string('b'), 2 ); - a.SetItem( string('c'), 3 ); - Assert.IsTrue(a.Length = 3); // this is a special property that does the same as: len(a) in Python - Assert.IsTrue(a.Length() = 3); // this is a special method that does the same as the special property - Assert.IsTrue(len(a) = 3); - Assert.IsTrue(a.GetItem(string('a')) = 1); // this is a special method that lets you do the same as: a[0] in Python - Assert.IsTrue(a.GetItem(string('b')) = 2); - Assert.IsTrue(a.GetItem(string('c')) = 3); - - - b := NewPythonDict; - Assert.IsTrue(VarIsPython(b)); - Assert.IsTrue(VarIsPythonMapping(b)); - Assert.IsTrue(VarIsPythonDict(b)); - b.SetItem( string('d'), 4 ); - b.SetItem( string('e'), 5 ); - b.SetItem( string('f'), 6 ); - Assert.IsTrue(b.Length = 3); - Assert.IsTrue(b.Length() = 3); - Assert.IsTrue(len(b) = 3); - Assert.IsTrue(b.GetItem(string('d')) = 4); - Assert.IsTrue(b.GetItem(string('e')) = 5); - Assert.IsTrue(b.GetItem(string('f')) = 6); - - // copy - c := a; - Assert.IsTrue( c = a); - Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. - - // dict methods - Assert.IsTrue( Boolean(a.__contains__(string('a'))) ); - Assert.IsTrue( not Boolean(a.__contains__('abc')) ); - keys := BuiltinModule.list(a.keys()); - keys.sort(); - Assert.IsTrue( keys = VarPythonCreate(VarArrayOf(['a', 'b', 'c']))); - values := BuiltinModule.list(a.values()); - values.sort(); - Assert.IsTrue( values = VarPythonCreate(VarArrayOf([1, 2, 3]))); - c := a; - c.DeleteItem(string('a')); - Assert.IsTrue( not Boolean(c.__contains__(string('a'))) ); - - // test string values - a := NewPythonDict; - a.SetItem( string('a'), 'Hello'); - a.SetItem( string('b'), 'World!'); - a.SetItem( string('c'), ''); - Assert.IsTrue(a.GetItem(string('a')) = 'Hello'); - Assert.IsTrue(a.GetItem(string('b')) = 'World!'); - Assert.IsTrue(a.GetItem(string('c')) = ''); -end; - -procedure TVarPythTest.TestObjects; -var - _main, f, a, b, c : Variant; - val : Integer; - _str : String; -const - Script = - 'class XYZ(object):' + sLineBreak + - ' pass' + sLineBreak + - '' + sLineBreak + - 'class Foo:' + sLineBreak + - ' def __init__(Self, Value=0):' + sLineBreak + - ' Self.Value = Value' + sLineBreak + - ' def __del__(Self):' + sLineBreak + - ' print("delete", Self)' + sLineBreak + - ' def __add__(self, other):' + sLineBreak + - ' return Foo(self.Value + other.Value)' + sLineBreak + - ' def Inc(Self, AValue = 1):' + sLineBreak + - ' Self.Value = Self.Value + AValue' + sLineBreak + - ' def GetSelf(Self):' + sLineBreak + - ' return Self' + sLineBreak + - ' def GetValue(Self):' + sLineBreak + - ' return Self.Value' + sLineBreak + - ' def SetABC(Self, A, B, C):' + sLineBreak + - ' Self.A = A' + sLineBreak + - ' Self.B = B' + sLineBreak + - ' Self.C = C' + sLineBreak + - ' def Add(Self, AFooInst):' + sLineBreak + - ' Self.Value = Self.Value + AFooInst.Value' + sLineBreak + - 'class Bar(Foo):' + sLineBreak + - ' def Inc(Self, AValue = 1):' + sLineBreak + - ' Self.Value = Self.Value - AValue' + sLineBreak + - 'def Add(a, b):' + sLineBreak + - ' return a + b' + sLineBreak + - 'def MakeList(a, b, c, d):' + sLineBreak + - ' return [a, b, c, d]' + sLineBreak + - '' + sLineBreak + - 'f = Foo()' + sLineBreak + - 'print("Created", f)' + sLineBreak + - 'f.Inc()' + sLineBreak + - 'f.Inc(2)' + sLineBreak + - 'b = Bar()' + sLineBreak + - 'b.Inc()' + sLineBreak + - 'b.Inc(2)'; - -begin - FPythonEngine.ExecString(Script); - _main := MainModule; - Assert.IsTrue( VarIsPythonModule(_main) ); - Assert.IsTrue( VarIsPythonModule(SysModule) ); - Assert.IsTrue( Import('sys').version = SysModule.version ); - Log(SysModule.version); - Assert.IsTrue( Boolean(SysModule.modules.Contains(GetPythonEngine.ExecModule)) ); // if __main__ in sys.modules - Assert.IsTrue( VarIsSameType(_main, SysModule) ); - Assert.IsTrue( _type(_main).__name__ = 'module'); - Assert.IsTrue( BuiltinModule.type(_main).__name__ = 'module'); - - Assert.IsTrue( VarIsPythonClass(_main.Foo) ); - Assert.IsTrue( VarIsPythonClass(_main.Bar) ); - Assert.IsTrue( VarIsPythonClass(_main.XYZ) ); - Assert.IsTrue( not VarIsPythonClass(_main.Foo.__add__) ); - Assert.IsTrue( not VarIsPythonClass(_main.f) ); - Assert.IsTrue( VarIsPythonCallable(_main.Foo) ); - Assert.IsTrue( VarIsPythonCallable(_main.Foo) ); - Assert.IsTrue( VarIsTrue(BuiltinModule.callable(_main.Foo)) ); - Assert.IsTrue( VarIsSame(_main.f.__class__, _main.Foo) ); - Assert.IsTrue( VarIsPythonMethod(_main.f.Inc) ); - Assert.IsTrue( VarIsPythonCallable(_main.f.Inc) ); - Assert.IsTrue( VarIsTrue(BuiltinModule.callable(_main.f.Inc)) ); - Assert.IsTrue( VarIsPythonFunction(_main.Add) ); - Assert.IsTrue( VarIsPythonCallable(_main.Add) ); - Assert.IsTrue( VarIsInstanceOf(_main.f, _main.Foo) ); - Assert.IsTrue( VarIsTrue(BuiltinModule.isinstance(_main.f, _main.Foo)) ); - Assert.IsTrue( VarIsSubclassOf(_main.Bar, _main.Foo) ); - Assert.IsTrue( VarIsTrue(BuiltinModule.issubclass(_main.Bar, _main.Foo)) ); - Assert.IsTrue( not VarIsSubclassOf(_main.Foo, _main.Bar) ); - Assert.IsTrue( VarIsInstanceOf(_main.b, _main.Foo) ); - Assert.IsTrue( not VarIsInstanceOf(_main.f, _main.Bar) ); - Assert.IsTrue( VarIsTrue( BuiltinModule.vars(_main).__contains__(string('f')) ) ); - Assert.IsTrue( VarIsTrue( BuiltinModule.dir(_main).Contains(string('f')) ) ); - - f := _main.Foo(); // new instance of class Foo - Log('Instanciate class Foo: ' + f); - f.Inc(); // call a method without any arg, because there's a default arg. - f.Inc(2); // call a method with one arg, overriding the default arg. - Assert.IsTrue( VarIsPythonNumber(f.Value) ); - Assert.IsTrue( VarIsPythonInteger(f.Value) ); - Assert.IsTrue( f.Value = _main.f.Value ); // compare the result with what we did in the script - Assert.IsTrue( f.GetValue() = _main.f.GetValue() ); // compare the result with what we did in the script - Assert.IsTrue( VarIsPython( f.GetSelf() ) ); - Assert.IsTrue( VarIsSame( f.GetSelf(), f ) ); - Assert.IsTrue( BuiltinModule.getattr(f, 'Value') = f.Value ); - // python (+) operator overloading - a := _main.Foo(10); - b := _main.Foo(5); - c := a + b; - Assert.IsTrue(a.Value = 10); - Assert.IsTrue(b.Value = 5); - Assert.IsTrue(c.Value = 15); - Log('Test -> a, b, c : ' + a.Value + ', ' + b.Value + ', ' + c.Value); - // cascading calls - Assert.IsTrue( f.GetSelf().GetSelf().GetSelf().GetSelf().GetValue() = _main.f.GetValue() ); - Assert.IsTrue( Boolean(f.__dict__.__contains__('Value')) ); - Assert.IsTrue( VarIsTrue( BuiltinModule.hasattr(f, 'Value') ) ); - _str := 'Value'; - Assert.IsTrue( Boolean(f.__dict__.__contains__(_str)) ); // check with a string var - Assert.IsTrue( Boolean( BuiltinModule.hasattr(f, _str) ) ); - val := f.Value; - f.Add(f); // passing itself as an argument - Assert.IsTrue( f.Value = val*2 ); - // check param order - f.SetABC(1, 2, 3); - Assert.IsTrue(f.A = 1); - Assert.IsTrue(f.B = 2); - Assert.IsTrue(f.C = 3); - // add a property to an instance - f.Z := 99; - Assert.IsTrue(f.Z = 99); - // add a var to a module - _main.Z := 99; - Assert.IsTrue(_main.Z = 99); - // check none - Assert.IsTrue( VarIsNone(None) ); - Assert.IsTrue( VarIsNone(VarPythonCreate([1, Null, 3]).GetItem(1)) ); // Null is casted to None - Assert.IsTrue( VarIsNone(VarPythonCreate([1, None, 3]).GetItem(1)) ); - Assert.IsTrue( VarIsNone(f.Inc()) ); - Assert.IsTrue( f.Inc() = None ); - Assert.IsTrue( not Boolean(None) ); // if not None: - Assert.IsTrue( not VarIsTrue(None) ); // if not None: - Assert.IsTrue( Boolean(f) ); // if f: - Assert.IsTrue( VarIsTrue(f) ); // if f: - - // call a function - Assert.IsTrue( _main.Add(2, 2) = 4 ); - // call a function with a mix of regular parameters and named parameters - f := _main.MakeList(1, 2, 3, 4); - Assert.IsTrue(VarIsPythonList(f)); - Assert.IsTrue(f.Length = 4); - Assert.IsTrue(f.GetItem(0) = 1); - Assert.IsTrue(f.GetItem(1) = 2); - Assert.IsTrue(f.GetItem(2) = 3); - Assert.IsTrue(f.GetItem(3) = 4); - f := _main.MakeList(1, d:=3, c:=4, b:=2); - Assert.IsTrue(VarIsPythonList(f)); - Assert.IsTrue(f.Length = 4); - Assert.IsTrue(f.GetItem(0) = 1); - Assert.IsTrue(f.GetItem(1) = 2); - Assert.IsTrue(f.GetItem(2) = 4); - Assert.IsTrue(f.GetItem(3) = 3); - f := _main.MakeList(1, 2, d:= 3, c:=4); - Assert.IsTrue(VarIsPythonList(f)); - Assert.IsTrue(f.Length = 4); - Assert.IsTrue(f.GetItem(0) = 1); - Assert.IsTrue(f.GetItem(1) = 2); - Assert.IsTrue(f.GetItem(2) = 4); - Assert.IsTrue(f.GetItem(3) = 3); - f := _main.MakeList(1, 2, 3, d:=4); - Assert.IsTrue(VarIsPythonList(f)); - Assert.IsTrue(f.Length = 4); - Assert.IsTrue(f.GetItem(0) = 1); - Assert.IsTrue(f.GetItem(1) = 2); - Assert.IsTrue(f.GetItem(2) = 3); - Assert.IsTrue(f.GetItem(3) = 4); - f := _main.MakeList(b:=1, a:=2, d:= 3, c:=4); - Assert.IsTrue(VarIsPythonList(f)); - Assert.IsTrue(f.Length = 4); - Assert.IsTrue(f.GetItem(0) = 2); - Assert.IsTrue(f.GetItem(1) = 1); - Assert.IsTrue(f.GetItem(2) = 4); - Assert.IsTrue(f.GetItem(3) = 3); -end; -procedure TVarPythTest.TestSequences; -var - a, b, c : Variant; - iter : Variant; - cpt : Integer; -begin - // initialize the operands - // you can either use the overloaded function with an array of const - // or use the VarArrayOf function that returns an array of variants that will - // be casted to a Python list. - a := VarPythonCreate([1, 2, 3]); - Assert.IsTrue(VarIsPython(a)); - Assert.IsTrue(VarIsPythonSequence(a)); - Assert.IsTrue(VarIsPythonList(a)); - Assert.IsTrue(a.Length = 3); // this is a special property that does the same as: len(a) in Python - Assert.IsTrue(a.Length() = 3); // this is a special method that does the same as the special property - Assert.IsTrue(len(a) = 3); - Assert.IsTrue(a.GetItem(0) = 1); // this is a special method that lets you do the same as: a[0] in Python - Assert.IsTrue(a.GetItem(1) = 2); - Assert.IsTrue(a.GetItem(2) = 3); - Assert.IsTrue(string(a) = '[1, 2, 3]'); - // indexed access using brackets when the sequence is a property of an object (module, instance...) - MainModule.a := VarPythonCreate([1, 2, 3]); - Assert.IsTrue(MainModule.a[1] = 2); - - b := VarPythonCreate(VarArrayOf([4, 5, 6])); - Assert.IsTrue(VarIsPython(b)); - Assert.IsTrue(VarIsPythonSequence(b)); - Assert.IsTrue(VarIsPythonList(b)); - Assert.IsTrue(b.Length = 3); - Assert.IsTrue(b.Length() = 3); - Assert.IsTrue(len(b) = 3); - Assert.IsTrue(b.GetItem(0) = 4); - Assert.IsTrue(b.GetItem(1) = 5); - Assert.IsTrue(b.GetItem(2) = 6); - Assert.IsTrue(string(b) = '[4, 5, 6]'); - // concatenation - c := a + b; - // check result of operation - Assert.IsTrue(string(c) = '[1, 2, 3, 4, 5, 6]'); - // check that operation did not change the content of operands. - Assert.IsTrue(string(a) = '[1, 2, 3]'); - Assert.IsTrue(string(b) = '[4, 5, 6]'); - // now with a litteral: note that with D6 SP1, we can't concatenate a custom variant with an var array of variants - c := a + b + VarPythonCreate(['Hello', 'World!', 3.14]); - Assert.IsTrue( string(c) = '[1, 2, 3, 4, 5, 6, ''Hello'', ''World!'', 3.14]' ); - c := a + VarPythonCreate(['Hello', 'World!', 3.14]) + b; - Assert.IsTrue( string(c) = '[1, 2, 3, ''Hello'', ''World!'', 3.14, 4, 5, 6]' ); - c := VarPythonCreate(['Hello', 'World!', 3.14]) + a + b; - Assert.IsTrue( string(c) = '[''Hello'', ''World!'', 3.14, 1, 2, 3, 4, 5, 6]' ); - - // multiplication - c := a * 3; // in Python the multiplication of sequence concatenates n times the sequence - Assert.IsTrue( string(c) = '[1, 2, 3, 1, 2, 3, 1, 2, 3]' ); - - // comparisons - //------------ - - // equal - c := a = b; - Assert.IsTrue(c = False); - c := a = a; - Assert.IsTrue(c = True); - Assert.IsTrue( string(a) = '[1, 2, 3]'); - - // not equal - c := a <> b; - Assert.IsTrue(c = True); - Assert.IsTrue( not (c = b) ); - c := a <> a; - Assert.IsTrue(c = False); - Assert.IsTrue( string(a) = '[1, 2, 3]'); - - // greater than - c := a > b; Assert.IsTrue(c = False); - c := b > a; Assert.IsTrue(c = True); - Assert.IsTrue( string(a) > '[1, 1, 1]'); - - // greater or equal than - c := a >= b; Assert.IsTrue(c = False); - c := b >= a; Assert.IsTrue(c = True); - c := a >= a; Assert.IsTrue(c = True); - Assert.IsTrue( string(a) >= '[1, 2, 3]' ); - - // less than - c := a < b; Assert.IsTrue(c = True); - c := b < a; Assert.IsTrue(c = False); - Assert.IsTrue( string(a) < '[4, 4, 4]'); - - // less or equal than - c := a <= b; Assert.IsTrue(c = True); - c := b <= a; Assert.IsTrue(c = False); - c := a <= a; Assert.IsTrue(c = True); - Assert.IsTrue( string(a) <= '[1, 2, 3]'); - - // copy - c := a; - Assert.IsTrue( c = a); - Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. - - // sequence methods: - c := b + a; - c.sort(); // note that you must you the parenthesis to distinguish the call between a method or a property. - Assert.IsTrue( c = (a+b) ); - - c := NewPythonList; // facility for building sequences - Assert.IsTrue( not VarIsTrue(c) ); // c is false because it's an empty collection - c.append(1); - c.append(2); - c.append(3); - Assert.IsTrue( VarIsTrue(c) ); // c is true because it's not an empty collection - Assert.IsTrue(c = a); - Assert.IsTrue( c.pop() = 3 ); - Assert.IsTrue( string(c) = '[1, 2]'); - - c := NewPythonList(3); // facility for building sequences - c.SetItem(0, 1); - c.SetItem(1, 2); - c.SetItem(2, 3); - Assert.IsTrue(c = a); - c.DeleteItem(1); - Assert.IsTrue(c = VarPythonCreate([1,3])); - - Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, 3) = VarPythonCreate([2,3])); // same as x = [1,2,3,4]; x[1:3] - Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, Ellipsis) = VarPythonCreate([2,3,4])); // same as x = [1,2,3,4]; x[1:] - Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, -1) = VarPythonCreate([2,3])); // same as x = [1,2,3,4]; x[1:-1] - c := VarPythonCreate([1,2,3,4]); - c.SetSlice(1, 3, VarPythonCreate([7, 8, 9])); - Assert.IsTrue( c = VarPythonCreate([1, 7, 8, 9, 4]) ); - Assert.IsTrue( Boolean(c.Contains( 7 )) ); // same as 7 in c - Assert.IsTrue( not Boolean(c.Contains( 77 )) ); - c.DelSlice(1,3); - Assert.IsTrue( c = VarPythonCreate([1,9,4]) ); - - c := VarPythonCreate([1, 2, 3, 4], stTuple); // test a tuple - Assert.IsTrue( VarIsPythonTuple(c) ); - Assert.IsTrue( VarIsPythonSequence(c) ); - Assert.IsTrue( c.GetItem(1) = 2 ); - Assert.IsTrue( c.Length = 4 ); - c := NewPythonTuple(3); - c.SetItem(0, 1); - c.SetItem(1, 2); - c.SetItem(2, 3); - Assert.IsTrue( VarIsPythonTuple(c) ); - Assert.IsTrue( VarIsPythonSequence(c) ); - Assert.IsTrue( c.GetItem(1) = 2 ); - Assert.IsTrue( c.Length = 3 ); - - // test iterator - iter := BuiltinModule.iter(VarPythonCreate([1, 2, 3, 4], stTuple)); - Assert.IsTrue(VarIsPythonIterator(iter)); - Assert.IsTrue(iter.__next__() = 1); - Assert.IsTrue(iter.__next__() = 2); - Assert.IsTrue(iter.__next__() = 3); - Assert.IsTrue(iter.__next__() = 4); - try - iter.__next__(); - except - on E: EPyStopIteration do - begin - Assert.IsTrue(True); //Ok. - end - else - Assert.IsTrue(False, 'expected stop exception'); - end; - cpt := 0; - iter := VarPyth.iter(VarPythonCreate([1, 2, 3, 4], stTuple)); - Assert.IsTrue(VarIsPythonIterator(iter)); - try - while True do - begin - a := iter.__next__(); - Inc(cpt); - Assert.IsTrue(a = cpt); - end; - except - on E: EPyStopIteration do - begin - Assert.IsTrue(True); //Ok. - end - else - Assert.IsTrue(False, 'expected stop exception'); - end; - Assert.IsTrue(cpt = 4); -end; -procedure TVarPythTest.TestStrings; -var - a, b, c : Variant; - w : WideString; - _obj : PPyObject; -begin - // initialize the operands - a := VarPythonCreate('abc'); - Assert.IsTrue(VarIsPython(a)); - Assert.IsTrue(VarIsPythonString(a)); - Assert.IsTrue(string(a) = 'abc'); - b := VarPythonCreate('def'); - Assert.IsTrue(VarIsPython(b)); - Assert.IsTrue(VarIsPythonString(b)); - Assert.IsTrue(string(b) = 'def'); - // concatenation - c := a + b; - // check result of operation - Assert.IsTrue( string(c) = 'abcdef' ); - // check that operation did not change the content of operands. - Assert.IsTrue(string(a) = 'abc'); - Assert.IsTrue(string(b) = 'def'); - // now with a litteral - c := a + b + '!'; - Assert.IsTrue( string(c) = 'abcdef!' ); - c := a + '!' + b; - Assert.IsTrue( string(c) = 'abc!def' ); - c := '!' + a + b; - Assert.IsTrue( string(c) = '!abcdef' ); - // multiplication - c := a * 3; // in Python the multiplication of string concatenates n times the string - Assert.IsTrue( string(c) = 'abcabcabc' ); - // comparisons - //------------ - // equal - c := a = b; - Assert.IsTrue(c = False); - c := a = a; - Assert.IsTrue(c = True); - Assert.IsTrue( a = 'abc'); - // not equal - c := a <> b; - Assert.IsTrue(c = True); - Assert.IsTrue( not (c = b) ); - c := a <> a; - Assert.IsTrue(c = False); - Assert.IsTrue( a = 'abc'); - // greater than - c := a > b; Assert.IsTrue(c = False); - c := b > a; Assert.IsTrue(c = True); - Assert.IsTrue( a > 'aaa'); - // greater or equal than - c := a >= b; Assert.IsTrue(c = False); - c := b >= a; Assert.IsTrue(c = True); - c := a >= a; Assert.IsTrue(c = True); - Assert.IsTrue( a >= 'abc' ); - // less than - c := a < b; Assert.IsTrue(c = True); - c := b < a; Assert.IsTrue(c = False); - Assert.IsTrue( a < 'bbb'); - // less or equal than - c := a <= b; Assert.IsTrue(c = True); - c := b <= a; Assert.IsTrue(c = False); - c := a <= a; Assert.IsTrue(c = True); - Assert.IsTrue( a <= 'abc'); - // copy - c := a; - Assert.IsTrue( c = a); - Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. - // empty strings - a := VarPythonCreate(''); - Assert.IsTrue(a.length = 0); - Assert.IsTrue(a = ''); - Assert.IsTrue(string(a) = ''); - // Unicode strings - b := VarPythonEval( 'u"Hello world!"' ); - Assert.IsTrue( VarIsPythonUnicode(b) ); - w := FPythonEngine.PyUnicodeAsString(ExtractPythonObjectFrom(b)); - Assert.IsTrue( w = 'Hello world!'); - Assert.IsTrue( b = 'Hello world!'); - Assert.IsTrue( b <> a ); - _obj := FPythonEngine.PyUnicodeFromString(w); - try - c := VarPythonCreate( _obj ); - finally - FPythonEngine.Py_XDecRef(_obj); - end; - Assert.IsTrue(b = c); - Assert.IsTrue(c = w); - Assert.IsTrue( c = 'Hello world!'); - w := b; - Assert.IsTrue( b = w); - Assert.IsTrue( w = 'Hello world!'); - Assert.IsTrue( Length(w) = 12 ); - Assert.IsTrue( Length(w) = b.Length() ); - c := FPythonEngine.PyObjectAsVariant(ExtractPythonObjectFrom(b)); - Assert.IsTrue( c = b ); - Assert.IsTrue( c = w ); - Assert.IsTrue( c = 'Hello world!'); - Assert.IsTrue( VarType(c) and VarTypeMask = varUString ); - c := VarPythonCreate(w); - Assert.IsTrue( c = 'Hello world!'); - Assert.IsTrue( c = w ); - c := VarPythonCreate([w]); - Assert.IsTrue( VarIsPythonUnicode(c.GetItem(0)) ); - Assert.IsTrue( c.GetItem(0) = 'Hello world!'); - Assert.IsTrue( c.GetItem(0) = w ); - c := w; - b := VarPythonCreate(c); - Assert.IsTrue( VarIsPythonUnicode(b) ); - Assert.IsTrue( b = c ); - Assert.IsTrue( b = w ); - // empty strings - a := VarPythonEval( 'u""' ); - Assert.IsTrue(a.length = 0); - Assert.IsTrue(a = ''); - Assert.IsTrue(string(a) = ''); - Assert.IsTrue(WideString(a) = ''); -end; - -initialization - TDUnitX.RegisterTestFixture(TVarPythTest); - -end. +(**************************************************************************) +(* *) +(* Module: Unit 'VarPythTest' Copyright (c) 2021 *) +(* *) +(* Lucas Moura Belo - lmbelo *) +(* lucas.belo@live.com *) +(* BH, Brazil *) +(* *) +(* PyScripter *) +(* e-mail: pyscripter@gmail.com *) +(* *) +(* Project pages: https://github.com/Embarcadero/python4delphi *) +(* https://github.com/pyscripter/python4delphi *) +(**************************************************************************) +(* Functionality: Test unit for variants *) +(* *) +(* *) +(**************************************************************************) +(* 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 VarPythTest; + +interface + +uses + DUnitX.TestFramework, + PythonEngine, + PythonLoad; + +type + {$M+} + [TestFixture] + TVarPythTest = class + private + FPythonEngine: TPythonEngine; + public + [SetupFixture] + procedure SetupFixture; + [TearDownFixture] + procedure TearDownFixture; + [Test] + procedure TestIterator; + [Test] + procedure TestIntegers; + [Test] + procedure TestFloats; + [Test] + procedure TestStrings; + [Test] + procedure TestSequences; + [Test] + procedure TestMappings; + [Test] + procedure TestDates; + [Test] + procedure TestObjects; + end; + +implementation + +uses + SysUtils, StrUtils, + Variants, + VarPyth; + +{ TVarPythTest } + +procedure TVarPythTest.SetupFixture; +begin + FPythonEngine := TPythonEngine.Create(nil); + FPythonEngine.Name := 'PythonEngine'; + TPythonLoad.Configure(FPythonEngine); + FPythonEngine.LoadDll; +end; +procedure TVarPythTest.TearDownFixture; +begin + FPythonEngine.Free(); +end; +procedure TVarPythTest.TestDates; +var + a, b, _timeMod : Variant; + c : Variant; + _date, _date2 : TDateTime; + _year, _month, _day : Word; + _year2, _month2, _day2 : Word; + _hour, _min, _sec, _msec : Word; + _hour2, _min2, _sec2, _msec2 : Word; +begin + _timeMod := Import('time'); // get the time module of Python + _date := Now; + DecodeDate( _date, _year, _month, _day ); + DecodeTime( _date, _hour, _min, _sec, _msec ); + b := _timeMod.localtime(_timeMod.time()); // same as Now in Delphi + a := VarPythonCreate(_date); + Assert.IsTrue( a.Length = 9 ); + Assert.IsTrue( a.GetItem(0) = _year ); + Assert.IsTrue( a.GetItem(1) = _month ); + Assert.IsTrue( a.GetItem(2) = _day ); + Assert.IsTrue( a.GetItem(3) = _hour ); + Assert.IsTrue( a.GetItem(4) = _min ); + Assert.IsTrue( a.GetItem(5) = _sec ); + Assert.IsTrue( b.Length = 9 ); + Assert.IsTrue( b.GetItem(0) = a.GetItem(0) ); + Assert.IsTrue( b.GetItem(1) = a.GetItem(1) ); + Assert.IsTrue( b.GetItem(2) = a.GetItem(2) ); + Assert.IsTrue( b.GetItem(3) = a.GetItem(3) ); + Assert.IsTrue( b.GetItem(4) = a.GetItem(4) ); + Assert.IsTrue( b.GetItem(5) = a.GetItem(5) ); + Assert.IsTrue( b.GetItem(6) = a.GetItem(6) ); + Assert.IsTrue( b.GetItem(7) = a.GetItem(7) ); + // don't test the 9th item of the tuple, because it's the daylight saving, + // and it's not computed by the Python for Delphi. + //Assert.IsTrue( b.GetItem(8) = a.GetItem(8) ); + _date2 := b; + DecodeDate( _date2, _year2, _month2, _day2 ); + DecodeTime( _date2, _hour2, _min2, _sec2, _msec2 ); + Assert.IsTrue( _year2 = _year ); + Assert.IsTrue( _month2 = _month ); + Assert.IsTrue( _day2 = _day ); + Assert.IsTrue( _hour2 = _hour ); + Assert.IsTrue( _min2 = _min ); + Assert.IsTrue( _sec2 = _sec ); + // test new datetime module + _timeMod := Import('datetime'); // get the datetime module of Python + //or _timeMod := DatetimeModule; // get the datetime module of Python + a := _timeMod.datetime(2002, 12, 30, 22, 15, 38, 827738); + Assert.IsTrue(VarIsPythonDateTime(a)); + Assert.IsTrue(VarIsPythonDate(a)); + Assert.IsTrue(not VarIsPythonTime(a)); + Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); + Assert.IsTrue(a.year = 2002); + Assert.IsTrue(a.month = 12); + Assert.IsTrue(a.day = 30); + Assert.IsTrue(a.hour = 22); + Assert.IsTrue(a.minute = 15); + Assert.IsTrue(a.second = 38); + Assert.IsTrue(a.microsecond = 827738); + _date := a; + DecodeDate( _date, _year, _month, _day ); + DecodeTime( _date, _hour, _min, _sec, _msec ); + Assert.IsTrue(_year = 2002); + Assert.IsTrue(_month = 12); + Assert.IsTrue(_day = 30); + Assert.IsTrue(_hour = 22); + Assert.IsTrue(_min = 15); + Assert.IsTrue(_sec = 38); + Assert.IsTrue(_msec = 827738 div 1000); + a := _timeMod.date(2002, 12, 30); + Assert.IsTrue(not VarIsPythonDateTime(a)); + Assert.IsTrue(VarIsPythonDate(a)); + Assert.IsTrue(not VarIsPythonTime(a)); + Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); + _date := a; + DecodeDate( _date, _year, _month, _day ); + DecodeTime( _date, _hour, _min, _sec, _msec ); + Assert.IsTrue(_year = 2002); + Assert.IsTrue(_month = 12); + Assert.IsTrue(_day = 30); + Assert.IsTrue(_hour = 0); + Assert.IsTrue(_min = 0); + Assert.IsTrue(_sec = 0); + Assert.IsTrue(_msec = 0); + Assert.IsTrue(a.year = 2002); + Assert.IsTrue(a.month = 12); + Assert.IsTrue(a.day = 30); + a := _timeMod.time(22, 15, 38, 827738); + Assert.IsTrue(not VarIsPythonDateTime(a)); + Assert.IsTrue(not VarIsPythonDate(a)); + Assert.IsTrue(VarIsPythonTime(a)); + Assert.IsTrue(not VarIsPythonDateTimeDelta(a)); + Assert.IsTrue(a.hour = 22); + Assert.IsTrue(a.minute = 15); + Assert.IsTrue(a.second = 38); + Assert.IsTrue(a.microsecond = 827738); + _date := a; + DecodeTime( _date, _hour, _min, _sec, _msec ); + Assert.IsTrue(_hour = 22); + Assert.IsTrue(_min = 15); + Assert.IsTrue(_sec = 38); + Assert.IsTrue(_msec = 827738 div 1000); + a := DatetimeModule.datetime(2002, 12, 30, 22, 15, 38, 827738); + b := _timeMod.datetime(2002, 12, 30, 22, 16, 38, 827738); + c := b - a; + Assert.IsTrue(VarIsPythonDateTimeDelta(c)); + Assert.IsTrue(c.days = 0); + Assert.IsTrue(c.seconds = 60); + Assert.IsTrue(c.microseconds = 0); + _date := c; + Assert.IsTrue(Trunc(_date)=0); + DecodeTime( _date, _hour, _min, _sec, _msec ); + Assert.IsTrue(_hour = 0); + Assert.IsTrue(_min = 1); + Assert.IsTrue(_sec = 0); + Assert.IsTrue(_msec = 0); + c := a - b; + Assert.IsTrue(VarIsPythonDateTimeDelta(c)); + Assert.IsTrue(c.days = -1); + Assert.IsTrue(c.seconds = 86340); + Assert.IsTrue(c.microseconds = 0); + _date := c; + Assert.IsTrue(Trunc(_date)=0); + Assert.IsTrue(_date<0); + DecodeTime( _date, _hour, _min, _sec, _msec ); + Assert.IsTrue(_hour = 0); + Assert.IsTrue(_min = 1); + Assert.IsTrue(_sec = 0); + Assert.IsTrue(_msec = 0); + c := a + (b-a); + Assert.IsTrue(VarIsPythonDateTime(c)); + Assert.IsTrue(c = b); + Assert.IsTrue(c <> a); + Assert.IsTrue(a < b); + Assert.IsTrue(b > a); + GetPythonEngine.DatetimeConversionMode := dcmToDatetime; + try + _date := EncodeDate(2003, 01, 28) + EncodeTime(12, 22, 33, 450); + a := VarPythonCreate(_date); + Assert.IsTrue(VarIsPythonDateTime(c)); + _date2 := a; + DecodeDate( _date, _year, _month, _day ); + DecodeTime( _date, _hour, _min, _sec, _msec ); + DecodeDate( _date2, _year2, _month2, _day2 ); + DecodeTime( _date2, _hour2, _min2, _sec2, _msec2 ); + Assert.IsTrue( _year2 = _year ); + Assert.IsTrue( _month2 = _month ); + Assert.IsTrue( _day2 = _day ); + Assert.IsTrue( _hour2 = _hour ); + Assert.IsTrue( _min2 = _min ); + Assert.IsTrue( _sec2 = _sec ); + Assert.IsTrue( _msec2 = _msec ); + Assert.IsTrue(a.year = 2003); + Assert.IsTrue(a.month = 01); + Assert.IsTrue(a.day = 28); + Assert.IsTrue(a.hour = 12); + Assert.IsTrue(a.minute = 22); + Assert.IsTrue(a.second = 33); + Assert.IsTrue(a.microsecond = 450000); + finally + GetPythonEngine.DatetimeConversionMode := dcmToTuple; + end; +end; +procedure TVarPythTest.TestFloats; +var + a, b, c : Variant; + dbl_a, dbl_b, dbl_c : Double; + int : Integer; +begin + // initialize the operands + dbl_a := 2.5; + a := VarPythonCreate(dbl_a); + Assert.IsTrue(VarIsPython(a)); + Assert.IsTrue(VarIsPythonNumber(a)); + Assert.IsTrue(VarIsPythonFloat(a)); + Assert.IsTrue(Double(a) = 2.5); + dbl_b := 3.2; + b := VarPythonCreate(dbl_b); + Assert.IsTrue(VarIsPython(b)); + Assert.IsTrue(VarIsPythonNumber(b)); + Assert.IsTrue(VarIsPythonFloat(b)); + Assert.IsTrue(Double(b) = dbl_b); // note that Assert.IsTrue(Double(b) = 3.2) fails. + // arithmetic operations + //---------------------- + // addition + c := a + b; + // check result of operation + Assert.IsTrue( Double(c) = (dbl_a + dbl_b) ); + // check that operation did not change the content of operands. + Assert.IsTrue(Double(a) = dbl_a); + Assert.IsTrue(Double(b) = dbl_b); + // now with a litteral + c := a + b + 1; + Assert.IsTrue( Double(c) = (dbl_a+dbl_b+1) ); + c := a + 1 + b; + Assert.IsTrue( Double(c) = (dbl_a+1+dbl_b) ); + c := 1 + a + b; + Assert.IsTrue( Double(c) = (1+dbl_a+dbl_b) ); + // substraction + c := b - a; + Assert.IsTrue( Double(c) = (dbl_b - dbl_a) ); + // now with a litteral + c := b - a - 1; + Assert.IsTrue( Double(c) = (dbl_b-dbl_a-1) ); + c := b - 1 - a; + Assert.IsTrue( Double(c) = (dbl_b-1-dbl_a) ); + c := 1 - b - a; + Assert.IsTrue( Double(c) = (1-dbl_b-dbl_a) ); + // multiplication + c := a * b; + dbl_c := dbl_a * dbl_b; + Assert.IsTrue( Double(c) = dbl_c ); + // now with a litteral + c := a * b * 2; + dbl_c := dbl_a * dbl_b * 2; + Assert.IsTrue( Double(c) = dbl_c ); + c := a * 2 * b; + dbl_c := dbl_a * 2 * dbl_b; + Assert.IsTrue( Double(c) = dbl_c ); + c := 2 * a * b; + dbl_c := 2 * dbl_a * dbl_b; + Assert.IsTrue( Double(c) = dbl_c ); + // division: in Python a division between 2 integers is the same as the integer division + c := b / a; + dbl_c := dbl_b / dbl_a; + Assert.IsTrue( Double(c) = dbl_c ); + // negation + c := -a; + Assert.IsTrue( Double(c) = -dbl_a ); + // comparisons + //------------ + // equal + c := a = b; + Assert.IsTrue(c = False); + c := a = a; + Assert.IsTrue(c = True); + Assert.IsTrue( a = dbl_a); + // not equal + c := a <> b; + Assert.IsTrue(c = True); + Assert.IsTrue( not (c = b) ); + c := a <> a; + Assert.IsTrue(c = False); + Assert.IsTrue( a = dbl_a); + // greater than + c := a > b; Assert.IsTrue(c = False); + c := b > a; Assert.IsTrue(c = True); + Assert.IsTrue( a > (dbl_a-1)); + // greater or equal than + c := a >= b; Assert.IsTrue(c = False); + c := b >= a; Assert.IsTrue(c = True); + c := a >= a; Assert.IsTrue(c = True); + Assert.IsTrue( a >= dbl_a ); + // less than + c := a < b; Assert.IsTrue(c = True); + c := b < a; Assert.IsTrue(c = False); + Assert.IsTrue( a < dbl_b); + // less or equal than + c := a <= b; Assert.IsTrue(c = True); + c := b <= a; Assert.IsTrue(c = False); + c := a <= a; Assert.IsTrue(c = True); + Assert.IsTrue( a <= dbl_a); + // parenthesis + c := a * ((a * b) / b); + dbl_c := dbl_a * ((dbl_a * dbl_b) / dbl_b); + Assert.IsTrue( c = dbl_c ); + // copy + c := a; + Assert.IsTrue( c = a); + Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. + // casts + int := a; + Assert.IsTrue(int = 2); +end; +procedure TVarPythTest.TestIntegers; +var + a, b, c : Variant; + big : Int64; +begin + // initialize the operands + a := VarPythonCreate(2); + Assert.IsTrue(VarIsPython(a)); + Assert.IsTrue(VarIsPythonNumber(a)); + Assert.IsTrue(VarIsPythonInteger(a)); + Assert.IsTrue(Integer(a) = 2); + b := VarPythonCreate(3); + Assert.IsTrue(VarIsPython(b)); + Assert.IsTrue(VarIsPythonNumber(b)); + Assert.IsTrue(VarIsPythonInteger(b)); + Assert.IsTrue(Integer(b) = 3); + // arithmetic operations + //---------------------- + // addition + c := a + b; + // check result of operation + Assert.IsTrue( Integer(c) = 5 ); + // check that operation did not change the content of operands. + Assert.IsTrue(Integer(a) = 2); + Assert.IsTrue(Integer(b) = 3); + // now with a litteral + c := a + b + 1; + Assert.IsTrue( Integer(c) = 6 ); + c := a + 1 + b; + Assert.IsTrue( Integer(c) = 6 ); + c := 1 + a + b; + Assert.IsTrue( Integer(c) = 6 ); + // substraction + c := b - a; + Assert.IsTrue( Integer(c) = 1 ); + // now with a litteral + c := b - a - 1; + Assert.IsTrue( Integer(c) = 0 ); + c := b - 1 - a; + Assert.IsTrue( Integer(c) = 0 ); + c := 1 - b - a; + Assert.IsTrue( Integer(c) = -4 ); + // multiplication + c := a * b; + Assert.IsTrue( Integer(c) = 6 ); + // now with a litteral + c := a * b * 2; + Assert.IsTrue( Integer(c) = 12 ); + c := a * 2 * b; + Assert.IsTrue( Integer(c) = 12 ); + c := 2 * a * b; + Assert.IsTrue( Integer(c) = 12 ); + // integer division + c := b div a; + Assert.IsTrue( Integer(c) = 1 ); + // division: in Python a division between 2 integers is the same as the integer division + c := b / a; + Assert.IsTrue( c = 1.5 ); + Assert.IsTrue( Integer(c) = 2 ); + // modulus + c := b mod a; + Assert.IsTrue( Integer(c) = 1 ); + c := BuiltinModule.divmod(b, a); // this returns a tuple whose first item is the result of the division, + // and second item the modulo. + if VarIsPythonSequence(c) and (c.Length = 2) then + begin + Assert.IsTrue(Integer(c.GetItem(0)) = 1); // division + Assert.IsTrue(Integer(c.GetItem(1)) = 1); // modulo + end; + // power + c := BuiltinModule.pow(a, b); + Assert.IsTrue(c = 8); + // negation + c := -a; + Assert.IsTrue( Integer(c) = -2 ); + // logical operations + //------------------ + // inverse + c := not a; // in python it would be: c = ~2 + Assert.IsTrue( Integer(c) = -3 ); + // shift left (<<) + c := a shl b; + Assert.IsTrue( Integer(c) = 16 ); + c := a shl 1; + Assert.IsTrue( Integer(c) = 4 ); + // shift right (>>) + c := a shl b; + c := c shr b; + Assert.IsTrue( Integer(c) = Integer(a) ); + c := b shr 1; + Assert.IsTrue( Integer(c) = 1 ); + // and + c := a and (a*5); + Assert.IsTrue( Integer(c) = Integer(a) ); + c := a and 6; + Assert.IsTrue( Integer(c) = Integer(a) ); + // or + c := a or b; + Assert.IsTrue( Integer(c) = 3 ); + c := a or 3; + Assert.IsTrue( Integer(c) = 3 ); + // xor + c := a xor b; + Assert.IsTrue( Integer(c) = 1 ); + c := a xor 3; + Assert.IsTrue( Integer(c) = 1 ); + // comparisons + //------------ + // equal + c := a = b; + Assert.IsTrue(c = False); + c := a = a; + Assert.IsTrue(c = True); + Assert.IsTrue( a = 2); + // not equal + c := a <> b; + Assert.IsTrue(c = True); + Assert.IsTrue( not (c = b) ); + c := a <> a; + Assert.IsTrue(c = False); + Assert.IsTrue( a = 2); + // greater than + c := a > b; Assert.IsTrue(c = False); + c := b > a; Assert.IsTrue(c = True); + Assert.IsTrue( a > 1); + // greater or equal than + c := a >= b; Assert.IsTrue(c = False); + c := b >= a; Assert.IsTrue(c = True); + c := a >= a; Assert.IsTrue(c = True); + Assert.IsTrue( a >= 2 ); + // less than + c := a < b; Assert.IsTrue(c = True); + c := b < a; Assert.IsTrue(c = False); + Assert.IsTrue( a < 6); + // less or equal than + c := a <= b; Assert.IsTrue(c = True); + c := b <= a; Assert.IsTrue(c = False); + c := a <= a; Assert.IsTrue(c = True); + Assert.IsTrue( a <= 2); + // parenthesis + c := a * ((a * b) div b); + Assert.IsTrue( c = a*2 ); + // copy + c := a; + Assert.IsTrue( c = a); + Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. + // test long long (Int64) + big := Int64(MaxInt)*4; + b := VarPythonCreate(big); + Assert.IsTrue( b = big ); + Assert.IsTrue( b <> big+1 ); + Assert.IsTrue( b > MaxInt ); + Assert.IsTrue( MaxInt < b ); + Assert.IsTrue( b+1 = big+1 ); + Assert.IsTrue( b*2 = big*2 ); + Assert.IsTrue( b div 2 = big div 2 ); + c := VarPythonCreate(True); + Assert.IsTrue(VarIsBool(c)); + Assert.IsTrue(VarIsTrue(c)); + c := VarPythonCreate(False); + Assert.IsTrue(VarIsBool(c)); + Assert.IsTrue(not VarIsTrue(c)); +end; +procedure TVarPythTest.TestIterator; +var + Module: Variant; + Count: integer; +begin + Count := 0; + for Module in VarPyIterate(SysModule.modules) do begin + Count := Count + 1; + Log(Module); + end; + Assert.IsTrue(Count = len(SysModule.modules)); +end; +procedure TVarPythTest.TestMappings; +var + a, b, c, keys, values : Variant; +begin + // initialize the operands + a := NewPythonDict; + Assert.IsTrue(VarIsPython(a)); + Assert.IsTrue(VarIsPythonMapping(a)); + Assert.IsTrue(VarIsPythonDict(a)); + // There is a bug in D2010 in which Char('a') gets translated to integer parameter + a.SetItem( string('a'), 1 ); + a.SetItem( string('b'), 2 ); + a.SetItem( string('c'), 3 ); + Assert.IsTrue(a.Length = 3); // this is a special property that does the same as: len(a) in Python + Assert.IsTrue(a.Length() = 3); // this is a special method that does the same as the special property + Assert.IsTrue(len(a) = 3); + Assert.IsTrue(a.GetItem(string('a')) = 1); // this is a special method that lets you do the same as: a[0] in Python + Assert.IsTrue(a.GetItem(string('b')) = 2); + Assert.IsTrue(a.GetItem(string('c')) = 3); + + + b := NewPythonDict; + Assert.IsTrue(VarIsPython(b)); + Assert.IsTrue(VarIsPythonMapping(b)); + Assert.IsTrue(VarIsPythonDict(b)); + b.SetItem( string('d'), 4 ); + b.SetItem( string('e'), 5 ); + b.SetItem( string('f'), 6 ); + Assert.IsTrue(b.Length = 3); + Assert.IsTrue(b.Length() = 3); + Assert.IsTrue(len(b) = 3); + Assert.IsTrue(b.GetItem(string('d')) = 4); + Assert.IsTrue(b.GetItem(string('e')) = 5); + Assert.IsTrue(b.GetItem(string('f')) = 6); + + // copy + c := a; + Assert.IsTrue( c = a); + Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. + + // dict methods + Assert.IsTrue( Boolean(a.__contains__(string('a'))) ); + Assert.IsTrue( not Boolean(a.__contains__('abc')) ); + keys := BuiltinModule.list(a.keys()); + keys.sort(); + Assert.IsTrue( keys = VarPythonCreate(VarArrayOf(['a', 'b', 'c']))); + values := BuiltinModule.list(a.values()); + values.sort(); + Assert.IsTrue( values = VarPythonCreate(VarArrayOf([1, 2, 3]))); + c := a; + c.DeleteItem(string('a')); + Assert.IsTrue( not Boolean(c.__contains__(string('a'))) ); + + // test string values + a := NewPythonDict; + a.SetItem( string('a'), 'Hello'); + a.SetItem( string('b'), 'World!'); + a.SetItem( string('c'), ''); + Assert.IsTrue(a.GetItem(string('a')) = 'Hello'); + Assert.IsTrue(a.GetItem(string('b')) = 'World!'); + Assert.IsTrue(a.GetItem(string('c')) = ''); +end; + +procedure TVarPythTest.TestObjects; +var + _main, f, a, b, c : Variant; + val : Integer; + _str : String; +const + Script = + 'class XYZ(object):' + sLineBreak + + ' pass' + sLineBreak + + '' + sLineBreak + + 'class Foo:' + sLineBreak + + ' def __init__(Self, Value=0):' + sLineBreak + + ' Self.Value = Value' + sLineBreak + + ' def __del__(Self):' + sLineBreak + + ' print("delete", Self)' + sLineBreak + + ' def __add__(self, other):' + sLineBreak + + ' return Foo(self.Value + other.Value)' + sLineBreak + + ' def Inc(Self, AValue = 1):' + sLineBreak + + ' Self.Value = Self.Value + AValue' + sLineBreak + + ' def GetSelf(Self):' + sLineBreak + + ' return Self' + sLineBreak + + ' def GetValue(Self):' + sLineBreak + + ' return Self.Value' + sLineBreak + + ' def SetABC(Self, A, B, C):' + sLineBreak + + ' Self.A = A' + sLineBreak + + ' Self.B = B' + sLineBreak + + ' Self.C = C' + sLineBreak + + ' def Add(Self, AFooInst):' + sLineBreak + + ' Self.Value = Self.Value + AFooInst.Value' + sLineBreak + + 'class Bar(Foo):' + sLineBreak + + ' def Inc(Self, AValue = 1):' + sLineBreak + + ' Self.Value = Self.Value - AValue' + sLineBreak + + 'def Add(a, b):' + sLineBreak + + ' return a + b' + sLineBreak + + 'def MakeList(a, b, c, d):' + sLineBreak + + ' return [a, b, c, d]' + sLineBreak + + '' + sLineBreak + + 'f = Foo()' + sLineBreak + + 'print("Created", f)' + sLineBreak + + 'f.Inc()' + sLineBreak + + 'f.Inc(2)' + sLineBreak + + 'b = Bar()' + sLineBreak + + 'b.Inc()' + sLineBreak + + 'b.Inc(2)'; + +begin + FPythonEngine.ExecString(Script); + _main := MainModule; + Assert.IsTrue( VarIsPythonModule(_main) ); + Assert.IsTrue( VarIsPythonModule(SysModule) ); + Assert.IsTrue( Import('sys').version = SysModule.version ); + Log(SysModule.version); + Assert.IsTrue( Boolean(SysModule.modules.Contains(GetPythonEngine.ExecModule)) ); // if __main__ in sys.modules + Assert.IsTrue( VarIsSameType(_main, SysModule) ); + Assert.IsTrue( _type(_main).__name__ = 'module'); + Assert.IsTrue( BuiltinModule.type(_main).__name__ = 'module'); + + Assert.IsTrue( VarIsPythonClass(_main.Foo) ); + Assert.IsTrue( VarIsPythonClass(_main.Bar) ); + Assert.IsTrue( VarIsPythonClass(_main.XYZ) ); + Assert.IsTrue( not VarIsPythonClass(_main.Foo.__add__) ); + Assert.IsTrue( not VarIsPythonClass(_main.f) ); + Assert.IsTrue( VarIsPythonCallable(_main.Foo) ); + Assert.IsTrue( VarIsPythonCallable(_main.Foo) ); + Assert.IsTrue( VarIsTrue(BuiltinModule.callable(_main.Foo)) ); + Assert.IsTrue( VarIsSame(_main.f.__class__, _main.Foo) ); + Assert.IsTrue( VarIsPythonMethod(_main.f.Inc) ); + Assert.IsTrue( VarIsPythonCallable(_main.f.Inc) ); + Assert.IsTrue( VarIsTrue(BuiltinModule.callable(_main.f.Inc)) ); + Assert.IsTrue( VarIsPythonFunction(_main.Add) ); + Assert.IsTrue( VarIsPythonCallable(_main.Add) ); + Assert.IsTrue( VarIsInstanceOf(_main.f, _main.Foo) ); + Assert.IsTrue( VarIsTrue(BuiltinModule.isinstance(_main.f, _main.Foo)) ); + Assert.IsTrue( VarIsSubclassOf(_main.Bar, _main.Foo) ); + Assert.IsTrue( VarIsTrue(BuiltinModule.issubclass(_main.Bar, _main.Foo)) ); + Assert.IsTrue( not VarIsSubclassOf(_main.Foo, _main.Bar) ); + Assert.IsTrue( VarIsInstanceOf(_main.b, _main.Foo) ); + Assert.IsTrue( not VarIsInstanceOf(_main.f, _main.Bar) ); + Assert.IsTrue( VarIsTrue( BuiltinModule.vars(_main).__contains__(string('f')) ) ); + Assert.IsTrue( VarIsTrue( BuiltinModule.dir(_main).Contains(string('f')) ) ); + + f := _main.Foo(); // new instance of class Foo + Log('Instanciate class Foo: ' + f); + f.Inc(); // call a method without any arg, because there's a default arg. + f.Inc(2); // call a method with one arg, overriding the default arg. + Assert.IsTrue( VarIsPythonNumber(f.Value) ); + Assert.IsTrue( VarIsPythonInteger(f.Value) ); + Assert.IsTrue( f.Value = _main.f.Value ); // compare the result with what we did in the script + Assert.IsTrue( f.GetValue() = _main.f.GetValue() ); // compare the result with what we did in the script + Assert.IsTrue( VarIsPython( f.GetSelf() ) ); + Assert.IsTrue( VarIsSame( f.GetSelf(), f ) ); + Assert.IsTrue( BuiltinModule.getattr(f, 'Value') = f.Value ); + // python (+) operator overloading + a := _main.Foo(10); + b := _main.Foo(5); + c := a + b; + Assert.IsTrue(a.Value = 10); + Assert.IsTrue(b.Value = 5); + Assert.IsTrue(c.Value = 15); + Log('Test -> a, b, c : ' + a.Value + ', ' + b.Value + ', ' + c.Value); + // cascading calls + Assert.IsTrue( f.GetSelf().GetSelf().GetSelf().GetSelf().GetValue() = _main.f.GetValue() ); + Assert.IsTrue( Boolean(f.__dict__.__contains__('Value')) ); + Assert.IsTrue( VarIsTrue( BuiltinModule.hasattr(f, 'Value') ) ); + _str := 'Value'; + Assert.IsTrue( Boolean(f.__dict__.__contains__(_str)) ); // check with a string var + Assert.IsTrue( Boolean( BuiltinModule.hasattr(f, _str) ) ); + val := f.Value; + f.Add(f); // passing itself as an argument + Assert.IsTrue( f.Value = val*2 ); + // check param order + f.SetABC(1, 2, 3); + Assert.IsTrue(f.A = 1); + Assert.IsTrue(f.B = 2); + Assert.IsTrue(f.C = 3); + // add a property to an instance + f.Z := 99; + Assert.IsTrue(f.Z = 99); + // add a var to a module + _main.Z := 99; + Assert.IsTrue(_main.Z = 99); + // check none + Assert.IsTrue( VarIsNone(None) ); + Assert.IsTrue( VarIsNone(VarPythonCreate([1, Null, 3]).GetItem(1)) ); // Null is casted to None + Assert.IsTrue( VarIsNone(VarPythonCreate([1, None, 3]).GetItem(1)) ); + Assert.IsTrue( VarIsNone(f.Inc()) ); + Assert.IsTrue( f.Inc() = None ); + Assert.IsTrue( not Boolean(None) ); // if not None: + Assert.IsTrue( not VarIsTrue(None) ); // if not None: + Assert.IsTrue( Boolean(f) ); // if f: + Assert.IsTrue( VarIsTrue(f) ); // if f: + + // call a function + Assert.IsTrue( _main.Add(2, 2) = 4 ); + // call a function with a mix of regular parameters and named parameters + f := _main.MakeList(1, 2, 3, 4); + Assert.IsTrue(VarIsPythonList(f)); + Assert.IsTrue(f.Length = 4); + Assert.IsTrue(f.GetItem(0) = 1); + Assert.IsTrue(f.GetItem(1) = 2); + Assert.IsTrue(f.GetItem(2) = 3); + Assert.IsTrue(f.GetItem(3) = 4); + f := _main.MakeList(1, d:=3, c:=4, b:=2); + Assert.IsTrue(VarIsPythonList(f)); + Assert.IsTrue(f.Length = 4); + Assert.IsTrue(f.GetItem(0) = 1); + Assert.IsTrue(f.GetItem(1) = 2); + Assert.IsTrue(f.GetItem(2) = 4); + Assert.IsTrue(f.GetItem(3) = 3); + f := _main.MakeList(1, 2, d:= 3, c:=4); + Assert.IsTrue(VarIsPythonList(f)); + Assert.IsTrue(f.Length = 4); + Assert.IsTrue(f.GetItem(0) = 1); + Assert.IsTrue(f.GetItem(1) = 2); + Assert.IsTrue(f.GetItem(2) = 4); + Assert.IsTrue(f.GetItem(3) = 3); + f := _main.MakeList(1, 2, 3, d:=4); + Assert.IsTrue(VarIsPythonList(f)); + Assert.IsTrue(f.Length = 4); + Assert.IsTrue(f.GetItem(0) = 1); + Assert.IsTrue(f.GetItem(1) = 2); + Assert.IsTrue(f.GetItem(2) = 3); + Assert.IsTrue(f.GetItem(3) = 4); + f := _main.MakeList(b:=1, a:=2, d:= 3, c:=4); + Assert.IsTrue(VarIsPythonList(f)); + Assert.IsTrue(f.Length = 4); + Assert.IsTrue(f.GetItem(0) = 2); + Assert.IsTrue(f.GetItem(1) = 1); + Assert.IsTrue(f.GetItem(2) = 4); + Assert.IsTrue(f.GetItem(3) = 3); +end; +procedure TVarPythTest.TestSequences; +var + a, b, c : Variant; + iter : Variant; + cpt : Integer; +begin + // initialize the operands + // you can either use the overloaded function with an array of const + // or use the VarArrayOf function that returns an array of variants that will + // be casted to a Python list. + a := VarPythonCreate([1, 2, 3]); + Assert.IsTrue(VarIsPython(a)); + Assert.IsTrue(VarIsPythonSequence(a)); + Assert.IsTrue(VarIsPythonList(a)); + Assert.IsTrue(a.Length = 3); // this is a special property that does the same as: len(a) in Python + Assert.IsTrue(a.Length() = 3); // this is a special method that does the same as the special property + Assert.IsTrue(len(a) = 3); + Assert.IsTrue(a.GetItem(0) = 1); // this is a special method that lets you do the same as: a[0] in Python + Assert.IsTrue(a.GetItem(1) = 2); + Assert.IsTrue(a.GetItem(2) = 3); + Assert.IsTrue(string(a) = '[1, 2, 3]'); + // indexed access using brackets when the sequence is a property of an object (module, instance...) + MainModule.a := VarPythonCreate([1, 2, 3]); + Assert.IsTrue(MainModule.a[1] = 2); + + b := VarPythonCreate(VarArrayOf([4, 5, 6])); + Assert.IsTrue(VarIsPython(b)); + Assert.IsTrue(VarIsPythonSequence(b)); + Assert.IsTrue(VarIsPythonList(b)); + Assert.IsTrue(b.Length = 3); + Assert.IsTrue(b.Length() = 3); + Assert.IsTrue(len(b) = 3); + Assert.IsTrue(b.GetItem(0) = 4); + Assert.IsTrue(b.GetItem(1) = 5); + Assert.IsTrue(b.GetItem(2) = 6); + Assert.IsTrue(string(b) = '[4, 5, 6]'); + // concatenation + c := a + b; + // check result of operation + Assert.IsTrue(string(c) = '[1, 2, 3, 4, 5, 6]'); + // check that operation did not change the content of operands. + Assert.IsTrue(string(a) = '[1, 2, 3]'); + Assert.IsTrue(string(b) = '[4, 5, 6]'); + // now with a litteral: note that with D6 SP1, we can't concatenate a custom variant with an var array of variants + c := a + b + VarPythonCreate(['Hello', 'World!', 3.14]); + Assert.IsTrue( string(c) = '[1, 2, 3, 4, 5, 6, ''Hello'', ''World!'', 3.14]' ); + c := a + VarPythonCreate(['Hello', 'World!', 3.14]) + b; + Assert.IsTrue( string(c) = '[1, 2, 3, ''Hello'', ''World!'', 3.14, 4, 5, 6]' ); + c := VarPythonCreate(['Hello', 'World!', 3.14]) + a + b; + Assert.IsTrue( string(c) = '[''Hello'', ''World!'', 3.14, 1, 2, 3, 4, 5, 6]' ); + + // multiplication + c := a * 3; // in Python the multiplication of sequence concatenates n times the sequence + Assert.IsTrue( string(c) = '[1, 2, 3, 1, 2, 3, 1, 2, 3]' ); + + // comparisons + //------------ + + // equal + c := a = b; + Assert.IsTrue(c = False); + c := a = a; + Assert.IsTrue(c = True); + Assert.IsTrue( string(a) = '[1, 2, 3]'); + + // not equal + c := a <> b; + Assert.IsTrue(c = True); + Assert.IsTrue( not (c = b) ); + c := a <> a; + Assert.IsTrue(c = False); + Assert.IsTrue( string(a) = '[1, 2, 3]'); + + // greater than + c := a > b; Assert.IsTrue(c = False); + c := b > a; Assert.IsTrue(c = True); + Assert.IsTrue( string(a) > '[1, 1, 1]'); + + // greater or equal than + c := a >= b; Assert.IsTrue(c = False); + c := b >= a; Assert.IsTrue(c = True); + c := a >= a; Assert.IsTrue(c = True); + Assert.IsTrue( string(a) >= '[1, 2, 3]' ); + + // less than + c := a < b; Assert.IsTrue(c = True); + c := b < a; Assert.IsTrue(c = False); + Assert.IsTrue( string(a) < '[4, 4, 4]'); + + // less or equal than + c := a <= b; Assert.IsTrue(c = True); + c := b <= a; Assert.IsTrue(c = False); + c := a <= a; Assert.IsTrue(c = True); + Assert.IsTrue( string(a) <= '[1, 2, 3]'); + + // copy + c := a; + Assert.IsTrue( c = a); + Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. + + // sequence methods: + c := b + a; + c.sort(); // note that you must you the parenthesis to distinguish the call between a method or a property. + Assert.IsTrue( c = (a+b) ); + + c := NewPythonList; // facility for building sequences + Assert.IsTrue( not VarIsTrue(c) ); // c is false because it's an empty collection + c.append(1); + c.append(2); + c.append(3); + Assert.IsTrue( VarIsTrue(c) ); // c is true because it's not an empty collection + Assert.IsTrue(c = a); + Assert.IsTrue( c.pop() = 3 ); + Assert.IsTrue( string(c) = '[1, 2]'); + + c := NewPythonList(3); // facility for building sequences + c.SetItem(0, 1); + c.SetItem(1, 2); + c.SetItem(2, 3); + Assert.IsTrue(c = a); + c.DeleteItem(1); + Assert.IsTrue(c = VarPythonCreate([1,3])); + + Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, 3) = VarPythonCreate([2,3])); // same as x = [1,2,3,4]; x[1:3] + Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, Ellipsis) = VarPythonCreate([2,3,4])); // same as x = [1,2,3,4]; x[1:] + Assert.IsTrue(VarPythonCreate([1,2,3,4]).GetSlice(1, -1) = VarPythonCreate([2,3])); // same as x = [1,2,3,4]; x[1:-1] + c := VarPythonCreate([1,2,3,4]); + c.SetSlice(1, 3, VarPythonCreate([7, 8, 9])); + Assert.IsTrue( c = VarPythonCreate([1, 7, 8, 9, 4]) ); + Assert.IsTrue( Boolean(c.Contains( 7 )) ); // same as 7 in c + Assert.IsTrue( not Boolean(c.Contains( 77 )) ); + c.DelSlice(1,3); + Assert.IsTrue( c = VarPythonCreate([1,9,4]) ); + + c := VarPythonCreate([1, 2, 3, 4], stTuple); // test a tuple + Assert.IsTrue( VarIsPythonTuple(c) ); + Assert.IsTrue( VarIsPythonSequence(c) ); + Assert.IsTrue( c.GetItem(1) = 2 ); + Assert.IsTrue( c.Length = 4 ); + c := NewPythonTuple(3); + c.SetItem(0, 1); + c.SetItem(1, 2); + c.SetItem(2, 3); + Assert.IsTrue( VarIsPythonTuple(c) ); + Assert.IsTrue( VarIsPythonSequence(c) ); + Assert.IsTrue( c.GetItem(1) = 2 ); + Assert.IsTrue( c.Length = 3 ); + + // test iterator + iter := BuiltinModule.iter(VarPythonCreate([1, 2, 3, 4], stTuple)); + Assert.IsTrue(VarIsPythonIterator(iter)); + Assert.IsTrue(iter.__next__() = 1); + Assert.IsTrue(iter.__next__() = 2); + Assert.IsTrue(iter.__next__() = 3); + Assert.IsTrue(iter.__next__() = 4); + try + iter.__next__(); + except + on E: EPyStopIteration do + begin + Assert.IsTrue(True); //Ok. + end + else + Assert.IsTrue(False, 'expected stop exception'); + end; + cpt := 0; + iter := VarPyth.iter(VarPythonCreate([1, 2, 3, 4], stTuple)); + Assert.IsTrue(VarIsPythonIterator(iter)); + try + while True do + begin + a := iter.__next__(); + Inc(cpt); + Assert.IsTrue(a = cpt); + end; + except + on E: EPyStopIteration do + begin + Assert.IsTrue(True); //Ok. + end + else + Assert.IsTrue(False, 'expected stop exception'); + end; + Assert.IsTrue(cpt = 4); +end; +procedure TVarPythTest.TestStrings; +var + a, b, c : Variant; + w : WideString; + _obj : PPyObject; +begin + // initialize the operands + a := VarPythonCreate('abc'); + Assert.IsTrue(VarIsPython(a)); + Assert.IsTrue(VarIsPythonString(a)); + Assert.IsTrue(string(a) = 'abc'); + b := VarPythonCreate('def'); + Assert.IsTrue(VarIsPython(b)); + Assert.IsTrue(VarIsPythonString(b)); + Assert.IsTrue(string(b) = 'def'); + // concatenation + c := a + b; + // check result of operation + Assert.IsTrue( string(c) = 'abcdef' ); + // check that operation did not change the content of operands. + Assert.IsTrue(string(a) = 'abc'); + Assert.IsTrue(string(b) = 'def'); + // now with a litteral + c := a + b + '!'; + Assert.IsTrue( string(c) = 'abcdef!' ); + c := a + '!' + b; + Assert.IsTrue( string(c) = 'abc!def' ); + c := '!' + a + b; + Assert.IsTrue( string(c) = '!abcdef' ); + // multiplication + c := a * 3; // in Python the multiplication of string concatenates n times the string + Assert.IsTrue( string(c) = 'abcabcabc' ); + // comparisons + //------------ + // equal + c := a = b; + Assert.IsTrue(c = False); + c := a = a; + Assert.IsTrue(c = True); + Assert.IsTrue( a = 'abc'); + // not equal + c := a <> b; + Assert.IsTrue(c = True); + Assert.IsTrue( not (c = b) ); + c := a <> a; + Assert.IsTrue(c = False); + Assert.IsTrue( a = 'abc'); + // greater than + c := a > b; Assert.IsTrue(c = False); + c := b > a; Assert.IsTrue(c = True); + Assert.IsTrue( a > 'aaa'); + // greater or equal than + c := a >= b; Assert.IsTrue(c = False); + c := b >= a; Assert.IsTrue(c = True); + c := a >= a; Assert.IsTrue(c = True); + Assert.IsTrue( a >= 'abc' ); + // less than + c := a < b; Assert.IsTrue(c = True); + c := b < a; Assert.IsTrue(c = False); + Assert.IsTrue( a < 'bbb'); + // less or equal than + c := a <= b; Assert.IsTrue(c = True); + c := b <= a; Assert.IsTrue(c = False); + c := a <= a; Assert.IsTrue(c = True); + Assert.IsTrue( a <= 'abc'); + // copy + c := a; + Assert.IsTrue( c = a); + Assert.IsTrue( VarIsSame(c, a) ); // checks if 2 variants share the same Python object. + // empty strings + a := VarPythonCreate(''); + Assert.IsTrue(a.length = 0); + Assert.IsTrue(a = ''); + Assert.IsTrue(string(a) = ''); + // Unicode strings + b := VarPythonEval( 'u"Hello world!"' ); + Assert.IsTrue( VarIsPythonUnicode(b) ); + w := FPythonEngine.PyUnicodeAsString(ExtractPythonObjectFrom(b)); + Assert.IsTrue( w = 'Hello world!'); + Assert.IsTrue( b = 'Hello world!'); + Assert.IsTrue( b <> a ); + _obj := FPythonEngine.PyUnicodeFromString(w); + try + c := VarPythonCreate( _obj ); + finally + FPythonEngine.Py_XDecRef(_obj); + end; + Assert.IsTrue(b = c); + Assert.IsTrue(c = w); + Assert.IsTrue( c = 'Hello world!'); + w := b; + Assert.IsTrue( b = w); + Assert.IsTrue( w = 'Hello world!'); + Assert.IsTrue( Length(w) = 12 ); + Assert.IsTrue( Length(w) = b.Length() ); + c := FPythonEngine.PyObjectAsVariant(ExtractPythonObjectFrom(b)); + Assert.IsTrue( c = b ); + Assert.IsTrue( c = w ); + Assert.IsTrue( c = 'Hello world!'); + Assert.IsTrue( VarType(c) and VarTypeMask = varUString ); + c := VarPythonCreate(w); + Assert.IsTrue( c = 'Hello world!'); + Assert.IsTrue( c = w ); + c := VarPythonCreate([w]); + Assert.IsTrue( VarIsPythonUnicode(c.GetItem(0)) ); + Assert.IsTrue( c.GetItem(0) = 'Hello world!'); + Assert.IsTrue( c.GetItem(0) = w ); + c := w; + b := VarPythonCreate(c); + Assert.IsTrue( VarIsPythonUnicode(b) ); + Assert.IsTrue( b = c ); + Assert.IsTrue( b = w ); + // empty strings + a := VarPythonEval( 'u""' ); + Assert.IsTrue(a.length = 0); + Assert.IsTrue(a = ''); + Assert.IsTrue(string(a) = ''); + Assert.IsTrue(WideString(a) = ''); +end; + +initialization + TDUnitX.RegisterTestFixture(TVarPythTest); + +end. diff --git a/Tests/WrapDelphiEventHandlerTest.pas b/Tests/WrapDelphiEventHandlerTest.pas index 9f3efdb5..d38c1d52 100644 --- a/Tests/WrapDelphiEventHandlerTest.pas +++ b/Tests/WrapDelphiEventHandlerTest.pas @@ -1,310 +1,310 @@ -unit WrapDelphiEventHandlerTest; - -interface - -uses - Types, - DUnitX.TestFramework, - PythonEngine, - WrapDelphi, System.Classes; - -type - TTestGetObjectEvent = procedure(Sender: TObject; var AObject: TObject) of object; - TTestGetValueEvent = procedure(Sender: TObject; var AValue: Double) of object; - - TTest = class(TComponent) - private - FObject: TObject; - FValue: Double; - FOnGetObject: TTestGetObjectEvent; - FOnGetValue: TTestGetValueEvent; - - ProcessCalled: Boolean; - - public - procedure Process; - - published - property OnGetObject: TTestGetObjectEvent read FOnGetObject write FOnGetObject; - property OnGetValue: TTestGetValueEvent read FOnGetValue write FOnGetValue; - end; - - - [TestFixture] - TTestWrapDelphiEventHandlers = class(TObject) - private - PythonEngine: TPythonEngine; - DelphiModule: TPythonModule; - DelphiWrapper: TPyDelphiWrapper; - - public - [SetupFixture] - procedure SetupFixture; - - [TearDownFixture] - procedure TearDownFixture; - - [Test] - procedure TestProcessWithValue; - [Test] - procedure TestProcessWithObject; - end; - -implementation - -uses - TypInfo; - -type - TTestRegistration = class(TRegisteredUnit) - public - function Name: string; override; - procedure RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); override; - end; - - TTestGetValueEventHandler = class(TEventHandler) - protected - procedure DoEvent(Sender: TObject; var Value: Double); - public - constructor Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; - PropertyInfo: PPropInfo; Callable: PPyObject); override; - class function GetTypeInfo: PTypeInfo; override; - end; - - TTestGetObjectEventHandler = class(TEventHandler) - protected - procedure DoEvent(Sender: TObject; var Obj: TObject); - - public - constructor Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; - PropertyInfo: PPropInfo; Callable: PPyObject); override; - class function GetTypeInfo: PTypeInfo; override; - end; - - -{ TTestRegistration } - -function TTestRegistration.Name: string; -begin - Result := 'Test'; -end; - -procedure TTestRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); -begin - inherited; - APyDelphiWrapper.EventHandlers.RegisterHandler(TTestGetValueEventHandler); - APyDelphiWrapper.EventHandlers.RegisterHandler(TTestGetObjectEventHandler); -end; - - -{ TTestGetValueEventHandler } - -constructor TTestGetValueEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; - PropertyInfo: PPropInfo; Callable: PPyObject); -var - Method: TMethod; -begin - inherited; - Method.Code := @TTestGetValueEventHandler.DoEvent; - Method.Data := Self; - SetMethodProp(Component, PropertyInfo, Method); -end; - -procedure TTestGetValueEventHandler.DoEvent(Sender: TObject; var Value: Double); -var - PySender: PPyObject; - PyValue: PPyObject; - PyArgs: PPyObject; - PyResult: PPyObject; - PyValueVarParam: TPyDelphiVarParameter; -begin - if not Assigned(PyDelphiWrapper) or not Assigned(Callable) or not PythonOk then - Exit; - with PyDelphiWrapper.Engine do - begin - PySender := PyDelphiWrapper.Wrap(Sender); - PyValue := CreateVarParam(PyDelphiWrapper, Value); - PyValueVarParam := PythonToDelphi(PyValue) as TPyDelphiVarParameter; - PyArgs := PyTuple_New(2); - PyTuple_SetItem(PyArgs, 0, PySender); - PyTuple_SetItem(PyArgs, 1, PyValue); - try - PyResult := PyObject_CallObject(Callable, PyArgs); - if Assigned(PyResult) then - begin - Py_XDECREF(PyResult); - Value := PyObjectAsVariant(PyValueVarParam.Value); - end; - finally - Py_DECREF(PyArgs) - end; - CheckError; - end; -end; - -class function TTestGetValueEventHandler.GetTypeInfo: PTypeInfo; -begin - Result := System.TypeInfo(TTestGetValueEvent); -end; - - -{ TTestGetObjectEventHandler } - -constructor TTestGetObjectEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; - PropertyInfo: PPropInfo; Callable: PPyObject); -var - Method: TMethod; -begin - inherited; - Method.Code := @TTestGetObjectEventHandler.DoEvent; - Method.Data := Self; - SetMethodProp(Component, PropertyInfo, Method); -end; - -procedure TTestGetObjectEventHandler.DoEvent(Sender: TObject; var Obj: TObject); -var - PySender: PPyObject; - PyObj: PPyObject; - PyArgs: PPyObject; - PyResult: PPyObject; - PyObjVarParam: TPyDelphiVarParameter; -begin - if not Assigned(PyDelphiWrapper) or not Assigned(Callable) or not PythonOk then - Exit; - with PyDelphiWrapper.Engine do - begin - PySender := PyDelphiWrapper.Wrap(Sender); - PyObj := CreateVarParam(PyDelphiWrapper, Obj); - PyObjVarParam := PythonToDelphi(PyObj) as TPyDelphiVarParameter; - PyArgs := PyTuple_New(2); - PyTuple_SetItem(PyArgs, 0, PySender); - PyTuple_SetItem(PyArgs, 1, PyObj); - try - PyResult := PyObject_CallObject(Callable, PyArgs); - if Assigned(PyResult) then - begin - Py_XDECREF(PyResult); - Obj := (PythonToDelphi(PyObjVarParam.Value) as TPyDelphiObject).DelphiObject; - end; - finally - Py_DECREF(PyArgs) - end; - CheckError; - end; -end; - -class function TTestGetObjectEventHandler.GetTypeInfo: PTypeInfo; -begin - Result := System.TypeInfo(TTestGetObjectEvent); -end; - - -{ TTest } - -procedure TTest.Process; -begin - ProcessCalled := True; - if Assigned(FOnGetObject) then - FOnGetObject(Self, FObject); - if Assigned(FOnGetValue) then - FOnGetValue(Self, FValue); -end; - - -{ TTestWrapDelphiEventHandlers } - -procedure TTestWrapDelphiEventHandlers.SetupFixture; -begin - PythonEngine := TPythonEngine.Create(nil); - PythonEngine.Name := 'PythonEngine'; - PythonEngine.AutoLoad := False; - PythonEngine.FatalAbort := True; - PythonEngine.FatalMsgDlg := True; - PythonEngine.UseLastKnownVersion := True; - PythonEngine.AutoFinalize := True; - PythonEngine.InitThreads := True; - PythonEngine.PyFlags := [pfInteractive]; - DelphiModule := TPythonModule.Create(nil); - - DelphiModule.Name := 'DelphiModule'; - DelphiModule.Engine := PythonEngine; - DelphiModule.ModuleName := 'delphi'; - - DelphiWrapper := TPyDelphiWrapper.Create(nil); - - DelphiWrapper.Name := 'PyDelphiWrapper'; - DelphiWrapper.Engine := PythonEngine; - DelphiWrapper.Module := DelphiModule; - - PythonEngine.LoadDll; -end; - -procedure TTestWrapDelphiEventHandlers.TearDownFixture; -begin - PythonEngine.Free; - DelphiWrapper.Free; - DelphiModule.Free; -end; - -procedure TTestWrapDelphiEventHandlers.TestProcessWithValue; -var - Test: TTest; - pyTest: PPyObject; -begin - Test := TTest.Create(nil); - try - pyTest := DelphiWrapper.Wrap(Test); - DelphiModule.SetVar('test', pyTest); - PythonEngine.Py_DECREF(pyTest); - PythonEngine.ExecString( - 'import delphi' + LF + - '' + LF + - 'def MyOnGetValue(sender, value):' + LF + - ' value.Value = 3.14' + LF + - '' + LF + - 'delphi.test.OnGetValue = MyOnGetValue' + LF + - 'delphi.test.Process()' + LF + - '' - ); - Assert.IsTrue(Test.ProcessCalled); - Assert.AreEqual(Test.FValue, 3.14); - finally - Test.Free; - end; -end; - - -procedure TTestWrapDelphiEventHandlers.TestProcessWithObject; -var - Test: TTest; - pyTest: PPyObject; -begin - Test := TTest.Create(nil); - try - pyTest := DelphiWrapper.Wrap(Test); - DelphiModule.SetVar('test', pyTest); - PythonEngine.Py_DECREF(pyTest); - PythonEngine.ExecString( - 'import delphi' + LF + - '' + LF + - 'def MyOnGetObject(sender, value):' + LF + - ' value.Value = sender' + LF + - '' + LF + - 'delphi.test.OnGetObject = MyOnGetObject' + LF + - 'delphi.test.Process()' + LF + - '' - ); - Assert.IsTrue(Test.ProcessCalled); - Assert.AreSame(Test, Test.FObject); - finally - Test.Free; - end; -end; - -initialization - -RegisteredUnits.Add(TTestRegistration.Create); - -TDUnitX.RegisterTestFixture(TTestWrapDelphiEventHandlers); - -end. +unit WrapDelphiEventHandlerTest; + +interface + +uses + Types, + DUnitX.TestFramework, + PythonEngine, + WrapDelphi, System.Classes; + +type + TTestGetObjectEvent = procedure(Sender: TObject; var AObject: TObject) of object; + TTestGetValueEvent = procedure(Sender: TObject; var AValue: Double) of object; + + TTest = class(TComponent) + private + FObject: TObject; + FValue: Double; + FOnGetObject: TTestGetObjectEvent; + FOnGetValue: TTestGetValueEvent; + + ProcessCalled: Boolean; + + public + procedure Process; + + published + property OnGetObject: TTestGetObjectEvent read FOnGetObject write FOnGetObject; + property OnGetValue: TTestGetValueEvent read FOnGetValue write FOnGetValue; + end; + + + [TestFixture] + TTestWrapDelphiEventHandlers = class(TObject) + private + PythonEngine: TPythonEngine; + DelphiModule: TPythonModule; + DelphiWrapper: TPyDelphiWrapper; + + public + [SetupFixture] + procedure SetupFixture; + + [TearDownFixture] + procedure TearDownFixture; + + [Test] + procedure TestProcessWithValue; + [Test] + procedure TestProcessWithObject; + end; + +implementation + +uses + TypInfo; + +type + TTestRegistration = class(TRegisteredUnit) + public + function Name: string; override; + procedure RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); override; + end; + + TTestGetValueEventHandler = class(TEventHandler) + protected + procedure DoEvent(Sender: TObject; var Value: Double); + public + constructor Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; + PropertyInfo: PPropInfo; Callable: PPyObject); override; + class function GetTypeInfo: PTypeInfo; override; + end; + + TTestGetObjectEventHandler = class(TEventHandler) + protected + procedure DoEvent(Sender: TObject; var Obj: TObject); + + public + constructor Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; + PropertyInfo: PPropInfo; Callable: PPyObject); override; + class function GetTypeInfo: PTypeInfo; override; + end; + + +{ TTestRegistration } + +function TTestRegistration.Name: string; +begin + Result := 'Test'; +end; + +procedure TTestRegistration.RegisterWrappers(APyDelphiWrapper: TPyDelphiWrapper); +begin + inherited; + APyDelphiWrapper.EventHandlers.RegisterHandler(TTestGetValueEventHandler); + APyDelphiWrapper.EventHandlers.RegisterHandler(TTestGetObjectEventHandler); +end; + + +{ TTestGetValueEventHandler } + +constructor TTestGetValueEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; + PropertyInfo: PPropInfo; Callable: PPyObject); +var + Method: TMethod; +begin + inherited; + Method.Code := @TTestGetValueEventHandler.DoEvent; + Method.Data := Self; + SetMethodProp(Component, PropertyInfo, Method); +end; + +procedure TTestGetValueEventHandler.DoEvent(Sender: TObject; var Value: Double); +var + PySender: PPyObject; + PyValue: PPyObject; + PyArgs: PPyObject; + PyResult: PPyObject; + PyValueVarParam: TPyDelphiVarParameter; +begin + if not Assigned(PyDelphiWrapper) or not Assigned(Callable) or not PythonOk then + Exit; + with PyDelphiWrapper.Engine do + begin + PySender := PyDelphiWrapper.Wrap(Sender); + PyValue := CreateVarParam(PyDelphiWrapper, Value); + PyValueVarParam := PythonToDelphi(PyValue) as TPyDelphiVarParameter; + PyArgs := PyTuple_New(2); + PyTuple_SetItem(PyArgs, 0, PySender); + PyTuple_SetItem(PyArgs, 1, PyValue); + try + PyResult := PyObject_CallObject(Callable, PyArgs); + if Assigned(PyResult) then + begin + Py_XDECREF(PyResult); + Value := PyObjectAsVariant(PyValueVarParam.Value); + end; + finally + Py_DECREF(PyArgs) + end; + CheckError; + end; +end; + +class function TTestGetValueEventHandler.GetTypeInfo: PTypeInfo; +begin + Result := System.TypeInfo(TTestGetValueEvent); +end; + + +{ TTestGetObjectEventHandler } + +constructor TTestGetObjectEventHandler.Create(PyDelphiWrapper: TPyDelphiWrapper; Component: TObject; + PropertyInfo: PPropInfo; Callable: PPyObject); +var + Method: TMethod; +begin + inherited; + Method.Code := @TTestGetObjectEventHandler.DoEvent; + Method.Data := Self; + SetMethodProp(Component, PropertyInfo, Method); +end; + +procedure TTestGetObjectEventHandler.DoEvent(Sender: TObject; var Obj: TObject); +var + PySender: PPyObject; + PyObj: PPyObject; + PyArgs: PPyObject; + PyResult: PPyObject; + PyObjVarParam: TPyDelphiVarParameter; +begin + if not Assigned(PyDelphiWrapper) or not Assigned(Callable) or not PythonOk then + Exit; + with PyDelphiWrapper.Engine do + begin + PySender := PyDelphiWrapper.Wrap(Sender); + PyObj := CreateVarParam(PyDelphiWrapper, Obj); + PyObjVarParam := PythonToDelphi(PyObj) as TPyDelphiVarParameter; + PyArgs := PyTuple_New(2); + PyTuple_SetItem(PyArgs, 0, PySender); + PyTuple_SetItem(PyArgs, 1, PyObj); + try + PyResult := PyObject_CallObject(Callable, PyArgs); + if Assigned(PyResult) then + begin + Py_XDECREF(PyResult); + Obj := (PythonToDelphi(PyObjVarParam.Value) as TPyDelphiObject).DelphiObject; + end; + finally + Py_DECREF(PyArgs) + end; + CheckError; + end; +end; + +class function TTestGetObjectEventHandler.GetTypeInfo: PTypeInfo; +begin + Result := System.TypeInfo(TTestGetObjectEvent); +end; + + +{ TTest } + +procedure TTest.Process; +begin + ProcessCalled := True; + if Assigned(FOnGetObject) then + FOnGetObject(Self, FObject); + if Assigned(FOnGetValue) then + FOnGetValue(Self, FValue); +end; + + +{ TTestWrapDelphiEventHandlers } + +procedure TTestWrapDelphiEventHandlers.SetupFixture; +begin + PythonEngine := TPythonEngine.Create(nil); + PythonEngine.Name := 'PythonEngine'; + PythonEngine.AutoLoad := False; + PythonEngine.FatalAbort := True; + PythonEngine.FatalMsgDlg := True; + PythonEngine.UseLastKnownVersion := True; + PythonEngine.AutoFinalize := True; + PythonEngine.InitThreads := True; + PythonEngine.PyFlags := [pfInteractive]; + DelphiModule := TPythonModule.Create(nil); + + DelphiModule.Name := 'DelphiModule'; + DelphiModule.Engine := PythonEngine; + DelphiModule.ModuleName := 'delphi'; + + DelphiWrapper := TPyDelphiWrapper.Create(nil); + + DelphiWrapper.Name := 'PyDelphiWrapper'; + DelphiWrapper.Engine := PythonEngine; + DelphiWrapper.Module := DelphiModule; + + PythonEngine.LoadDll; +end; + +procedure TTestWrapDelphiEventHandlers.TearDownFixture; +begin + PythonEngine.Free; + DelphiWrapper.Free; + DelphiModule.Free; +end; + +procedure TTestWrapDelphiEventHandlers.TestProcessWithValue; +var + Test: TTest; + pyTest: PPyObject; +begin + Test := TTest.Create(nil); + try + pyTest := DelphiWrapper.Wrap(Test); + DelphiModule.SetVar('test', pyTest); + PythonEngine.Py_DECREF(pyTest); + PythonEngine.ExecString( + 'import delphi' + LF + + '' + LF + + 'def MyOnGetValue(sender, value):' + LF + + ' value.Value = 3.14' + LF + + '' + LF + + 'delphi.test.OnGetValue = MyOnGetValue' + LF + + 'delphi.test.Process()' + LF + + '' + ); + Assert.IsTrue(Test.ProcessCalled); + Assert.AreEqual(Test.FValue, 3.14); + finally + Test.Free; + end; +end; + + +procedure TTestWrapDelphiEventHandlers.TestProcessWithObject; +var + Test: TTest; + pyTest: PPyObject; +begin + Test := TTest.Create(nil); + try + pyTest := DelphiWrapper.Wrap(Test); + DelphiModule.SetVar('test', pyTest); + PythonEngine.Py_DECREF(pyTest); + PythonEngine.ExecString( + 'import delphi' + LF + + '' + LF + + 'def MyOnGetObject(sender, value):' + LF + + ' value.Value = sender' + LF + + '' + LF + + 'delphi.test.OnGetObject = MyOnGetObject' + LF + + 'delphi.test.Process()' + LF + + '' + ); + Assert.IsTrue(Test.ProcessCalled); + Assert.AreSame(Test, Test.FObject); + finally + Test.Free; + end; +end; + +initialization + +RegisteredUnits.Add(TTestRegistration.Create); + +TDUnitX.RegisterTestFixture(TTestWrapDelphiEventHandlers); + +end. diff --git a/Tutorials/README.md b/Tutorials/README.md index c2ccf162..d71b1791 100644 --- a/Tutorials/README.md +++ b/Tutorials/README.md @@ -1,10 +1,10 @@ -## Tutorials - -This folder contains text and video tutorials accompanied with slides and demo source code. - -- [Getting Started with Python4Delphi](https://youtu.be/hjY6lBgrHhM) -- [Overview Video](https://youtu.be/jLuxTfct3CU) -- [Webinar I](https://github.com/pyscripter/python4delphi/tree/master/Tutorials/Webinar%20I) -- [Webinar II](https://github.com/pyscripter/python4delphi/tree/master/Tutorials/Webinar%20II) -- [Introductory tutorial](https://github.com/pyscripter/python4delphi/wiki/Files/Chapter80Tutorial.pdf) by Dr K. R. Bond. +## Tutorials + +This folder contains text and video tutorials accompanied with slides and demo source code. + +- [Getting Started with Python4Delphi](https://youtu.be/hjY6lBgrHhM) +- [Overview Video](https://youtu.be/jLuxTfct3CU) +- [Webinar I](https://github.com/pyscripter/python4delphi/tree/master/Tutorials/Webinar%20I) +- [Webinar II](https://github.com/pyscripter/python4delphi/tree/master/Tutorials/Webinar%20II) +- [Introductory tutorial](https://github.com/pyscripter/python4delphi/wiki/Files/Chapter80Tutorial.pdf) by Dr K. R. Bond. - [Another tutorial](http://www.softwareschule.ch/download/maxbox_starter86.pdf) by Max Kleiner \ No newline at end of file diff --git a/Tutorials/Webinar I/README.md b/Tutorials/Webinar I/README.md index cd9d054c..fee559c1 100644 --- a/Tutorials/Webinar I/README.md +++ b/Tutorials/Webinar I/README.md @@ -1,12 +1,12 @@ - -# Webinar: – Python for Delphi Developers – Part I - -![P4D Logo](https://github.com/pyscripter/python4delphi/wiki/Images/Python4Delphi-Libraries.png) - -- [Webinar Info](https://blogs.embarcadero.com/?p=55050) - -- [Video replay](https://youtu.be/aCz5h96ObUM) - -- [Slides](https://www.slideshare.net/embarcaderotechnet/python-for-delphi-developers-part-1-introduction) - + +# Webinar: – Python for Delphi Developers – Part I + +![P4D Logo](https://github.com/pyscripter/python4delphi/wiki/Images/Python4Delphi-Libraries.png) + +- [Webinar Info](https://blogs.embarcadero.com/?p=55050) + +- [Video replay](https://youtu.be/aCz5h96ObUM) + +- [Slides](https://www.slideshare.net/embarcaderotechnet/python-for-delphi-developers-part-1-introduction) + - Source code included in this folder \ No newline at end of file diff --git a/Unsupported/README.md b/Unsupported/README.md index 4613dfaf..e72ff9c6 100644 --- a/Unsupported/README.md +++ b/Unsupported/README.md @@ -1,6 +1,6 @@ -# Unsupported folder contents - -This folder contains: -- Old and to a large extent obsolete documentation (Old docs). -- VCL components providing python wrappers for TDataset, TBDEDataset, TTable and TQuery. +# Unsupported folder contents + +This folder contains: +- Old and to a large extent obsolete documentation (Old docs). +- VCL components providing python wrappers for TDataset, TBDEDataset, TTable and TQuery. (VCL folder). Deprecated and unsupported. They are superseded by WrapDelphi and WrapFireDAC. \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy