diff --git a/assets/serve_a_folder/bun_test.ts b/assets/serve_a_folder/bun_test.ts new file mode 100644 index 0000000..b55ccf9 --- /dev/null +++ b/assets/serve_a_folder/bun_test.ts @@ -0,0 +1,26 @@ +// This file gets called like follow: +// +// 1. UI `Index.html` request: +// `http://localhost:xxx/bun_test.ts?foo=123&bar=456` +// +// 2. WebUI runs command: +// `bun run "bun_test.ts" "foo=123&bar=456"` +// +// 3. Bun parses args and prints the response + +// Get Query (HTTP GET) +const args = process.argv.slice(2); +const query = args[0]; + +// Variables +let foo: string = ''; +let bar: string = ''; + +// Read Query +const params = new URLSearchParams(query); +for (const [key, value] of params.entries()) { + if (key === 'foo') foo = value; // 123 + else if (key === 'bar') bar = value; // 456 +} + +console.log('Response from Bun: ' + (parseInt(foo) + parseInt(bar))); // 579 diff --git a/assets/serve_a_folder/deno_test.ts b/assets/serve_a_folder/deno_test.ts index 9e7536b..7ab370d 100644 --- a/assets/serve_a_folder/deno_test.ts +++ b/assets/serve_a_folder/deno_test.ts @@ -1,7 +1,12 @@ // This file gets called like follow: -// `Index.html` -> -// `http://localhost:xxx/deno_test.ts?foo=123&bar=456` -> -// `deno run --allow-all --unstable "deno_test.ts" "foo=123&bar=456"` +// +// 1. UI `Index.html` request: +// `http://localhost:xxx/deno_test.ts?foo=123&bar=456` +// +// 2. WebUI runs command: +// `deno run --allow-all --unstable "deno_test.ts" "foo=123&bar=456"` +// +// 3. Deno parse args and print the response // Import parse() import { parse } from 'https://deno.land/std/flags/mod.ts'; @@ -21,4 +26,4 @@ for (const [key, value] of params.entries()) { else if (key == 'bar') bar = value; // 456 } -console.error('foo + bar = ' + (parseInt(foo) + parseInt(bar))); // 579 +console.log('Response from Deno: ' + (parseInt(foo) + parseInt(bar))); // 579 diff --git a/assets/serve_a_folder/index.html b/assets/serve_a_folder/index.html index 54d406b..c77e094 100644 --- a/assets/serve_a_folder/index.html +++ b/assets/serve_a_folder/index.html @@ -66,7 +66,13 @@

Serve a Folder Example (C)

By a simple HTTP request "deno_test.ts?foo=60&bar=40"

- + +
+
+ +
+
+

Second Page As A Simple Link (Local file)


@@ -86,17 +92,36 @@

Dynamic file example (Embedded)

- + + diff --git a/assets/virtual_file_system/favicon.ico b/assets/virtual_file_system/favicon.ico new file mode 100644 index 0000000..22591bf Binary files /dev/null and b/assets/virtual_file_system/favicon.ico differ diff --git a/assets/virtual_file_system/favicon.svg b/assets/virtual_file_system/favicon.svg new file mode 100644 index 0000000..f5ded74 --- /dev/null +++ b/assets/virtual_file_system/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/virtual_file_system/index.html b/assets/virtual_file_system/index.html new file mode 100644 index 0000000..8717413 --- /dev/null +++ b/assets/virtual_file_system/index.html @@ -0,0 +1,135 @@ + + + + + WebUI - Virtual File System + + + +

Virtual File System Example

+
+ +
+

+ This file is embedded in this application.
+

+

/sub

+
+ + + + + + + + diff --git a/assets/virtual_file_system/sub/index.html b/assets/virtual_file_system/sub/index.html new file mode 100644 index 0000000..ae8e0ad --- /dev/null +++ b/assets/virtual_file_system/sub/index.html @@ -0,0 +1,64 @@ + + + + + WebUI - Virtual File System + + + +

+ This is another file embedded in this application.
+

+
+ + + + + + + diff --git a/assets/virtual_file_system/svg/webui.svg b/assets/virtual_file_system/svg/webui.svg new file mode 100644 index 0000000..5cf0cf7 --- /dev/null +++ b/assets/virtual_file_system/svg/webui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/web_app_multi_client/index.html b/assets/web_app_multi_client/index.html new file mode 100644 index 0000000..662b229 --- /dev/null +++ b/assets/web_app_multi_client/index.html @@ -0,0 +1,155 @@ + + + + + WebUI - Web App Multi-Client Example + + + +

Web App Multi-Client Example

+
+ Connecting... +
+
+ You are user numer 0 +
+
+ Your connection numer is 0 +
+
+ There is 0 users connected, and 0 tab opened. +
+
+ Current user input: Reload This Page +
+
+ All users input: +
+
+ Open New Tab +
+
+ +
+
+
+ Note:
Copy URL, and open it in a private window, or another web browser to create new users. + + + + + + + diff --git a/bin32/arm/webui-2.so b/bin32/arm/webui-2.so index ca4d520..4e7f40b 100644 Binary files a/bin32/arm/webui-2.so and b/bin32/arm/webui-2.so differ diff --git a/bin32/arm/webui-2_debug.so b/bin32/arm/webui-2_debug.so index a09e66e..8245f7b 100644 Binary files a/bin32/arm/webui-2_debug.so and b/bin32/arm/webui-2_debug.so differ diff --git a/bin32/webui-2.dll b/bin32/webui-2.dll index f3e5d9a..4a4d4a9 100644 Binary files a/bin32/webui-2.dll and b/bin32/webui-2.dll differ diff --git a/bin32/webui-2_debug.dll b/bin32/webui-2_debug.dll index 09935da..d3b7446 100644 Binary files a/bin32/webui-2_debug.dll and b/bin32/webui-2_debug.dll differ diff --git a/bin64/arm64/webui-2.so b/bin64/arm64/webui-2.so index 0f5861c..b89cc3b 100644 Binary files a/bin64/arm64/webui-2.so and b/bin64/arm64/webui-2.so differ diff --git a/bin64/arm64/webui-2_debug.so b/bin64/arm64/webui-2_debug.so index 2d9d0e4..14dfebb 100644 Binary files a/bin64/arm64/webui-2_debug.so and b/bin64/arm64/webui-2_debug.so differ diff --git a/bin64/webui-2.dll b/bin64/webui-2.dll index ffd9a4c..57ee6e1 100644 Binary files a/bin64/webui-2.dll and b/bin64/webui-2.dll differ diff --git a/bin64/webui-2.dylib b/bin64/webui-2.dylib index 7cbe993..4503f20 100644 Binary files a/bin64/webui-2.dylib and b/bin64/webui-2.dylib differ diff --git a/bin64/webui-2.so b/bin64/webui-2.so index 9f805d9..ab2e4e7 100644 Binary files a/bin64/webui-2.so and b/bin64/webui-2.so differ diff --git a/bin64/webui-2_debug.dll b/bin64/webui-2_debug.dll index 30df621..a387a5e 100644 Binary files a/bin64/webui-2_debug.dll and b/bin64/webui-2_debug.dll differ diff --git a/bin64/webui-2_debug.dylib b/bin64/webui-2_debug.dylib index 84eb216..a903b2e 100644 Binary files a/bin64/webui-2_debug.dylib and b/bin64/webui-2_debug.dylib differ diff --git a/bin64/webui-2_debug.so b/bin64/webui-2_debug.so index 1e469e4..c456d78 100644 Binary files a/bin64/webui-2_debug.so and b/bin64/webui-2_debug.so differ diff --git a/demos/Delphi_Console/call_delphi_from_js/call_delphi_from_js.dproj b/demos/Delphi_Console/call_delphi_from_js/call_delphi_from_js.dproj index 8a0a603..6683d5a 100644 --- a/demos/Delphi_Console/call_delphi_from_js/call_delphi_from_js.dproj +++ b/demos/Delphi_Console/call_delphi_from_js/call_delphi_from_js.dproj @@ -9,10 +9,41 @@ 3 Console call_delphi_from_js.dpr + call_delphi_from_js true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -59,6 +90,36 @@ 3082 CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -822,6 +883,9 @@ 1 + + 1 + @@ -1114,8 +1178,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_Console/call_js_from_delphi/call_js_from_delphi.dproj b/demos/Delphi_Console/call_js_from_delphi/call_js_from_delphi.dproj index 4b77724..561b11e 100644 --- a/demos/Delphi_Console/call_js_from_delphi/call_js_from_delphi.dproj +++ b/demos/Delphi_Console/call_js_from_delphi/call_js_from_delphi.dproj @@ -9,10 +9,41 @@ 3 Console call_js_from_delphi.dpr + call_js_from_delphi true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -59,6 +90,36 @@ 3082 CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -822,6 +883,9 @@ 1 + + 1 + @@ -1114,8 +1178,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_Console/custom_web_server/custom_web_server.dproj b/demos/Delphi_Console/custom_web_server/custom_web_server.dproj index 9b99c13..e586178 100644 --- a/demos/Delphi_Console/custom_web_server/custom_web_server.dproj +++ b/demos/Delphi_Console/custom_web_server/custom_web_server.dproj @@ -9,10 +9,41 @@ 3 Console custom_web_server.dpr + custom_web_server true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -59,6 +90,36 @@ 3082 CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -822,6 +883,9 @@ 1 + + 1 + @@ -1114,8 +1178,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_Console/serve_a_folder/serve_a_folder.dproj b/demos/Delphi_Console/serve_a_folder/serve_a_folder.dproj index c7d25e1..82c5256 100644 --- a/demos/Delphi_Console/serve_a_folder/serve_a_folder.dproj +++ b/demos/Delphi_Console/serve_a_folder/serve_a_folder.dproj @@ -9,10 +9,41 @@ 3 Console serve_a_folder.dpr + serve_a_folder true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -59,6 +90,36 @@ 3082 CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -822,6 +883,9 @@ 1 + + 1 + @@ -1114,8 +1178,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_Console/text_editor/text_editor.dproj b/demos/Delphi_Console/text_editor/text_editor.dproj index 1bb9b2f..cd2f2ed 100644 --- a/demos/Delphi_Console/text_editor/text_editor.dproj +++ b/demos/Delphi_Console/text_editor/text_editor.dproj @@ -9,10 +9,41 @@ 3 Console text_editor.dpr + text_editor true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -59,6 +90,36 @@ 3082 CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -822,6 +883,9 @@ 1 + + 1 + @@ -1114,8 +1178,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_Console/virtual_file_system/00-DeleteDCUs.bat b/demos/Delphi_Console/virtual_file_system/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_Console/virtual_file_system/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_Console/virtual_file_system/virtual_file_system.dpr b/demos/Delphi_Console/virtual_file_system/virtual_file_system.dpr new file mode 100644 index 0000000..7130db6 --- /dev/null +++ b/demos/Delphi_Console/virtual_file_system/virtual_file_system.dpr @@ -0,0 +1,154 @@ +program virtual_file_system; + +{$I ..\..\..\source\uWebUI.inc} + +{$APPTYPE CONSOLE} + +{$R *.res} + +uses + System.SysUtils, System.Classes, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants, uWebUIMiscFunctions; + +var + LWindow : IWebUIWindow; + +procedure exit_app(e: PWebUIEvent); cdecl; +begin + WebUI.Exit; +end; + +function vfs(const filename: PWebUIChar; len: PInteger): Pointer; cdecl; +var + LFilename, LPath : string; + LResultStream : TMemoryStream; + LFileStream : TMemoryStream; + LFileLength : integer; + LTotalLength : integer; + LHTTPHeaderTemplate : AnsiString; + LHTTPHeaderLength : integer; + LHTTPHeader, LContent : string; + LNullChar: AnsiString; + LNullCharLength : integer; +begin + len^ := 0; + Result := nil; + LFileStream := nil; + LResultStream := nil; + LFilename := UTF8ToString(PAnsiChar(filename)); + WriteLn('File: ' + LFilename); + + try + // Set the web-server root folder for the first window + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\virtual_file_system\', True); + LFilename := StringReplace(LFilename, '/', '\', [rfReplaceAll]); + if (pos('\', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ELSE} + LPath := CustomAbsolutePath('../assets/virtual_file_system/', True); + if (pos('/', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ENDIF} + LPath := LPath + LFilename; + + // This function reads files in the drive but you can get the contents from + // any other source like resources. + try + LResultStream := TMemoryStream.Create; + + if FileExists(LPath) then + begin + LFileStream := TMemoryStream.Create; + LFileStream.LoadFromFile(LPath); + LFileLength := LFileStream.Size; + LFileStream.Position := 0; + + LHTTPHeader := 'HTTP/1.1 200 OK' + CRLF + + 'Content-Type: ' + WebUI.GetMimeType(LFilename) + CRLF + + 'Content-Length: ' + inttostr(LFileLength) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF; + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + LHTTPHeaderLength := length(LHTTPHeaderTemplate); + + LNullChar := AnsiChar(#0); + LNullCharLength := length(LNullChar); + + LResultStream.Write(LHTTPHeaderTemplate[1], LHTTPHeaderLength); + LResultStream.Write(LFileStream.Memory^, LFileLength); + LResultStream.Write(LNullChar[1], LNullCharLength); + LResultStream.Position := 0; + + LTotalLength := LHTTPHeaderLength + LFileLength + LNullCharLength; + Result := webui_malloc(LTotalLength); + len^ := LResultStream.Read(Result^, LTotalLength); + end + else + if DirectoryExists(LPath) then + begin + // Redirect requests to directories to the index.html file. + + LHTTPHeader := 'HTTP/1.1 302 Found' + CRLF + + 'Location: ' + LFilename + '/index.html' + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + #0; + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end + else + begin + LContent := 'Resource Not Found' + + '

The resource you requested has not been found ' + + 'at the specified address. Please check the spelling of ' + + 'the address.

'; + + LHTTPHeader := 'HTTP/1.1 404 Not Found' + CRLF + + 'Content-Type: text/html' + CRLF + + 'Content-Length: ' + inttostr(length(LContent)) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + + LContent + #0; + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end; + finally + if assigned(LFileStream) then + FreeAndNil(LFileStream); + + if assigned(LResultStream) then + FreeAndNil(LResultStream); + end; + except + on e : exception do + if CustomExceptionHandler('vfs', e) then raise; + end; +end; + +begin + try + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + if WebUI.Initialize then + begin + LWindow := TWebUIWindow.Create; + + // Bind HTML element IDs with a C functions + LWindow.Bind('Exit', exit_app); + + // Set a custom files handler + LWindow.SetFileHandler(vfs); + + // Show a new window + LWindow.Show('index.html'); + + // Wait until all windows get closed + WebUI.Wait; + end; + except + on E: Exception do + Writeln(E.ClassName, ': ', E.Message); + end; +end. diff --git a/demos/Delphi_Console/virtual_file_system/virtual_file_system.dproj b/demos/Delphi_Console/virtual_file_system/virtual_file_system.dproj new file mode 100644 index 0000000..ac9441b --- /dev/null +++ b/demos/Delphi_Console/virtual_file_system/virtual_file_system.dproj @@ -0,0 +1,1199 @@ + + + {8E522B15-515F-4CCC-8E2A-78AC424DEA2C} + 20.1 + None + True + Debug + Win64 + 3 + Console + virtual_file_system.dpr + virtual_file_system + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + virtual_file_system + ..\..\..\source;$(DCC_UnitSearchPath) + 3082 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + 1033 + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin32 + (None) + none + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + 1033 + (None) + ..\..\..\bin64 + none + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + + + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + Application + + + + virtual_file_system.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + true + + + + + true + + + + + true + + + + + virtual_file_system.exe + true + + + + + virtual_file_system.rsm + true + + + + + virtual_file_system.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + False + False + False + False + False + False + True + True + + + 12 + + + + + diff --git a/demos/Delphi_Console/web_app_multi_client/00-DeleteDCUs.bat b/demos/Delphi_Console/web_app_multi_client/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_Console/web_app_multi_client/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dpr b/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dpr new file mode 100644 index 0000000..5cb297a --- /dev/null +++ b/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dpr @@ -0,0 +1,173 @@ +program web_app_multi_client; + +{$I ..\..\..\source\uWebUI.inc} + +{$APPTYPE CONSOLE} + +{$R *.res} + +uses + System.SysUtils, System.Classes, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants, uWebUIMiscFunctions; + +var + LWindow : IWebUIWindow; + LPath, LUrl, LPublicInput : string; + LPrivateInput_arr : array [0..255] of string; + LUsers_count, LTab_count : integer; + LContents : TStringList; + +procedure exit_app(e: PWebUIEvent); cdecl; +begin + WebUI.Exit; +end; + +procedure save(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; +begin + LEvent := TWebUIEventHandler.Create(e); + // Get input value and save it in the array + LPrivateInput_arr[LEvent.ClientID] := LEvent.GetString; + LEvent.Free; +end; + +procedure saveAll(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; +begin + LEvent := TWebUIEventHandler.Create(e); + // Get input value and save it + LPublicInput := LEvent.GetString; + // Update all users + LEvent.Window.Run('document.getElementById("publicInput").value = "' + LPublicInput + '";'); + LEvent.Free; +end; + +procedure events(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; + LCookies : string; + LClientID : TWebUIClientID; + LConnectiondID : TWebUIConnectionID; +begin + // This function gets called every time + // there is an event + + LEvent := TWebUIEventHandler.Create(e); + + // Full web browser cookies + LCookies := LEvent.Cookies; + + // Static client (Based on web browser cookies) + LClientID := LEvent.ClientID; + + // Dynamic client connection ID (Changes on connect/disconnect events) + LConnectiondID := LEvent.ConnectionID; + + case LEvent.EventType of + WEBUI_EVENT_DISCONNECTED : + begin + // Disconnection + if (LTab_count > 0) then + dec(LTab_count); + end; + + WEBUI_EVENT_CONNECTED : + begin + // New connection + if (LUsers_count < succ(LClientID)) then // +1 because it start from 0 + LUsers_count := succ(LClientID); + + inc(LTab_count); + end; + end; + + + // Update this current user only + + // status + LEvent.RunClient('document.getElementById("status").innerText = "Connected!";'); + + // userNumber + LEvent.RunClient('document.getElementById("userNumber").innerText = "' + inttostr(LClientID) + '";'); + + // connectionNumber + LEvent.RunClient('document.getElementById("connectionNumber").innerText = "' + inttostr(LConnectiondID) + '";'); + + // privateInput + LEvent.RunClient('document.getElementById("privateInput").value = "' + LPrivateInput_arr[LClientID] +'";'); + + // publicInput + LEvent.RunClient('document.getElementById("publicInput").value = "' + LPublicInput + '";'); + + + // Update all connected users + + // userCount + LEvent.RunClient('document.getElementById("userCount").innerText = "' + inttostr(LUsers_count) + '";'); + + // tabCount + LEvent.RunClient('document.getElementById("tabCount").innerText = "' + inttostr(LTab_count) + '";'); + + LEvent.Free; + + if LTab_count = 0 then + WebUI.Exit; +end; + +begin + try + LUsers_count := 0; + LTab_count := 0; + + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + if WebUI.Initialize then + begin + // Allow multi-user connection + WebUI.SetConfig(multi_client, True); + + // Allow cookies + WebUI.SetConfig(use_cookies, True); + + // Create new window + LWindow := TWebUIWindow.Create; + + // Bind HTML with a C functions + LWindow.Bind('save', save); + LWindow.Bind('saveAll', saveAll); + LWindow.Bind('exit_app', exit_app); + + // Bind all events + LWindow.BindAllEvents(events); + + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\web_app_multi_client\', True); + {$ELSE} + LPath := CustomAbsolutePath('../assets/web_app_multi_client/', True); + {$ENDIF} + + LPath := LPath + 'index.html'; + + if FileExists(LPath) then + begin + LContents := TStringList.Create; + LContents.LoadFromFile(LPath); + // Start server only + LUrl := LWindow.StartServer(LContents.Text); + LContents.Free; + // Open a new page in the default native web browser + WebUI.OpenURL(LUrl); + + WebUI.Wait; + end; + end; + except + on E: Exception do + Writeln(E.ClassName, ': ', E.Message); + end; +end. diff --git a/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dproj b/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dproj new file mode 100644 index 0000000..7ba2a75 --- /dev/null +++ b/demos/Delphi_Console/web_app_multi_client/web_app_multi_client.dproj @@ -0,0 +1,1199 @@ + + + {8E522B15-515F-4CCC-8E2A-78AC424DEA2C} + 20.1 + None + True + Debug + Win64 + 3 + Console + web_app_multi_client.dpr + web_app_multi_client + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + web_app_multi_client + ..\..\..\source;$(DCC_UnitSearchPath) + 3082 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + + 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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + + + CFBundleName=$(MSBuildProjectName);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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + 1033 + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin32 + (None) + none + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + 1033 + (None) + ..\..\..\bin64 + none + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + + + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + Application + + + + web_app_multi_client.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + true + + + + + true + + + + + true + + + + + web_app_multi_client.exe + true + + + + + web_app_multi_client.rsm + true + + + + + web_app_multi_client.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + False + False + False + False + False + False + True + True + + + 12 + + + + + diff --git a/demos/Delphi_FMX/call_delphi_from_js/call_delphi_from_js.dproj b/demos/Delphi_FMX/call_delphi_from_js/call_delphi_from_js.dproj index b171669..c582893 100644 --- a/demos/Delphi_FMX/call_delphi_from_js/call_delphi_from_js.dproj +++ b/demos/Delphi_FMX/call_delphi_from_js/call_delphi_from_js.dproj @@ -9,10 +9,41 @@ 3 Application call_delphi_from_js.dpr + call_delphi_from_js
true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -80,6 +111,110 @@ ..\..\..\source;$(DCC_UnitSearchPath) FMX;$(DCC_Define) + + 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_LauncherIcon_192x192.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + 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 + + + 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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -846,6 +981,9 @@ 1 + + 1 + @@ -1138,8 +1276,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_FMX/text_editor/text_editor.dproj b/demos/Delphi_FMX/text_editor/text_editor.dproj index a51d53d..3a38a08 100644 --- a/demos/Delphi_FMX/text_editor/text_editor.dproj +++ b/demos/Delphi_FMX/text_editor/text_editor.dproj @@ -9,10 +9,41 @@ 3 Application text_editor.dpr + text_editor true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -80,6 +111,110 @@ ..\..\..\source;$(DCC_UnitSearchPath) FMX;$(DCC_Define) + + 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_LauncherIcon_192x192.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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.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 + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + 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 + + + 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 + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + 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;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) @@ -858,6 +993,9 @@ 1 + + 1 + @@ -1150,8 +1288,15 @@ + + False + False + False + False + False + False True True diff --git a/demos/Delphi_FMX/virtual_file_system/00-DeleteDCUs.bat b/demos/Delphi_FMX/virtual_file_system/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_FMX/virtual_file_system/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_FMX/virtual_file_system/uMainForm.fmx b/demos/Delphi_FMX/virtual_file_system/uMainForm.fmx new file mode 100644 index 0000000..9fe520a --- /dev/null +++ b/demos/Delphi_FMX/virtual_file_system/uMainForm.fmx @@ -0,0 +1,43 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = Single + Caption = 'serve_a_folder' + ClientHeight = 52 + ClientWidth = 450 + Padding.Left = 10.000000000000000000 + Padding.Top = 10.000000000000000000 + Padding.Right = 10.000000000000000000 + Padding.Bottom = 10.000000000000000000 + Position = ScreenCenter + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + OnCloseQuery = FormCloseQuery + DesignerMasterStyle = 0 + object MainPanel: TPanel + Align = Client + Padding.Left = 5.000000000000000000 + Padding.Top = 5.000000000000000000 + Padding.Right = 5.000000000000000000 + Padding.Bottom = 5.000000000000000000 + Size.Width = 430.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object ShowBrowserBtn: TButton + Align = Top + Position.X = 5.000000000000000000 + Position.Y = 5.000000000000000000 + Size.Width = 420.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + Text = 'Show browser' + TextSettings.Trimming = None + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Delphi_FMX/virtual_file_system/uMainForm.pas b/demos/Delphi_FMX/virtual_file_system/uMainForm.pas new file mode 100644 index 0000000..1510d0b --- /dev/null +++ b/demos/Delphi_FMX/virtual_file_system/uMainForm.pas @@ -0,0 +1,199 @@ +unit uMainForm; + +{$I ..\..\..\source\uWebUI.inc} + +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, FMX.Memo.Types, FMX.ScrollBox, + FMX.Memo, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + private + FWindow : IWebUIWindow; + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.fmx} + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + MainPanel.Enabled := WebUI.Initialize; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'Exit') then + exit_app(aEvent); +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + TThread.ForceQueue(nil, + procedure + begin + Close; + end); +end; + +function vfs(const filename: PWebUIChar; len: PInteger): Pointer; cdecl; +var + LFilename, LPath : string; + LResultStream : TMemoryStream; + LFileStream : TMemoryStream; + LFileLength : integer; + LTotalLength : integer; + LHTTPHeaderTemplate : AnsiString; + LHTTPHeaderLength : integer; + LHTTPHeader, LContent : string; + LNullChar: AnsiString; + LNullCharLength : integer; +begin + len^ := 0; + Result := nil; + LFileStream := nil; + LResultStream := nil; + LFilename := UTF8ToString(PAnsiChar(filename)); + + try + // Set the web-server root folder for the first window + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\virtual_file_system\', True); + LFilename := StringReplace(LFilename, '/', '\', [rfReplaceAll]); + if (pos('\', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ELSE} + LPath := CustomAbsolutePath('../assets/virtual_file_system/', True); + if (pos('/', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ENDIF} + LPath := LPath + LFilename; + + // This function reads files in the drive but you can get the contents from + // any other source like resources. + try + LResultStream := TMemoryStream.Create; + + if FileExists(LPath) then + begin + LFileStream := TMemoryStream.Create; + LFileStream.LoadFromFile(LPath); + LFileLength := LFileStream.Size; + LFileStream.Position := 0; + + LHTTPHeader := 'HTTP/1.1 200 OK' + CRLF + + 'Content-Type: ' + WebUI.GetMimeType(LFilename) + CRLF + + 'Content-Length: ' + inttostr(LFileLength) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF; + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + LHTTPHeaderLength := length(LHTTPHeaderTemplate); + + LNullChar := AnsiChar(#0); + LNullCharLength := length(LNullChar); + + LResultStream.Write(LHTTPHeaderTemplate[1], LHTTPHeaderLength); + LResultStream.Write(LFileStream.Memory^, LFileLength); + LResultStream.Write(LNullChar[1], LNullCharLength); + LResultStream.Position := 0; + + LTotalLength := LHTTPHeaderLength + LFileLength + LNullCharLength; + Result := webui_malloc(LTotalLength); + len^ := LResultStream.Read(Result^, LTotalLength); + end + else + if DirectoryExists(LPath) then + begin + // Redirect requests to directories to the index.html file. + + LHTTPHeader := 'HTTP/1.1 302 Found' + CRLF + + 'Location: ' + LFilename + '/index.html' + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end + else + begin + LContent := 'Resource Not Found' + + '

The resource you requested has not been found ' + + 'at the specified address. Please check the spelling of ' + + 'the address.

'; + + LHTTPHeader := 'HTTP/1.1 404 Not Found' + CRLF + + 'Content-Type: text/html' + CRLF + + 'Content-Length: ' + inttostr(length(LContent)) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + + LContent + #0; + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end; + finally + if assigned(LFileStream) then + FreeAndNil(LFileStream); + + if assigned(LResultStream) then + FreeAndNil(LResultStream); + end; + except + on e : exception do + if CustomExceptionHandler('vfs', e) then raise; + end; +end; + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + FWindow := TWebUIWindow.Create; + + // Bind HTML element IDs with a C functions + FWindow.Bind('Exit'); + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + // Set a custom files handler + FWindow.SetFileHandler(vfs); + + // Show a new window + FWindow.Show('index.html'); +end; + +end. diff --git a/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dpr b/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dpr new file mode 100644 index 0000000..388211f --- /dev/null +++ b/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dpr @@ -0,0 +1,14 @@ +program virtual_file_system; + +uses + System.StartUpCopy, + FMX.Forms, + uMainForm in 'uMainForm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dproj b/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dproj new file mode 100644 index 0000000..32fe498 --- /dev/null +++ b/demos/Delphi_FMX/virtual_file_system/virtual_file_system.dproj @@ -0,0 +1,1337 @@ + + + {AB19C33C-DA4B-473E-912E-1145212EAC58} + 20.1 + FMX + True + Debug + Win64 + 693267 + Application + virtual_file_system.dpr + virtual_file_system + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + 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 + virtual_file_system + ..\..\..\source;$(DCC_UnitSearchPath) + FMX;$(DCC_Define) + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + true + true + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml + $(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 + false + true + $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + 1 + #FFFFFF + #000000 + #000000 + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + true + true + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml + $(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 + false + true + $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;DBXMySQLDriver;inet;fmxase;dbrtl;fmxdae;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;dsnap;CloudService;fmxobj;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;DBXMySQLDriver;inet;fmxase;dbrtl;fmxdae;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;dsnap;CloudService;fmxobj;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin32 + none + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin64 + none + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + PerMonitorV2 + + + PerMonitorV2 + true + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
MainForm
+ fmx +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + virtual_file_system.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + true + + + + + true + + + + + true + + + + + virtual_file_system.exe + true + + + + + virtual_file_system.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + True + True + True + True + True + True + True + True + + + 12 + + + + +
diff --git a/demos/Delphi_FMX/web_app_multi_client/00-DeleteDCUs.bat b/demos/Delphi_FMX/web_app_multi_client/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_FMX/web_app_multi_client/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_FMX/web_app_multi_client/uMainForm.fmx b/demos/Delphi_FMX/web_app_multi_client/uMainForm.fmx new file mode 100644 index 0000000..5cadac0 --- /dev/null +++ b/demos/Delphi_FMX/web_app_multi_client/uMainForm.fmx @@ -0,0 +1,43 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = Single + Caption = 'web_app_multi_client' + ClientHeight = 52 + ClientWidth = 450 + Padding.Left = 10.000000000000000000 + Padding.Top = 10.000000000000000000 + Padding.Right = 10.000000000000000000 + Padding.Bottom = 10.000000000000000000 + Position = ScreenCenter + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + OnCloseQuery = FormCloseQuery + DesignerMasterStyle = 0 + object MainPanel: TPanel + Align = Client + Padding.Left = 5.000000000000000000 + Padding.Top = 5.000000000000000000 + Padding.Right = 5.000000000000000000 + Padding.Bottom = 5.000000000000000000 + Size.Width = 430.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object ShowBrowserBtn: TButton + Align = Top + Position.X = 5.000000000000000000 + Position.Y = 5.000000000000000000 + Size.Width = 420.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + Text = 'Show browser' + TextSettings.Trimming = None + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Delphi_FMX/web_app_multi_client/uMainForm.pas b/demos/Delphi_FMX/web_app_multi_client/uMainForm.pas new file mode 100644 index 0000000..9800549 --- /dev/null +++ b/demos/Delphi_FMX/web_app_multi_client/uMainForm.pas @@ -0,0 +1,228 @@ +unit uMainForm; + +{$I ..\..\..\source\uWebUI.inc} + +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, FMX.Memo.Types, FMX.ScrollBox, + FMX.Memo, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + private + FWindow : IWebUIWindow; + FPublicInput : string; + FPrivateInput_arr : array [0..255] of string; + FUsers_count, FTab_count : integer; + + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + procedure save(const aEvent: IWebUIEventHandler); + procedure saveAll(const aEvent: IWebUIEventHandler); + procedure events(const aEvent: IWebUIEventHandler); + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.fmx} + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + + if WebUI.Initialize then + begin + MainPanel.Enabled := True; + + // Allow multi-user connection + WebUI.SetConfig(multi_client, True); + + // Allow cookies + WebUI.SetConfig(use_cookies, True); + end; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'exit_app') then + exit_app(aEvent) + else if (aEvent.Element = 'save') then + save(aEvent) + else if (aEvent.Element = 'saveAll') then + saveAll(aEvent) + else + events(aEvent); +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + TThread.ForceQueue(nil, + procedure + begin + Close; + end); +end; + +procedure TMainForm.save(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it in the array + FPrivateInput_arr[aEvent.ClientID] := aEvent.GetString; +end; + +procedure TMainForm.saveAll(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it + FPublicInput := aEvent.GetString; + // Update all users + aEvent.Window.Run('document.getElementById("publicInput").value = "' + FPublicInput + '";'); +end; + +procedure TMainForm.events(const aEvent: IWebUIEventHandler); +var + LCookies : string; + LClientID : TWebUIClientID; + LConnectiondID : TWebUIConnectionID; +begin + // This function gets called every time + // there is an event + + // Full web browser cookies + LCookies := aEvent.Cookies; + + // Static client (Based on web browser cookies) + LClientID := aEvent.ClientID; + + // Dynamic client connection ID (Changes on connect/disconnect events) + LConnectiondID := aEvent.ConnectionID; + + case aEvent.EventType of + WEBUI_EVENT_DISCONNECTED : + begin + // Disconnection + if (FTab_count > 0) then + dec(FTab_count); + end; + + WEBUI_EVENT_CONNECTED : + begin + // New connection + if (FUsers_count < succ(LClientID)) then // +1 because it start from 0 + FUsers_count := succ(LClientID); + + inc(FTab_count); + end; + end; + + + // Update this current user only + + // status + aEvent.RunClient('document.getElementById("status").innerText = "Connected!";'); + + // userNumber + aEvent.RunClient('document.getElementById("userNumber").innerText = "' + inttostr(LClientID) + '";'); + + // connectionNumber + aEvent.RunClient('document.getElementById("connectionNumber").innerText = "' + inttostr(LConnectiondID) + '";'); + + // privateInput + aEvent.RunClient('document.getElementById("privateInput").value = "' + FPrivateInput_arr[LClientID] +'";'); + + // publicInput + aEvent.RunClient('document.getElementById("publicInput").value = "' + FPublicInput + '";'); + + + // Update all connected users + + // userCount + aEvent.RunClient('document.getElementById("userCount").innerText = "' + inttostr(FUsers_count) + '";'); + + // tabCount + aEvent.RunClient('document.getElementById("tabCount").innerText = "' + inttostr(FTab_count) + '";'); + + if FTab_count = 0 then + exit_app(aEvent); +end; + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +var + LPath, LUrl : string; + LContents : TStringList; +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + // Create new window + FWindow := TWebUIWindow.Create; + + // Bind HTML with a C functions + FWindow.Bind('save'); + FWindow.Bind('saveAll'); + FWindow.Bind('exit_app'); + + // Bind all events + FWindow.BindAllEvents; + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\web_app_multi_client\', True); + {$ELSE} + LPath := CustomAbsolutePath('../assets/web_app_multi_client/', True); + {$ENDIF} + + LPath := LPath + 'index.html'; + + if FileExists(LPath) then + try + LContents := nil; + try + LContents := TStringList.Create; + LContents.LoadFromFile(LPath); + // Start server only + LUrl := FWindow.StartServer(LContents.Text); + finally + if assigned(LContents) then + LContents.Free; + end; + + // Open a new page in the default native web browser + WebUI.OpenURL(LUrl); + except + on e : exception do + if CustomExceptionHandler('TMainForm.ShowBrowserBtnClick', e) then raise; + end; +end; + +end. diff --git a/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dpr b/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dpr new file mode 100644 index 0000000..493676c --- /dev/null +++ b/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dpr @@ -0,0 +1,14 @@ +program web_app_multi_client; + +uses + System.StartUpCopy, + FMX.Forms, + uMainForm in 'uMainForm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dproj b/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dproj new file mode 100644 index 0000000..cdc79c6 --- /dev/null +++ b/demos/Delphi_FMX/web_app_multi_client/web_app_multi_client.dproj @@ -0,0 +1,1343 @@ + + + {AB19C33C-DA4B-473E-912E-1145212EAC58} + 20.1 + FMX + True + Debug + Win64 + 693267 + Application + web_app_multi_client.dpr + web_app_multi_client + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + 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 + web_app_multi_client + ..\..\..\source;$(DCC_UnitSearchPath) + FMX;$(DCC_Define) + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + true + true + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml + $(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 + false + true + $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + 1 + #FFFFFF + #000000 + #000000 + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + $(BDS)\bin\Artwork\Android\FM_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 + true + true + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml + $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml + $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml + $(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 + false + true + $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.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;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;fmxase;dbrtl;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDAC;xmlrtl;tethering;dsnap;CloudService;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;DBXMySQLDriver;inet;fmxase;dbrtl;fmxdae;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;dsnap;CloudService;fmxobj;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + fmx;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;DBXMySQLDriver;inet;fmxase;dbrtl;fmxdae;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;dsnap;CloudService;fmxobj;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + true + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin32 + none + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\..\..\bin64 + none + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + PerMonitorV2 + + + PerMonitorV2 + true + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
MainForm
+ fmx +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + web_app_multi_client.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + true + + + + + true + + + + + true + + + + + web_app_multi_client.exe + true + + + + + web_app_multi_client.exe + true + + + + + web_app_multi_client.rsm + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + True + True + True + True + True + True + True + True + + + 12 + + + + +
diff --git a/demos/Delphi_VCL/Minimal/Minimal.dproj b/demos/Delphi_VCL/Minimal/Minimal.dproj index eb08da6..d1f92e1 100644 --- a/demos/Delphi_VCL/Minimal/Minimal.dproj +++ b/demos/Delphi_VCL/Minimal/Minimal.dproj @@ -5,10 +5,11 @@ VCL True Debug - Win32 + Win64 3 Application Minimal.dpr + Minimal
true @@ -831,6 +832,9 @@ 1 + + 1 + @@ -1123,6 +1127,7 @@ + True diff --git a/demos/Delphi_VCL/serve_a_folder/serve_a_folder.dproj b/demos/Delphi_VCL/serve_a_folder/serve_a_folder.dproj index 73885da..0264da5 100644 --- a/demos/Delphi_VCL/serve_a_folder/serve_a_folder.dproj +++ b/demos/Delphi_VCL/serve_a_folder/serve_a_folder.dproj @@ -5,10 +5,11 @@ VCL True Debug - Win32 + Win64 3 Application serve_a_folder.dpr + serve_a_folder true @@ -831,6 +832,9 @@ 1 + + 1 + @@ -1123,6 +1127,7 @@ + True diff --git a/demos/Delphi_VCL/virtual_file_system/00-DeleteDCUs.bat b/demos/Delphi_VCL/virtual_file_system/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_VCL/virtual_file_system/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_VCL/virtual_file_system/uMainForm.dfm b/demos/Delphi_VCL/virtual_file_system/uMainForm.dfm new file mode 100644 index 0000000..1761f73 --- /dev/null +++ b/demos/Delphi_VCL/virtual_file_system/uMainForm.dfm @@ -0,0 +1,47 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'virtual_file_system' + ClientHeight = 52 + ClientWidth = 450 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + Padding.Left = 10 + Padding.Top = 10 + Padding.Right = 10 + Padding.Bottom = 10 + Position = poScreenCenter + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + TextHeight = 15 + object MainPanel: TPanel + Left = 10 + Top = 10 + Width = 430 + Height = 32 + Align = alClient + BevelOuter = bvNone + Padding.Left = 5 + Padding.Top = 5 + Padding.Right = 5 + Padding.Bottom = 5 + TabOrder = 0 + ExplicitHeight = 255 + object ShowBrowserBtn: TButton + Left = 5 + Top = 5 + Width = 420 + Height = 25 + Align = alTop + Caption = 'Show browser' + TabOrder = 0 + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Delphi_VCL/virtual_file_system/uMainForm.pas b/demos/Delphi_VCL/virtual_file_system/uMainForm.pas new file mode 100644 index 0000000..cee22e9 --- /dev/null +++ b/demos/Delphi_VCL/virtual_file_system/uMainForm.pas @@ -0,0 +1,193 @@ +unit uMainForm; + +{$I ..\..\..\source\uWebUI.inc} + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + private + FWindow : IWebUIWindow; + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + MainPanel.Enabled := WebUI.Initialize; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'Exit') then + exit_app(aEvent); +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + PostMessage(Handle, WM_CLOSE, 0, 0); +end; + +function vfs(const filename: PWebUIChar; len: PInteger): Pointer; cdecl; +var + LFilename, LPath : string; + LResultStream : TMemoryStream; + LFileStream : TMemoryStream; + LFileLength : integer; + LTotalLength : integer; + LHTTPHeaderTemplate : AnsiString; + LHTTPHeaderLength : integer; + LHTTPHeader, LContent : string; + LNullChar: AnsiString; + LNullCharLength : integer; +begin + len^ := 0; + Result := nil; + LFileStream := nil; + LResultStream := nil; + LFilename := UTF8ToString(PAnsiChar(filename)); + + try + // Set the web-server root folder for the first window + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\virtual_file_system\', True); + LFilename := StringReplace(LFilename, '/', '\', [rfReplaceAll]); + if (pos('\', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ELSE} + LPath := CustomAbsolutePath('../assets/virtual_file_system/', True); + if (pos('/', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ENDIF} + LPath := LPath + LFilename; + + // This function reads files in the drive but you can get the contents from + // any other source like resources. + try + LResultStream := TMemoryStream.Create; + + if FileExists(LPath) then + begin + LFileStream := TMemoryStream.Create; + LFileStream.LoadFromFile(LPath); + LFileLength := LFileStream.Size; + LFileStream.Position := 0; + + LHTTPHeader := 'HTTP/1.1 200 OK' + CRLF + + 'Content-Type: ' + WebUI.GetMimeType(LFilename) + CRLF + + 'Content-Length: ' + inttostr(LFileLength) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF; + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + LHTTPHeaderLength := length(LHTTPHeaderTemplate); + + LNullChar := AnsiChar(#0); + LNullCharLength := length(LNullChar); + + LResultStream.Write(LHTTPHeaderTemplate[1], LHTTPHeaderLength); + LResultStream.Write(LFileStream.Memory^, LFileLength); + LResultStream.Write(LNullChar[1], LNullCharLength); + LResultStream.Position := 0; + + LTotalLength := LHTTPHeaderLength + LFileLength + LNullCharLength; + Result := webui_malloc(LTotalLength); + len^ := LResultStream.Read(Result^, LTotalLength); + end + else + if DirectoryExists(LPath) then + begin + // Redirect requests to directories to the index.html file. + + LHTTPHeader := 'HTTP/1.1 302 Found' + CRLF + + 'Location: ' + LFilename + '/index.html' + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end + else + begin + LContent := 'Resource Not Found' + + '

The resource you requested has not been found ' + + 'at the specified address. Please check the spelling of ' + + 'the address.

'; + + LHTTPHeader := 'HTTP/1.1 404 Not Found' + CRLF + + 'Content-Type: text/html' + CRLF + + 'Content-Length: ' + inttostr(length(LContent)) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + + LContent + #0; + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end; + finally + if assigned(LFileStream) then + FreeAndNil(LFileStream); + + if assigned(LResultStream) then + FreeAndNil(LResultStream); + end; + except + on e : exception do + if CustomExceptionHandler('vfs', e) then raise; + end; +end; + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + FWindow := TWebUIWindow.Create; + + // Bind HTML element IDs with a C functions + FWindow.Bind('Exit'); + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + // Set a custom files handler + FWindow.SetFileHandler(vfs); + + // Show a new window + FWindow.Show('index.html'); +end; + +end. diff --git a/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dpr b/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dpr new file mode 100644 index 0000000..5145f0d --- /dev/null +++ b/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dpr @@ -0,0 +1,14 @@ +program virtual_file_system; + +uses + Vcl.Forms, + uMainForm in 'uMainForm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dproj b/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dproj new file mode 100644 index 0000000..14f0544 --- /dev/null +++ b/demos/Delphi_VCL/virtual_file_system/virtual_file_system.dproj @@ -0,0 +1,1136 @@ + + + {EB6F288C-4FD1-458A-BB51-526F0AC53089} + 20.1 + VCL + True + Debug + Win64 + 3 + Application + virtual_file_system.dpr + virtual_file_system + + + 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;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + virtual_file_system + ..\..\..\source;$(DCC_UnitSearchPath) + 3082 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + 1033 + $(BDS)\bin\default_app.manifest + none + ..\..\..\bin32 + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + 1033 + $(BDS)\bin\default_app.manifest + none + ..\..\..\bin64 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + PerMonitorV2 + true + 1033 + + + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
MainForm
+ dfm +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + virtual_file_system.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + virtual_file_system.exe + true + + + + + virtual_file_system.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/demos/Delphi_VCL/web_app_multi_client/00-DeleteDCUs.bat b/demos/Delphi_VCL/web_app_multi_client/00-DeleteDCUs.bat new file mode 100644 index 0000000..a9a8409 --- /dev/null +++ b/demos/Delphi_VCL/web_app_multi_client/00-DeleteDCUs.bat @@ -0,0 +1,18 @@ +del /s /q *.dcu +del /s /q *.exe +del /s /q *.res +del /s /q *.rsm +del /s /q *.log +del /s /q *.dsk +del /s /q *.identcache +del /s /q *.stat +del /s /q *.local +del /s /q *.~* +rmdir Win32\Debug +rmdir Win32\Release +rmdir Win32 +rmdir Win64\Debug +rmdir Win64\Release +rmdir Win64 +rmdir __history +rmdir __recovery diff --git a/demos/Delphi_VCL/web_app_multi_client/uMainForm.dfm b/demos/Delphi_VCL/web_app_multi_client/uMainForm.dfm new file mode 100644 index 0000000..c88183c --- /dev/null +++ b/demos/Delphi_VCL/web_app_multi_client/uMainForm.dfm @@ -0,0 +1,46 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'web_app_multi_client' + ClientHeight = 49 + ClientWidth = 450 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + Padding.Left = 10 + Padding.Top = 10 + Padding.Right = 10 + Padding.Bottom = 10 + Position = poScreenCenter + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + TextHeight = 15 + object MainPanel: TPanel + Left = 10 + Top = 10 + Width = 430 + Height = 29 + Align = alClient + BevelOuter = bvNone + Padding.Left = 5 + Padding.Top = 5 + Padding.Right = 5 + Padding.Bottom = 5 + TabOrder = 0 + object ShowBrowserBtn: TButton + Left = 5 + Top = 5 + Width = 420 + Height = 25 + Align = alTop + Caption = 'Show browser' + TabOrder = 0 + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Delphi_VCL/web_app_multi_client/uMainForm.pas b/demos/Delphi_VCL/web_app_multi_client/uMainForm.pas new file mode 100644 index 0000000..fcc53f3 --- /dev/null +++ b/demos/Delphi_VCL/web_app_multi_client/uMainForm.pas @@ -0,0 +1,222 @@ +unit uMainForm; + +{$I ..\..\..\source\uWebUI.inc} + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + private + FWindow : IWebUIWindow; + FPublicInput : string; + FPrivateInput_arr : array [0..255] of string; + FUsers_count, FTab_count : integer; + + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + procedure save(const aEvent: IWebUIEventHandler); + procedure saveAll(const aEvent: IWebUIEventHandler); + procedure events(const aEvent: IWebUIEventHandler); + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + + if WebUI.Initialize then + begin + MainPanel.Enabled := True; + + // Allow multi-user connection + WebUI.SetConfig(multi_client, True); + + // Allow cookies + WebUI.SetConfig(use_cookies, True); + end; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'exit_app') then + exit_app(aEvent) + else if (aEvent.Element = 'save') then + save(aEvent) + else if (aEvent.Element = 'saveAll') then + saveAll(aEvent) + else + events(aEvent); +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + PostMessage(Handle, WM_CLOSE, 0, 0); +end; + +procedure TMainForm.events(const aEvent: IWebUIEventHandler); +var + LCookies : string; + LClientID : TWebUIClientID; + LConnectiondID : TWebUIConnectionID; +begin + // This function gets called every time + // there is an event + + // Full web browser cookies + LCookies := aEvent.Cookies; + + // Static client (Based on web browser cookies) + LClientID := aEvent.ClientID; + + // Dynamic client connection ID (Changes on connect/disconnect events) + LConnectiondID := aEvent.ConnectionID; + + case aEvent.EventType of + WEBUI_EVENT_DISCONNECTED : + begin + // Disconnection + if (FTab_count > 0) then + dec(FTab_count); + end; + + WEBUI_EVENT_CONNECTED : + begin + // New connection + if (FUsers_count < succ(LClientID)) then // +1 because it start from 0 + FUsers_count := succ(LClientID); + + inc(FTab_count); + end; + end; + + + // Update this current user only + + // status + aEvent.RunClient('document.getElementById("status").innerText = "Connected!";'); + + // userNumber + aEvent.RunClient('document.getElementById("userNumber").innerText = "' + inttostr(LClientID) + '";'); + + // connectionNumber + aEvent.RunClient('document.getElementById("connectionNumber").innerText = "' + inttostr(LConnectiondID) + '";'); + + // privateInput + aEvent.RunClient('document.getElementById("privateInput").value = "' + FPrivateInput_arr[LClientID] +'";'); + + // publicInput + aEvent.RunClient('document.getElementById("publicInput").value = "' + FPublicInput + '";'); + + + // Update all connected users + + // userCount + aEvent.RunClient('document.getElementById("userCount").innerText = "' + inttostr(FUsers_count) + '";'); + + // tabCount + aEvent.RunClient('document.getElementById("tabCount").innerText = "' + inttostr(FTab_count) + '";'); + + if FTab_count = 0 then + exit_app(aEvent); +end; + +procedure TMainForm.save(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it in the array + FPrivateInput_arr[aEvent.ClientID] := aEvent.GetString; +end; + +procedure TMainForm.saveAll(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it + FPublicInput := aEvent.GetString; + // Update all users + aEvent.Window.Run('document.getElementById("publicInput").value = "' + FPublicInput + '";'); +end; + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +var + LPath, LUrl : string; + LContents : TStringList; +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + // Create new window + FWindow := TWebUIWindow.Create; + + // Bind HTML with a C functions + FWindow.Bind('save'); + FWindow.Bind('saveAll'); + FWindow.Bind('exit_app'); + + // Bind all events + FWindow.BindAllEvents; + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\web_app_multi_client\', True); + {$ELSE} + LPath := CustomAbsolutePath('../assets/web_app_multi_client/', True); + {$ENDIF} + + LPath := LPath + 'index.html'; + + if FileExists(LPath) then + try + LContents := nil; + try + LContents := TStringList.Create; + LContents.LoadFromFile(LPath); + // Start server only + LUrl := FWindow.StartServer(LContents.Text); + finally + if assigned(LContents) then + LContents.Free; + end; + + // Open a new page in the default native web browser + WebUI.OpenURL(LUrl); + except + on e : exception do + if CustomExceptionHandler('TMainForm.ShowBrowserBtnClick', e) then raise; + end; +end; + +end. diff --git a/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dpr b/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dpr new file mode 100644 index 0000000..38d4977 --- /dev/null +++ b/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dpr @@ -0,0 +1,14 @@ +program web_app_multi_client; + +uses + Vcl.Forms, + uMainForm in 'uMainForm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dproj b/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dproj new file mode 100644 index 0000000..14974a2 --- /dev/null +++ b/demos/Delphi_VCL/web_app_multi_client/web_app_multi_client.dproj @@ -0,0 +1,1142 @@ + + + {EB6F288C-4FD1-458A-BB51-526F0AC53089} + 20.1 + VCL + True + Debug + Win64 + 3 + Application + web_app_multi_client.dpr + web_app_multi_client + + + 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;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + web_app_multi_client + ..\..\..\source;$(DCC_UnitSearchPath) + 3082 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;Skia.Package.FMX;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;TMSMQTTPkgDXE15;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;TMSMQTTPkgDEDXE15;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + 1033 + $(BDS)\bin\default_app.manifest + none + ..\..\..\bin32 + + + vclwinx;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;WebView4DelphiVCLRTL;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;vcltouch;fmxase;dbrtl;fmxdae;TeeDB;FireDACMSAccDriver;CustomIPTransport;CEF4DelphiFMXRTL;vcldsnap;DBXInterBaseDriver;IndySystem;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;WebView4DelphiFMXRTL;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;fmxobj;bindcompvclsmp;FMXTee;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + 1033 + $(BDS)\bin\default_app.manifest + none + ..\..\..\bin64 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + PerMonitorV2 + true + 1033 + + + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
MainForm
+ dfm +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + web_app_multi_client.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + web_app_multi_client.exe + true + + + + + web_app_multi_client.rsm + true + + + + + web_app_multi_client.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 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\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\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 + + + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/demos/Lazarus_Console/virtual_file_system/00-Delete.bat b/demos/Lazarus_Console/virtual_file_system/00-Delete.bat new file mode 100644 index 0000000..0b5ba5c --- /dev/null +++ b/demos/Lazarus_Console/virtual_file_system/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpi b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpi new file mode 100644 index 0000000..bd204ed --- /dev/null +++ b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpi @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="virtual_file_system.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin64\virtual_file_system"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\..\..\source"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="Delphi"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpr b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpr new file mode 100644 index 0000000..c09d8c2 --- /dev/null +++ b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lpr @@ -0,0 +1,156 @@ +program virtual_file_system; + +{$MODE Delphiunicode} + +{$I ..\..\..\source\uWebUI.inc} + +{$APPTYPE CONSOLE} + +uses + SysUtils, Classes, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants, uWebUIMiscFunctions; + +var + LWindow : IWebUIWindow; + +procedure exit_app(e: PWebUIEvent); cdecl; +begin + WebUI.Exit; +end; + +function vfs(const filename: PWebUIChar; len: PInteger): Pointer; cdecl; +var + LFilename, LPath : string; + LResultStream : TMemoryStream; + LFileStream : TMemoryStream; + LFileLength : integer; + LTotalLength : integer; + LHTTPHeaderTemplate : AnsiString; + LHTTPHeaderLength : integer; + LHTTPHeader, LContent : string; + LNullChar: AnsiString; + LNullCharLength : integer; +begin + len^ := 0; + Result := nil; + LFileStream := nil; + LResultStream := nil; + LFilename := UTF8ToString(PAnsiChar(filename)); + WriteLn('File: ' + LFilename); + + try + // Set the web-server root folder for the first window + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\virtual_file_system\', True); + LFilename := StringReplace(LFilename, '/', '\', [rfReplaceAll]); + if (pos('\', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ELSE} + LPath := CustomAbsolutePath('../assets/virtual_file_system/', True); + if (pos('/', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ENDIF} + LPath := LPath + LFilename; + + // This function reads files in the drive but you can get the contents from + // any other source like resources. + try + LResultStream := TMemoryStream.Create; + + if FileExists(LPath) then + begin + LFileStream := TMemoryStream.Create; + LFileStream.LoadFromFile(LPath); + LFileLength := LFileStream.Size; + LFileStream.Position := 0; + + LHTTPHeader := 'HTTP/1.1 200 OK' + CRLF + + 'Content-Type: ' + WebUI.GetMimeType(LFilename) + CRLF + + 'Content-Length: ' + inttostr(LFileLength) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF; + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + LHTTPHeaderLength := length(LHTTPHeaderTemplate); + + LNullChar := AnsiChar(#0); + LNullCharLength := length(LNullChar); + + LResultStream.Write(LHTTPHeaderTemplate[1], LHTTPHeaderLength); + LResultStream.Write(LFileStream.Memory^, LFileLength); + LResultStream.Write(LNullChar[1], LNullCharLength); + LResultStream.Position := 0; + + LTotalLength := LHTTPHeaderLength + LFileLength + LNullCharLength; + Result := webui_malloc(LTotalLength); + len^ := LResultStream.Read(Result^, LTotalLength); + end + else + if DirectoryExists(LPath) then + begin + // Redirect requests to directories to the index.html file. + + LHTTPHeader := 'HTTP/1.1 302 Found' + CRLF + + 'Location: ' + LFilename + '/index.html' + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end + else + begin + LContent := '<html><head><title>Resource Not Found' + + '

The resource you requested has not been found ' + + 'at the specified address. Please check the spelling of ' + + 'the address.

'; + + LHTTPHeader := 'HTTP/1.1 404 Not Found' + CRLF + + 'Content-Type: text/html' + CRLF + + 'Content-Length: ' + inttostr(length(LContent)) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + + LContent + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end; + finally + if assigned(LFileStream) then + FreeAndNil(LFileStream); + + if assigned(LResultStream) then + FreeAndNil(LResultStream); + end; + except + on e : exception do + if CustomExceptionHandler('vfs', e) then raise; + end; +end; + +begin + try + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + if WebUI.Initialize then + begin + LWindow := TWebUIWindow.Create; + + // Bind HTML element IDs with a C functions + LWindow.Bind('Exit', exit_app); + + // Set a custom files handler + LWindow.SetFileHandler(vfs); + + // Show a new window + LWindow.Show('index.html'); + + // Wait until all windows get closed + WebUI.Wait; + end; + except + on E: Exception do + Writeln(E.ClassName, ': ', E.Message); + end; +end. diff --git a/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lps b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lps new file mode 100644 index 0000000..7ae9758 --- /dev/null +++ b/demos/Lazarus_Console/virtual_file_system/virtual_file_system.lps @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demos/Lazarus_Console/web_app_multi_client/00-Delete.bat b/demos/Lazarus_Console/web_app_multi_client/00-Delete.bat new file mode 100644 index 0000000..0b5ba5c --- /dev/null +++ b/demos/Lazarus_Console/web_app_multi_client/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpi b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpi new file mode 100644 index 0000000..01e34f3 --- /dev/null +++ b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpi @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="web_app_multi_client.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin64\web_app_multi_client"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\..\..\source"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="Delphi"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpr b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpr new file mode 100644 index 0000000..b8db973 --- /dev/null +++ b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lpr @@ -0,0 +1,173 @@ +program web_app_multi_client; + +{$MODE Delphiunicode} + +{$I ..\..\..\source\uWebUI.inc} + +{$APPTYPE CONSOLE} + +uses + SysUtils, Classes, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants, uWebUIMiscFunctions; + +var + LWindow : IWebUIWindow; + LPath, LUrl, LPublicInput : string; + LPrivateInput_arr : array [0..255] of string; + LUsers_count, LTab_count : integer; + LContents : TStringList; + +procedure exit_app(e: PWebUIEvent); cdecl; +begin + WebUI.Exit; +end; + +procedure save(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; +begin + LEvent := TWebUIEventHandler.Create(e); + // Get input value and save it in the array + LPrivateInput_arr[LEvent.ClientID] := LEvent.GetString; + LEvent.Free; +end; + +procedure saveAll(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; +begin + LEvent := TWebUIEventHandler.Create(e); + // Get input value and save it + LPublicInput := LEvent.GetString; + // Update all users + LEvent.Window.Run('document.getElementById("publicInput").value = "' + LPublicInput + '";'); + LEvent.Free; +end; + +procedure events(e: PWebUIEvent); cdecl; +var + LEvent : TWebUIEventHandler; + LCookies : string; + LClientID : TWebUIClientID; + LConnectiondID : TWebUIConnectionID; +begin + // This function gets called every time + // there is an event + + LEvent := TWebUIEventHandler.Create(e); + + // Full web browser cookies + LCookies := LEvent.Cookies; + + // Static client (Based on web browser cookies) + LClientID := LEvent.ClientID; + + // Dynamic client connection ID (Changes on connect/disconnect events) + LConnectiondID := LEvent.ConnectionID; + + case LEvent.EventType of + WEBUI_EVENT_DISCONNECTED : + begin + // Disconnection + if (LTab_count > 0) then + dec(LTab_count); + end; + + WEBUI_EVENT_CONNECTED : + begin + // New connection + if (LUsers_count < succ(LClientID)) then // +1 because it start from 0 + LUsers_count := succ(LClientID); + + inc(LTab_count); + end; + end; + + + // Update this current user only + + // status + LEvent.RunClient('document.getElementById("status").innerText = "Connected!";'); + + // userNumber + LEvent.RunClient('document.getElementById("userNumber").innerText = "' + inttostr(LClientID) + '";'); + + // connectionNumber + LEvent.RunClient('document.getElementById("connectionNumber").innerText = "' + inttostr(LConnectiondID) + '";'); + + // privateInput + LEvent.RunClient('document.getElementById("privateInput").value = "' + LPrivateInput_arr[LClientID] +'";'); + + // publicInput + LEvent.RunClient('document.getElementById("publicInput").value = "' + LPublicInput + '";'); + + + // Update all connected users + + // userCount + LEvent.RunClient('document.getElementById("userCount").innerText = "' + inttostr(LUsers_count) + '";'); + + // tabCount + LEvent.RunClient('document.getElementById("tabCount").innerText = "' + inttostr(LTab_count) + '";'); + + LEvent.Free; + + if LTab_count = 0 then + WebUI.Exit; +end; + +begin + try + LUsers_count := 0; + LTab_count := 0; + + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + if WebUI.Initialize then + begin + // Allow multi-user connection + WebUI.SetConfig(multi_client, True); + + // Allow cookies + WebUI.SetConfig(use_cookies, True); + + // Create new window + LWindow := TWebUIWindow.Create; + + // Bind HTML with a C functions + LWindow.Bind('save', save); + LWindow.Bind('saveAll', saveAll); + LWindow.Bind('exit_app', exit_app); + + // Bind all events + LWindow.BindAllEvents(events); + + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\web_app_multi_client\', True); + {$ELSE} + LPath := CustomAbsolutePath('../assets/web_app_multi_client/', True); + {$ENDIF} + + LPath := LPath + 'index.html'; + + if FileExists(LPath) then + begin + LContents := TStringList.Create; + LContents.LoadFromFile(LPath); + // Start server only + LUrl := LWindow.StartServer(LContents.Text); + LContents.Free; + // Open a new page in the default native web browser + WebUI.OpenURL(LUrl); + + WebUI.Wait; + end; + end; + except + on E: Exception do + Writeln(E.ClassName, ': ', E.Message); + end; +end. diff --git a/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lps b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lps new file mode 100644 index 0000000..c3755a4 --- /dev/null +++ b/demos/Lazarus_Console/web_app_multi_client/web_app_multi_client.lps @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <PathDelim Value="\"/> + <Version Value="12"/> + <BuildModes Active="Default"/> + <Units> + <Unit> + <Filename Value="web_app_multi_client.lpr"/> + <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> + <CursorPos X="5" Y="173"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <DefaultSyntaxHighlighter Value="Delphi"/> + </Unit> + </Units> + <JumpHistory HistoryIndex="-1"/> + <RunParams> + <FormatVersion Value="2"/> + <Modes ActiveMode=""/> + </RunParams> + </ProjectSession> +</CONFIG> diff --git a/demos/Lazarus_LCL/virtual_file_system/00-Delete.bat b/demos/Lazarus_LCL/virtual_file_system/00-Delete.bat new file mode 100644 index 0000000..0b5ba5c --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/Lazarus_LCL/virtual_file_system/umainform.lfm b/demos/Lazarus_LCL/virtual_file_system/umainform.lfm new file mode 100644 index 0000000..9602b9c --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/umainform.lfm @@ -0,0 +1,31 @@ +object MainForm: TMainForm + Left = 350 + Height = 48 + Top = 250 + Width = 320 + Caption = 'virtual_file_system' + ClientHeight = 48 + ClientWidth = 320 + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + LCLVersion = '3.4.0.0' + object MainPanel: TPanel + Left = 0 + Height = 48 + Top = 0 + Width = 320 + Align = alClient + ClientHeight = 48 + ClientWidth = 320 + TabOrder = 0 + object ShowBrowserBtn: TButton + Left = 8 + Height = 32 + Top = 8 + Width = 304 + Caption = 'Show browser' + TabOrder = 0 + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Lazarus_LCL/virtual_file_system/umainform.pas b/demos/Lazarus_LCL/virtual_file_system/umainform.pas new file mode 100644 index 0000000..598a674 --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/umainform.pas @@ -0,0 +1,207 @@ +unit uMainForm; + +{$mode delphiunicode} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, SyncObjs, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + + { TMainForm } + + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + private + FWindow : IWebUIWindow; + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + procedure CloseProc(Data: PtrInt); + public + + end; + +var + MainForm: TMainForm; + LCount : integer; + +implementation + +{$R *.lfm} + +{ TMainForm } + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + MainPanel.Enabled := WebUI.Initialize; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'Exit') then + exit_app(aEvent); +end; + +procedure TMainForm.CloseProc(Data: PtrInt); +begin + Close; +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + Application.QueueAsyncCall(CloseProc, 0); +end; + +function vfs(const filename: PWebUIChar; len: PInteger): Pointer; cdecl; +var + LFilename, LPath : string; + LResultStream : TMemoryStream; + LFileStream : TMemoryStream; + LFileLength : integer; + LTotalLength : integer; + LHTTPHeaderTemplate : AnsiString; + LHTTPHeaderLength : integer; + LHTTPHeader, LContent : string; + LNullChar: AnsiString; + LNullCharLength : integer; +begin + len^ := 0; + Result := nil; + LFileStream := nil; + LResultStream := nil; + LFilename := UTF8ToString(PAnsiChar(filename)); + + try + // Set the web-server root folder for the first window + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\virtual_file_system\', True); + LFilename := StringReplace(LFilename, '/', '\', [rfReplaceAll]); + if (pos('\', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ELSE} + LPath := CustomAbsolutePath('../assets/virtual_file_system/', True); + if (pos('/', LFilename) = 1) then + LFilename := copy(LFilename, 2, length(LFilename)); + {$ENDIF} + LPath := LPath + LFilename; + + // This function reads files in the drive but you can get the contents from + // any other source like resources. + try + LResultStream := TMemoryStream.Create; + + if FileExists(LPath) then + begin + LFileStream := TMemoryStream.Create; + LFileStream.LoadFromFile(LPath); + LFileLength := LFileStream.Size; + LFileStream.Position := 0; + + LHTTPHeader := 'HTTP/1.1 200 OK' + CRLF + + 'Content-Type: ' + WebUI.GetMimeType(LFilename) + CRLF + + 'Content-Length: ' + inttostr(LFileLength) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF; + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + LHTTPHeaderLength := length(LHTTPHeaderTemplate); + + LNullChar := AnsiChar(#0); + LNullCharLength := length(LNullChar); + + LResultStream.Write(LHTTPHeaderTemplate[1], LHTTPHeaderLength); + LResultStream.Write(LFileStream.Memory^, LFileLength); + LResultStream.Write(LNullChar[1], LNullCharLength); + LResultStream.Position := 0; + + LTotalLength := LHTTPHeaderLength + LFileLength + LNullCharLength; + Result := webui_malloc(LTotalLength); + len^ := LResultStream.Read(Result^, LTotalLength); + end + else + if DirectoryExists(LPath) then + begin + // Redirect requests to directories to the index.html file. + + LHTTPHeader := 'HTTP/1.1 302 Found' + CRLF + + 'Location: ' + LFilename + '/index.html' + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end + else + begin + LContent := '<html><head><title>Resource Not Found' + + '

The resource you requested has not been found ' + + 'at the specified address. Please check the spelling of ' + + 'the address.

'; + + LHTTPHeader := 'HTTP/1.1 404 Not Found' + CRLF + + 'Content-Type: text/html' + CRLF + + 'Content-Length: ' + inttostr(length(LContent)) + CRLF + + 'Cache-Control: no-cache' + CRLF + CRLF + + LContent + #0; + + + LHTTPHeaderTemplate := UTF8Encode(LHTTPHeader); + Result := StringToPWebUIChar(LHTTPHeaderTemplate, len^); + end; + finally + if assigned(LFileStream) then + FreeAndNil(LFileStream); + + if assigned(LResultStream) then + FreeAndNil(LResultStream); + end; + except + on e : exception do + if CustomExceptionHandler('vfs', e) then raise; + end; +end; + + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + FWindow := TWebUIWindow.Create; + + // Bind HTML element IDs with a C functions + FWindow.Bind('Exit'); + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + // Set a custom files handler + FWindow.SetFileHandler(vfs); + + // Show a new window + FWindow.Show('index.html'); +end; + +end. + diff --git a/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.ico b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.ico new file mode 100644 index 0000000..10c5fc1 Binary files /dev/null and b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.ico differ diff --git a/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpi b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpi new file mode 100644 index 0000000..dad3c84 --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpi @@ -0,0 +1,82 @@ + + + + + + + + + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="virtual_file_system.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="umainform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uMainForm"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin64\virtual_file_system"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\..\..\source"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpr b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpr new file mode 100644 index 0000000..bb1f98a --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lpr @@ -0,0 +1,25 @@ +program virtual_file_system; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX} + cthreads, + {$ENDIF} + {$IFDEF HASAMIGA} + athreads, + {$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, uMainForm + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource:=True; + Application.Scaled:=True; + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lps b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lps new file mode 100644 index 0000000..5f952ea --- /dev/null +++ b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.lps @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <PathDelim Value="\"/> + <Version Value="12"/> + <BuildModes Active="Default"/> + <Units> + <Unit> + <Filename Value="virtual_file_system.lpr"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="-1"/> + <TopLine Value="-1"/> + <CursorPos X="-1" Y="-1"/> + <UsageCount Value="20"/> + </Unit> + <Unit> + <Filename Value="umainform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uMainForm"/> + <IsVisibleTab Value="True"/> + <TopLine Value="174"/> + <CursorPos Y="99"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit> + <Unit> + <Filename Value="..\..\..\source\uWebUI.pas"/> + <EditorIndex Value="-1"/> + <CursorPos X="3" Y="27"/> + <UsageCount Value="10"/> + </Unit> + <Unit> + <Filename Value="..\..\..\source\uWebUIMiscFunctions.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="166"/> + <CursorPos X="10" Y="168"/> + <UsageCount Value="10"/> + </Unit> + </Units> + <JumpHistory HistoryIndex="10"> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="3" Column="22"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="14" Column="37"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="11" Column="33"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="39" Column="3" TopLine="12"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="45" Column="3" TopLine="18"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="96" Column="44" TopLine="76"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="247" Column="57" TopLine="227"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="227" Column="53" TopLine="202"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="32" Column="46" TopLine="23"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="123" Column="72" TopLine="115"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="122" Column="72" TopLine="114"/> + </Position> + </JumpHistory> + <RunParams> + <FormatVersion Value="2"/> + <Modes ActiveMode=""/> + </RunParams> + </ProjectSession> +</CONFIG> diff --git a/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.res b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.res new file mode 100644 index 0000000..bb86af9 Binary files /dev/null and b/demos/Lazarus_LCL/virtual_file_system/virtual_file_system.res differ diff --git a/demos/Lazarus_LCL/web_app_multi_client/00-Delete.bat b/demos/Lazarus_LCL/web_app_multi_client/00-Delete.bat new file mode 100644 index 0000000..0b5ba5c --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/Lazarus_LCL/web_app_multi_client/umainform.lfm b/demos/Lazarus_LCL/web_app_multi_client/umainform.lfm new file mode 100644 index 0000000..c850efd --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/umainform.lfm @@ -0,0 +1,31 @@ +object MainForm: TMainForm + Left = 350 + Height = 48 + Top = 250 + Width = 320 + Caption = 'web_app_multi_client' + ClientHeight = 48 + ClientWidth = 320 + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + LCLVersion = '3.4.0.0' + object MainPanel: TPanel + Left = 0 + Height = 48 + Top = 0 + Width = 320 + Align = alClient + ClientHeight = 48 + ClientWidth = 320 + TabOrder = 0 + object ShowBrowserBtn: TButton + Left = 8 + Height = 32 + Top = 8 + Width = 304 + Caption = 'Show browser' + TabOrder = 0 + OnClick = ShowBrowserBtnClick + end + end +end diff --git a/demos/Lazarus_LCL/web_app_multi_client/umainform.pas b/demos/Lazarus_LCL/web_app_multi_client/umainform.pas new file mode 100644 index 0000000..572caf2 --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/umainform.pas @@ -0,0 +1,234 @@ +unit uMainForm; + +{$mode delphiunicode} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, SyncObjs, + uWebUI, uWebUIWindow, uWebUITypes, uWebUIEventHandler, uWebUILibFunctions, + uWebUIConstants; + +type + + { TMainForm } + + TMainForm = class(TForm) + MainPanel: TPanel; + ShowBrowserBtn: TButton; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure ShowBrowserBtnClick(Sender: TObject); + private + FWindow : IWebUIWindow; + FPublicInput : string; + FPrivateInput_arr : array [0..255] of string; + FUsers_count, FTab_count : integer; + + procedure FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); + procedure exit_app(const aEvent: IWebUIEventHandler); + procedure save(const aEvent: IWebUIEventHandler); + procedure saveAll(const aEvent: IWebUIEventHandler); + procedure events(const aEvent: IWebUIEventHandler); + procedure CloseProc(Data: PtrInt); + public + + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.lfm} + +{ TMainForm } + +uses + uWebUIMiscFunctions; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if assigned(WebUI) and WebUI.IsAppRunning then + WebUI.Exit; + + FWindow := nil; + CanClose := True; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + WebUI := TWebUI.Create; + {$IFDEF DEBUG} + //WebUI.LibraryPath := WEBUI_DEBUG_LIB; + {$ENDIF} + FWindow := nil; + + if WebUI.Initialize then + begin + MainPanel.Enabled := True; + + // Allow multi-user connection + WebUI.SetConfig(multi_client, True); + + // Allow cookies + WebUI.SetConfig(use_cookies, True); + end; +end; + +procedure TMainForm.FWindow_OnWebUIEvent(Sender: TObject; const aEvent: IWebUIEventHandler); +begin + if (aEvent.Element = 'exit_app') then + exit_app(aEvent) + else if (aEvent.Element = 'save') then + save(aEvent) + else if (aEvent.Element = 'saveAll') then + saveAll(aEvent) + else + events(aEvent); +end; + +procedure TMainForm.CloseProc(Data: PtrInt); +begin + Close; +end; + +procedure TMainForm.exit_app(const aEvent: IWebUIEventHandler); +begin + WebUI.Exit; + // You can't create more browsers after the exit call + Application.QueueAsyncCall(CloseProc, 0); +end; + +procedure TMainForm.events(const aEvent: IWebUIEventHandler); +var + LCookies : string; + LClientID : TWebUIClientID; + LConnectiondID : TWebUIConnectionID; +begin + // This function gets called every time + // there is an event + + // Full web browser cookies + LCookies := aEvent.Cookies; + + // Static client (Based on web browser cookies) + LClientID := aEvent.ClientID; + + // Dynamic client connection ID (Changes on connect/disconnect events) + LConnectiondID := aEvent.ConnectionID; + + case aEvent.EventType of + WEBUI_EVENT_DISCONNECTED : + begin + // Disconnection + if (FTab_count > 0) then + dec(FTab_count); + end; + + WEBUI_EVENT_CONNECTED : + begin + // New connection + if (FUsers_count < succ(LClientID)) then // +1 because it start from 0 + FUsers_count := succ(LClientID); + + inc(FTab_count); + end; + end; + + + // Update this current user only + + // status + aEvent.RunClient('document.getElementById("status").innerText = "Connected!";'); + + // userNumber + aEvent.RunClient('document.getElementById("userNumber").innerText = "' + inttostr(LClientID) + '";'); + + // connectionNumber + aEvent.RunClient('document.getElementById("connectionNumber").innerText = "' + inttostr(LConnectiondID) + '";'); + + // privateInput + aEvent.RunClient('document.getElementById("privateInput").value = "' + FPrivateInput_arr[LClientID] +'";'); + + // publicInput + aEvent.RunClient('document.getElementById("publicInput").value = "' + FPublicInput + '";'); + + + // Update all connected users + + // userCount + aEvent.RunClient('document.getElementById("userCount").innerText = "' + inttostr(FUsers_count) + '";'); + + // tabCount + aEvent.RunClient('document.getElementById("tabCount").innerText = "' + inttostr(FTab_count) + '";'); + + if FTab_count = 0 then + exit_app(aEvent); +end; + +procedure TMainForm.save(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it in the array + FPrivateInput_arr[aEvent.ClientID] := aEvent.GetString; +end; + +procedure TMainForm.saveAll(const aEvent: IWebUIEventHandler); +begin + // Get input value and save it + FPublicInput := aEvent.GetString; + // Update all users + aEvent.Window.Run('document.getElementById("publicInput").value = "' + FPublicInput + '";'); +end; + + +procedure TMainForm.ShowBrowserBtnClick(Sender: TObject); +var + LPath, LUrl : string; + LContents : TStringList; +begin + if assigned(WebUI) and WebUI.IsAppRunning then exit; + + // Create new window + FWindow := TWebUIWindow.Create; + + // Bind HTML with a C functions + FWindow.Bind('save'); + FWindow.Bind('saveAll'); + FWindow.Bind('exit_app'); + + // Bind all events + FWindow.BindAllEvents; + FWindow.OnWebUIEvent := FWindow_OnWebUIEvent; + + {$IFDEF MSWINDOWS} + LPath := CustomAbsolutePath('..\assets\web_app_multi_client\', True); + {$ELSE} + LPath := CustomAbsolutePath('../assets/web_app_multi_client/', True); + {$ENDIF} + + LPath := LPath + 'index.html'; + + if FileExists(LPath) then + try + LContents := nil; + try + LContents := TStringList.Create; + LContents.LoadFromFile(LPath); + // Start server only + LUrl := FWindow.StartServer(LContents.Text); + finally + if assigned(LContents) then + LContents.Free; + end; + + // Open a new page in the default native web browser + WebUI.OpenURL(LUrl); + except + on e : exception do + if CustomExceptionHandler('TMainForm.ShowBrowserBtnClick', e) then raise; + end; +end; + +end. + diff --git a/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.ico b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.ico new file mode 100644 index 0000000..10c5fc1 Binary files /dev/null and b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.ico differ diff --git a/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpi b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpi new file mode 100644 index 0000000..31b0fe0 --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpi @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="12"/> + <PathDelim Value="\"/> + <General> + <SessionStorage Value="InProjectDir"/> + <Title Value="web_app_multi_client"/> + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="web_app_multi_client.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="umainform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uMainForm"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin64\web_app_multi_client"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\..\..\source"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpr b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpr new file mode 100644 index 0000000..4eac375 --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lpr @@ -0,0 +1,25 @@ +program web_app_multi_client; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX} + cthreads, + {$ENDIF} + {$IFDEF HASAMIGA} + athreads, + {$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, uMainForm + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource:=True; + Application.Scaled:=True; + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lps b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lps new file mode 100644 index 0000000..2ed392e --- /dev/null +++ b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.lps @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <PathDelim Value="\"/> + <Version Value="12"/> + <BuildModes Active="Default"/> + <Units> + <Unit> + <Filename Value="web_app_multi_client.lpr"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="-1"/> + <TopLine Value="-1"/> + <CursorPos X="-1" Y="-1"/> + <UsageCount Value="20"/> + </Unit> + <Unit> + <Filename Value="umainform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uMainForm"/> + <IsVisibleTab Value="True"/> + <TopLine Value="71"/> + <CursorPos Y="40"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit> + <Unit> + <Filename Value="..\..\..\source\uWebUI.pas"/> + <EditorIndex Value="-1"/> + <CursorPos X="3" Y="27"/> + <UsageCount Value="10"/> + </Unit> + <Unit> + <Filename Value="..\..\..\source\uWebUIMiscFunctions.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="166"/> + <CursorPos X="10" Y="168"/> + <UsageCount Value="10"/> + </Unit> + </Units> + <JumpHistory HistoryIndex="10"> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="3" Column="22"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="14" Column="37"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="11" Column="33"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="39" Column="3" TopLine="12"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="45" Column="3" TopLine="18"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="96" Column="44" TopLine="76"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="247" Column="57" TopLine="227"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="227" Column="53" TopLine="202"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="32" Column="46" TopLine="23"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="123" Column="72" TopLine="115"/> + </Position> + <Position> + <Filename Value="umainform.pas"/> + <Caret Line="122" Column="72" TopLine="114"/> + </Position> + </JumpHistory> + <RunParams> + <FormatVersion Value="2"/> + <Modes ActiveMode=""/> + </RunParams> + </ProjectSession> +</CONFIG> diff --git a/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.res b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.res new file mode 100644 index 0000000..bb86af9 Binary files /dev/null and b/demos/Lazarus_LCL/web_app_multi_client/web_app_multi_client.res differ diff --git a/docs/WebUI4Delphi.chm b/docs/WebUI4Delphi.chm index a076d8e..f3142b1 100644 Binary files a/docs/WebUI4Delphi.chm and b/docs/WebUI4Delphi.chm differ diff --git a/docs/html/AllFunctions.html b/docs/html/AllFunctions.html index 4b280a2..de885aa 100644 --- a/docs/html/AllFunctions.html +++ b/docs/html/AllFunctions.html @@ -116,6 +116,11 @@ <h1 class="allitems">All Functions and Procedures</h1> <td class="itemdesc"><p> </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUIMiscFunctions.html#StringToPWebUIChar-AnsiString-integer-">StringToPWebUIChar</a></td> +<td class="itemunit"><a class="bold" href="uWebUIMiscFunctions.html">uWebUIMiscFunctions</a></td> +<td class="itemdesc"><p> Converts a unicode string to a WebUI string. This function should only be used by the file handler callback. By allocating resources using webui_malloc() WebUI will automaticaly free the resources. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-">StringToPWebUIChar</a></td> <td class="itemunit"><a class="bold" href="uWebUIMiscFunctions.html">uWebUIMiscFunctions</a></td> <td class="itemdesc"><p> Converts a unicode string to a WebUI string. This function should only be used by the file handler callback. By allocating resources using webui_malloc() WebUI will automaticaly free the resources. </p></td> diff --git a/docs/html/AllIdentifiers.html b/docs/html/AllIdentifiers.html index 9a79574..ea38437 100644 --- a/docs/html/AllIdentifiers.html +++ b/docs/html/AllIdentifiers.html @@ -146,109 +146,129 @@ <h1 class="allitems">All Identifiers</h1> <td class="itemdesc"><p> </p></td> </tr> <tr class="list"> -<td class="itemname"><a class="bold" href="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-">StringToPWebUIChar</a></td> +<td class="itemname"><a class="bold" href="uWebUIMiscFunctions.html#StringToPWebUIChar-AnsiString-integer-">StringToPWebUIChar</a></td> <td class="itemunit"><a class="bold" href="uWebUIMiscFunctions.html">uWebUIMiscFunctions</a></td> <td class="itemdesc"><p> Converts a unicode string to a WebUI string. This function should only be used by the file handler callback. By allocating resources using webui_malloc() WebUI will automaticaly free the resources. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-">StringToPWebUIChar</a></td> +<td class="itemunit"><a class="bold" href="uWebUIMiscFunctions.html">uWebUIMiscFunctions</a></td> +<td class="itemdesc"><p> Converts a unicode string to a WebUI string. This function should only be used by the file handler callback. By allocating resources using webui_malloc() WebUI will automaticaly free the resources. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TLoaderStatus">TLoaderStatus</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> TWebUILoader status values </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TOnWebUIEvent">TOnWebUIEvent</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUI.TWebUI.html">TWebUI</a></td> <td class="itemunit"><a class="bold" href="uWebUI.html">uWebUI</a></td> <td class="itemdesc"><p> Class used to simplify the WebUI initialization and destruction. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUIBase64.TWebUIBase64.html">TWebUIBase64</a></td> <td class="itemunit"><a class="bold" href="uWebUIBase64.html">uWebUIBase64</a></td> <td class="itemdesc"><p> Wrapper class for the Base64 conversion functions in WebUI. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIBindCallback">TWebUIBindCallback</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> Bind ID. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> Supported web browsers. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIChar">TWebUIChar</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> WebUI char type. </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a></td> +<td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> +<td class="itemdesc"><p> Client's unique ID. </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> WebUI configuration. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a></td> +<td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> +<td class="itemdesc"><p> Client's connection ID. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.TWebUIEvent.html">TWebUIEvent</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> WebUI event. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUIEventHandler.TWebUIEventHandler.html">TWebUIEventHandler</a></td> <td class="itemunit"><a class="bold" href="uWebUIEventHandler.html">uWebUIEventHandler</a></td> <td class="itemdesc"><p> Event wrapper for Event objects in WebUI. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> The event number or event ID. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> Event types. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIFileHandlerCallback">TWebUIFileHandlerCallback</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIInterfaceEventCallback">TWebUIInterfaceEventCallback</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIRuntime">TWebUIRuntime</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> Supported runtimes. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUIWindow.TWebUIWindow.html">TWebUIWindow</a></td> <td class="itemunit"><a class="bold" href="uWebUIWindow.html">uWebUIWindow</a></td> <td class="itemdesc"><p> Window wrapper for Window objects in WebUI. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> Window number or Window ID. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUI.html#WebUI">WebUI</a></td> <td class="itemunit"><a class="bold" href="uWebUI.html">uWebUI</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_bind">webui_bind</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Bind a specific html element click event with a function. Empty element means all events. </p></td> +<td class="itemdesc"><p> Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. </p></td> +</tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_browser_exist">webui_browser_exist</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Check if a web browser is installed. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_clean">webui_clean</a></td> @@ -258,88 +278,98 @@ <h1 class="allitems">All Identifiers</h1> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_close">webui_close</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Close a specific window only. The window object will still exist. </p></td> +<td class="itemdesc"><p> Close a specific window only. The window object will still exist. All clients. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_close_client">webui_close_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Close a specific client. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUIConstants.html#WEBUI_DEBUG_LIB">WEBUI_DEBUG_LIB</a></td> <td class="itemunit"><a class="bold" href="uWebUIConstants.html">uWebUIConstants</a></td> <td class="itemdesc"><p> </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_decode">webui_decode</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Decode a Base64 encoded text. The returned buffer need to be freed. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUIConstants.html#WEBUI_DEFAULT_TIMEOUT">WEBUI_DEFAULT_TIMEOUT</a></td> <td class="itemunit"><a class="bold" href="uWebUIConstants.html">uWebUIConstants</a></td> <td class="itemdesc"><p> Default timeout in seconds before the browser starts. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_delete_all_profiles">webui_delete_all_profiles</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Delete all local web-browser profiles folder. It should called at the end. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_delete_profile">webui_delete_profile</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Delete a specific window web-browser local folder profile. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_destroy">webui_destroy</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Close a specific window and free all memory resources. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_encode">webui_encode</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Encode text to Base64. The returned buffer need to be freed. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_exit">webui_exit</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Close all open windows. `webui_wait()` will return (Break). </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_free">webui_free</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Safely free a buffer allocated by WebUI using `webui_malloc()`. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_best_browser">webui_get_best_browser</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the recommended web browser ID to use. If you are already using one, this function will return the same ID. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_bool">webui_get_bool</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the first argument as boolean. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_bool_at">webui_get_bool_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as boolean at a specific index. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_child_process_id">webui_get_child_process_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the ID of the last child process. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_count">webui_get_count</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get how many arguments there are in an event. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_float">webui_get_float</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the first argument as float. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_float_at">webui_get_float_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as float at a specific index. </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_free_port">webui_get_free_port</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get an available usable free network port. </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_int">webui_get_int</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -351,15 +381,25 @@ <h1 class="allitems">All Identifiers</h1> <td class="itemdesc"><p> Get an argument as integer at a specific index. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_mime_type">webui_get_mime_type</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get the HTTP mime type of a file. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_new_window_id">webui_get_new_window_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get a free window number that can be used with `webui_new_window_id()`. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_parent_process_id">webui_get_parent_process_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the ID of the parent process (The web browser may re-create another new process). </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_port">webui_get_port</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_size">webui_get_size</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -396,35 +436,45 @@ <h1 class="allitems">All Identifiers</h1> <td class="itemdesc"><p> Get an argument as boolean at a specific index. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_float_at">webui_interface_get_float_at</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get an argument as float at a specific index. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_int_at">webui_interface_get_int_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as integer at a specific index. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_size_at">webui_interface_get_size_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the size in bytes of an argument at a specific index. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_string_at">webui_interface_get_string_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as string at a specific index. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_window_id">webui_interface_get_window_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get a unique window ID. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_is_app_running">webui_interface_is_app_running</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Check if the app still running. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_set_response">webui_interface_set_response</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> When using `webui_interface_bind()`, you may need this function to easily set a response. </p></td> </tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_is_high_contrast">webui_is_high_contrast</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get OS high contrast preference. </p></td> +</tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_is_shown">webui_is_shown</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -453,18 +503,28 @@ <h1 class="allitems">All Identifiers</h1> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_navigate">webui_navigate</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Navigate to a specific URL. </p></td> +<td class="itemdesc"><p> Navigate to a specific URL. All clients. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_navigate_client">webui_navigate_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Navigate to a specific URL. Single client. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_new_window">webui_new_window</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Create a new WebUI window object. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_new_window_id">webui_new_window_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Create a new webui window object using a specified window number. </p></td> </tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_open_url">webui_open_url</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Open an URL in the native default web browser. </p></td> +</tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_return_bool">webui_return_bool</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -488,43 +548,63 @@ <h1 class="allitems">All Identifiers</h1> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_run">webui_run</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Run JavaScript without waiting for the response. </p></td> +<td class="itemdesc"><p> Run JavaScript without waiting for the response. All clients. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_run_client">webui_run_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Run JavaScript without waiting for the response. Single client. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_script">webui_script</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Run JavaScript and get the response back. Make sure your local buffer can hold the response. </p></td> +<td class="itemdesc"><p> Run JavaScript and get the response back. Work only in single client mode. Make sure your local buffer can hold the response. </p></td> +</tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_script_client">webui_script_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Run JavaScript and get the response back. Single client. Make sure your local buffer can hold the response. </p></td> </tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_send_raw">webui_send_raw</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Safely send raw data to the UI. </p></td> +<td class="itemdesc"><p> Safely send raw data to the UI. All clients. </p></td> </tr> <tr class="list2"> -<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_config">webui_set_config</a></td> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_send_raw_client">webui_send_raw_client</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Control the WebUI behaviour. It's better to call at the beginning. </p></td> +<td class="itemdesc"><p> Safely send raw data to the UI. Single client. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_config">webui_set_config</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Control the WebUI behaviour. It's recommended to be called at the beginning. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_default_root_folder">webui_set_default_root_folder</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the web-server root folder path for all windows. Should be used before `webui_show()`. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_event_blocking">webui_set_event_blocking</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Control if UI events comming from this window should be processed one a time in a single blocking thread `True`, or process every event in a new non-blocking thread `False`. This update single window. You can use `webui_set_config(ui_event_blocking, ...)` to update all windows. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_file_handler">webui_set_file_handler</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Set a custom handler to serve files. </p></td> +<td class="itemdesc"><p> Set a custom handler to serve files. This custom handler should return full HTTP header and body. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_hide">webui_set_hide</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set a window in hidden mode. Should be called before `webui_show()`. </p></td> </tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_high_contrast">webui_set_high_contrast</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. </p></td> +</tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_icon">webui_set_icon</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -578,7 +658,7 @@ <h1 class="allitems">All Identifiers</h1> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_timeout">webui_set_timeout</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. </p></td> +<td class="itemdesc"><p> Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_tls_certificate">webui_set_tls_certificate</a></td> @@ -588,7 +668,7 @@ <h1 class="allitems">All Identifiers</h1> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show">webui_show</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. </p></td> +<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_browser">webui_show_browser</a></td> @@ -596,10 +676,20 @@ <h1 class="allitems">All Identifiers</h1> <td class="itemdesc"><p> Same as `webui_show()`. But using a specific web browser. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_client">webui_show_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_wv">webui_show_wv</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Show a WebView window using embedded HTML, or a file. If the window is already open, it will be refreshed. Note: Win32 need `WebView2Loader.dll`. </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_start_server">webui_start_server</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Start only the web server and return the URL. This is useful for web app. </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUIConstants.html#WEBUI_VERSION_BUILD">WEBUI_VERSION_BUILD</a></td> <td class="itemunit"><a class="bold" href="uWebUIConstants.html">uWebUIConstants</a></td> diff --git a/docs/html/AllTypes.html b/docs/html/AllTypes.html index d93d65c..1628bea 100644 --- a/docs/html/AllTypes.html +++ b/docs/html/AllTypes.html @@ -56,10 +56,20 @@ <h1 class="allitems">All Types</h1> <td class="itemdesc"><p> WebUI char type. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a></td> +<td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> +<td class="itemdesc"><p> Client's unique ID. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> <td class="itemdesc"><p> WebUI configuration. </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a></td> +<td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> +<td class="itemdesc"><p> Client's connection ID. </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a></td> <td class="itemunit"><a class="bold" href="uWebUITypes.html">uWebUITypes</a></td> diff --git a/docs/html/AllVariables.html b/docs/html/AllVariables.html index c399dfe..00dad4d 100644 --- a/docs/html/AllVariables.html +++ b/docs/html/AllVariables.html @@ -23,17 +23,27 @@ <h1 class="allitems">All Variables</h1> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_bind">webui_bind</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Bind a specific html element click event with a function. Empty element means all events. </p></td> +<td class="itemdesc"><p> Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_browser_exist">webui_browser_exist</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Check if a web browser is installed. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_clean">webui_clean</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Free all memory resources. Should be called only at the end. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_close">webui_close</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Close a specific window only. The window object will still exist. </p></td> +<td class="itemdesc"><p> Close a specific window only. The window object will still exist. All clients. </p></td> +</tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_close_client">webui_close_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Close a specific client. </p></td> </tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_decode">webui_decode</a></td> @@ -106,15 +116,25 @@ <h1 class="allitems">All Variables</h1> <td class="itemdesc"><p> Get an argument as float at a specific index. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_free_port">webui_get_free_port</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get an available usable free network port. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_int">webui_get_int</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the first argument as integer. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_int_at">webui_get_int_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as integer at a specific index. </p></td> </tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_mime_type">webui_get_mime_type</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get the HTTP mime type of a file. </p></td> +</tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_new_window_id">webui_get_new_window_id</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -126,40 +146,50 @@ <h1 class="allitems">All Variables</h1> <td class="itemdesc"><p> Get the ID of the parent process (The web browser may re-create another new process). </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_port">webui_get_port</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_size">webui_get_size</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get size in bytes of the first argument. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_size_at">webui_get_size_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the size in bytes of an argument at a specific index. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_string">webui_get_string</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the first argument as string. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_string_at">webui_get_string_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as string at a specific index. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_get_url">webui_get_url</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get the full current URL. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_bind">webui_interface_bind</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Bind a specific HTML element click event with a function. Empty element means all events. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_bool_at">webui_interface_get_bool_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Get an argument as boolean at a specific index. </p></td> </tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_float_at">webui_interface_get_float_at</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get an argument as float at a specific index. </p></td> +</tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_interface_get_int_at">webui_interface_get_int_at</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> @@ -191,19 +221,29 @@ <h1 class="allitems">All Variables</h1> <td class="itemdesc"><p> When using `webui_interface_bind()`, you may need this function to easily set a response. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_is_high_contrast">webui_is_high_contrast</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Get OS high contrast preference. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_is_shown">webui_is_shown</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Check if the specified window is still running. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_malloc">webui_malloc</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Safely allocate memory using the WebUI memory management system. It can be safely freed using `webui_free()` at any time. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_navigate">webui_navigate</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Navigate to a specific URL. </p></td> +<td class="itemdesc"><p> Navigate to a specific URL. All clients. </p></td> +</tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_navigate_client">webui_navigate_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Navigate to a specific URL. Single client. </p></td> </tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_new_window">webui_new_window</a></td> @@ -216,44 +256,64 @@ <h1 class="allitems">All Variables</h1> <td class="itemdesc"><p> Create a new webui window object using a specified window number. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_open_url">webui_open_url</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Open an URL in the native default web browser. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_return_bool">webui_return_bool</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Return the response to JavaScript as boolean. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_return_float">webui_return_float</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Return the response to JavaScript as float. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_return_int">webui_return_int</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Return the response to JavaScript as integer. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_return_string">webui_return_string</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Return the response to JavaScript as string. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_run">webui_run</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Run JavaScript without waiting for the response. </p></td> +<td class="itemdesc"><p> Run JavaScript without waiting for the response. All clients. </p></td> +</tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_run_client">webui_run_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Run JavaScript without waiting for the response. Single client. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_script">webui_script</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Run JavaScript and get the response back. Make sure your local buffer can hold the response. </p></td> +<td class="itemdesc"><p> Run JavaScript and get the response back. Work only in single client mode. Make sure your local buffer can hold the response. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_script_client">webui_script_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Run JavaScript and get the response back. Single client. Make sure your local buffer can hold the response. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_send_raw">webui_send_raw</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Safely send raw data to the UI. </p></td> +<td class="itemdesc"><p> Safely send raw data to the UI. All clients. </p></td> +</tr> +<tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_send_raw_client">webui_send_raw_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Safely send raw data to the UI. Single client. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_config">webui_set_config</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Control the WebUI behaviour. It's better to call at the beginning. </p></td> +<td class="itemdesc"><p> Control the WebUI behaviour. It's recommended to be called at the beginning. </p></td> </tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_default_root_folder">webui_set_default_root_folder</a></td> @@ -268,7 +328,7 @@ <h1 class="allitems">All Variables</h1> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_file_handler">webui_set_file_handler</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Set a custom handler to serve files. </p></td> +<td class="itemdesc"><p> Set a custom handler to serve files. This custom handler should return full HTTP header and body. </p></td> </tr> <tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_hide">webui_set_hide</a></td> @@ -276,81 +336,96 @@ <h1 class="allitems">All Variables</h1> <td class="itemdesc"><p> Set a window in hidden mode. Should be called before `webui_show()`. </p></td> </tr> <tr class="list"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_high_contrast">webui_set_high_contrast</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. </p></td> +</tr> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_icon">webui_set_icon</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the default embedded HTML favicon. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_kiosk">webui_set_kiosk</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the window in Kiosk mode (Full screen). </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_port">webui_set_port</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set a custom web-server/websocket network port to be used by WebUI. This can be useful to determine the HTTP link of `webui.js` in case you are trying to use WebUI with an external web-server like NGNIX </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_position">webui_set_position</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the window position. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_profile">webui_set_profile</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the web browser profile to use. An empty `name` and `path` means the default user profile. Need to be called before `webui_show()`. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_proxy">webui_set_proxy</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the web browser proxy server to use. Need to be called before `webui_show()`. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_public">webui_set_public</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Allow a specific window address to be accessible from a public network. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_root_folder">webui_set_root_folder</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the web-server root folder path for a specific window. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_runtime">webui_set_runtime</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Chose between Deno and Nodejs as runtime for .js and .ts files. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_size">webui_set_size</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the window size. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_timeout">webui_set_timeout</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. </p></td> +<td class="itemdesc"><p> Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_set_tls_certificate">webui_set_tls_certificate</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Set the SSL/TLS certificate and the private key content, both in PEM format. This works only with `webui-2-secure` library. If set empty WebUI will generate a self-signed certificate. </p></td> </tr> -<tr class="list"> +<tr class="list2"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show">webui_show</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> -<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. </p></td> +<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. </p></td> </tr> -<tr class="list2"> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_browser">webui_show_browser</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Same as `webui_show()`. But using a specific web browser. </p></td> </tr> +<tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_client">webui_show_client</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. </p></td> +</tr> <tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_show_wv">webui_show_wv</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Show a WebView window using embedded HTML, or a file. If the window is already open, it will be refreshed. Note: Win32 need `WebView2Loader.dll`. </p></td> </tr> <tr class="list2"> +<td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_start_server">webui_start_server</a></td> +<td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> +<td class="itemdesc"><p> Start only the web server and return the URL. This is useful for web app. </p></td> +</tr> +<tr class="list"> <td class="itemname"><a class="bold" href="uWebUILibFunctions.html#webui_wait">webui_wait</a></td> <td class="itemunit"><a class="bold" href="uWebUILibFunctions.html">uWebUILibFunctions</a></td> <td class="itemdesc"><p> Wait until all opened windows get closed. </p></td> diff --git a/docs/html/WebUI4Delphi.hhc b/docs/html/WebUI4Delphi.hhc index 1f9b5ae..1cf186f 100644 --- a/docs/html/WebUI4Delphi.hhc +++ b/docs/html/WebUI4Delphi.hhc @@ -123,6 +123,14 @@ <param name="Name" value="Timeout"> <param name="Local" value="uWebUI.TWebUI.html#Timeout"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="IsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#IsHighContrast"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="FreePort"> +<param name="Local" value="uWebUI.TWebUI.html#FreePort"> +</object> </ul> <li><object type="text/sitemap"> <param name="Name" value="Methods"> @@ -154,8 +162,12 @@ <param name="Local" value="uWebUI.TWebUI.html#GetLibraryVersion"> </object> <li><object type="text/sitemap"> -<param name="Name" value="DefaultLibraryPath"> -<param name="Local" value="uWebUI.TWebUI.html#DefaultLibraryPath"> +<param name="Name" value="GetFreePort"> +<param name="Local" value="uWebUI.TWebUI.html#GetFreePort"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetIsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#GetIsHighContrast"> </object> <li><object type="text/sitemap"> <param name="Name" value="SetTimeout"> @@ -170,6 +182,10 @@ <param name="Local" value="uWebUI.TWebUI.html#DestroyWindowList"> </object> <li><object type="text/sitemap"> +<param name="Name" value="DefaultLibraryPath"> +<param name="Local" value="uWebUI.TWebUI.html#DefaultLibraryPath"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="LoadWebUILibrary"> <param name="Local" value="uWebUI.TWebUI.html#LoadWebUILibrary"> </object> @@ -261,6 +277,18 @@ <param name="Name" value="SetConfig"> <param name="Local" value="uWebUI.TWebUI.html#SetConfig"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="BrowserExist"> +<param name="Local" value="uWebUI.TWebUI.html#BrowserExist"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetMimeType"> +<param name="Local" value="uWebUI.TWebUI.html#GetMimeType"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="OpenURL"> +<param name="Local" value="uWebUI.TWebUI.html#OpenURL"> +</object> </ul> </ul> </ul> @@ -447,6 +475,18 @@ <param name="Name" value="Count"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Count"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Cookies"> +</object> </ul> <li><object type="text/sitemap"> <param name="Name" value="Methods"> @@ -490,6 +530,18 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCount"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Create"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Create"> </object> @@ -581,6 +633,30 @@ <param name="Name" value="SetResponse"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ShowClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SendRawClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#NavigateClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#RunClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ScriptClient"> +</object> </ul> </ul> </ul> @@ -658,6 +734,10 @@ <param name="Local" value="uWebUIMiscFunctions.html#StringToPWebUIChar"> </object> <li><object type="text/sitemap"> +<param name="Name" value="StringToPWebUIChar"> +<param name="Local" value="uWebUIMiscFunctions.html#StringToPWebUIChar"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="PathIsRelativeAnsi"> <param name="Local" value="uWebUIMiscFunctions.html#PathIsRelativeAnsi"> </object> @@ -741,6 +821,18 @@ <param name="Name" value="bind_id"> <param name="Local" value="uWebUITypes.TWebUIEvent.html#bind_id"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="client_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#client_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="connection_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#connection_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="cookies"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#cookies"> +</object> </ul> </ul> <li><object type="text/sitemap"> @@ -789,6 +881,18 @@ <param name="Name" value="Count"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Count"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Cookies"> +</object> </ul> <li><object type="text/sitemap"> <param name="Name" value="Methods"> @@ -832,6 +936,18 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCount"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetIntAt"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetIntAt"> </object> @@ -907,6 +1023,30 @@ <param name="Name" value="SetResponse"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SetResponse"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ShowClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SendRawClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#NavigateClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#RunClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ScriptClient"> +</object> </ul> </ul> <li><object type="text/sitemap"> @@ -944,10 +1084,18 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ChildProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="BestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#BestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="AllowWebView"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#AllowWebView"> </object> <li><object type="text/sitemap"> +<param name="Name" value="Port"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#Port"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="OnWebUIEvent"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#OnWebUIEvent"> </object> @@ -986,6 +1134,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetOnWebUIEvent"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetBestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetBestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetAllowWebView"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetAllowWebView"> </object> @@ -1034,6 +1186,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowBrowser"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ShowWV"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowWV"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetKiosk"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetKiosk"> </object> @@ -1090,10 +1246,18 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#DeleteProfile"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPort"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPort"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPort2"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Run"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Run"> </object> @@ -1113,6 +1277,14 @@ <param name="Name" value="SetEventBlocking"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetEventBlocking"> </object> +<li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#StartServer"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetHighContrast"> +</object> </ul> </ul> </ul> @@ -1146,10 +1318,18 @@ <param name="Local" value="uWebUITypes.html#TWebUIBindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="TWebUIClientID"> +<param name="Local" value="uWebUITypes.html#TWebUIClientID"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="TWebUIEventID"> <param name="Local" value="uWebUITypes.html#TWebUIEventID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="TWebUIConnectionID"> +<param name="Local" value="uWebUITypes.html#TWebUIConnectionID"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="TWebUIChar"> <param name="Local" value="uWebUITypes.html#TWebUIChar"> </object> @@ -1452,10 +1632,18 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#DeleteProfile"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPort"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPort"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPort2"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Run"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#Run"> </object> @@ -1476,6 +1664,14 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetEventBlocking"> </object> <li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#StartServer"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetNewWindowID"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetNewWindowID"> </object> @@ -1508,6 +1704,18 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#BindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Count"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Count"> </object> @@ -1558,6 +1766,18 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetBoolAt"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetCount"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCount"> </object> @@ -1630,6 +1850,22 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetWindowID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ScriptClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ShowClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#NavigateClient"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="ReturnBool"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ReturnBool"> </object> @@ -1654,6 +1890,14 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ReturnString"> </object> <li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#RunClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SendRawClient"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetResponse"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SetResponse"> </object> @@ -1674,6 +1918,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#AllowWebView"> </object> <li><object type="text/sitemap"> +<param name="Name" value="BestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#BestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="ChildProcessID"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#ChildProcessID"> </object> @@ -1698,6 +1946,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ParentProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="Port"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#Port"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Url"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Url"> </object> @@ -1732,6 +1984,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetAllowWebView"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetBestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetBestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetChildProcessID"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetChildProcessID"> </object> @@ -1756,6 +2012,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetParentProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetUrl"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetUrl"> </object> @@ -1784,6 +2044,14 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowBrowser"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ShowWV"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowWV"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#StartServer"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Close"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Close"> </object> @@ -1828,6 +2096,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetHide"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetIcon"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetIcon"> </object> @@ -1840,6 +2112,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetOnWebUIEvent"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPort2"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPosition"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPosition"> </object> @@ -1930,6 +2206,10 @@ <param name="Local" value="uWebUI.TWebUI.html#ErrorMessage"> </object> <li><object type="text/sitemap"> +<param name="Name" value="FreePort"> +<param name="Local" value="uWebUI.TWebUI.html#FreePort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="InitializationError"> <param name="Local" value="uWebUI.TWebUI.html#InitializationError"> </object> @@ -1942,6 +2222,10 @@ <param name="Local" value="uWebUI.TWebUI.html#IsAppRunning"> </object> <li><object type="text/sitemap"> +<param name="Name" value="IsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#IsHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="LibraryPath"> <param name="Local" value="uWebUI.TWebUI.html#LibraryPath"> </object> @@ -1984,6 +2268,14 @@ <param name="Local" value="uWebUI.TWebUI.html#AddWindow"> </object> <li><object type="text/sitemap"> +<param name="Name" value="BrowserExist"> +<param name="Local" value="uWebUI.TWebUI.html#BrowserExist"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetMimeType"> +<param name="Local" value="uWebUI.TWebUI.html#GetMimeType"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Initialize"> <param name="Local" value="uWebUI.TWebUI.html#Initialize"> </object> @@ -2008,6 +2300,10 @@ <param name="Local" value="uWebUI.TWebUI.html#GetErrorMessage"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetFreePort"> +<param name="Local" value="uWebUI.TWebUI.html#GetFreePort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetInitializationError"> <param name="Local" value="uWebUI.TWebUI.html#GetInitializationError"> </object> @@ -2020,6 +2316,10 @@ <param name="Local" value="uWebUI.TWebUI.html#GetIsAppRunning"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetIsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#GetIsHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetLibraryVersion"> <param name="Local" value="uWebUI.TWebUI.html#GetLibraryVersion"> </object> @@ -2072,6 +2372,10 @@ <param name="Local" value="uWebUI.TWebUI.html#Exit"> </object> <li><object type="text/sitemap"> +<param name="Name" value="OpenURL"> +<param name="Local" value="uWebUI.TWebUI.html#OpenURL"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="RemoveWindow"> <param name="Local" value="uWebUI.TWebUI.html#RemoveWindow"> </object> @@ -2152,6 +2456,18 @@ <param name="Local" value="uWebUITypes.TWebUIEvent.html#bind_id"> </object> <li><object type="text/sitemap"> +<param name="Name" value="client_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#client_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="connection_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#connection_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="cookies"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="element"> <param name="Local" value="uWebUITypes.TWebUIEvent.html#element"> </object> @@ -2194,6 +2510,18 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#BindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Count"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Count"> </object> @@ -2288,10 +2616,30 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetStringAt"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ScriptClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ShowClient"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetBindID"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetBindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetCount"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCount"> </object> @@ -2324,6 +2672,14 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetWindowID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#NavigateClient"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="ReturnBool"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ReturnBool"> </object> @@ -2348,6 +2704,14 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ReturnString"> </object> <li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#RunClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SendRawClient"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetResponse"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse"> </object> @@ -2476,6 +2840,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetNewWindowID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="HasBindID"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#HasBindID"> </object> @@ -2504,6 +2872,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#ShowWV"> </object> <li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#StartServer"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetAllowWebView"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetAllowWebView"> </object> @@ -2588,6 +2960,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetHide"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetIcon"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetIcon"> </object> @@ -2596,6 +2972,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetKiosk"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPort2"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPosition"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPosition"> </object> diff --git a/docs/html/WebUI4Delphi.hhk b/docs/html/WebUI4Delphi.hhk index 09d132b..d3f1d47 100644 --- a/docs/html/WebUI4Delphi.hhk +++ b/docs/html/WebUI4Delphi.hhk @@ -57,6 +57,22 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#BindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Count"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Count"> </object> @@ -89,6 +105,18 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetBoolAt-NativeUInt-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetCount"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#GetCount"> </object> @@ -165,6 +193,10 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Initialized"> </object> <li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#NavigateClient-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="ReturnBool"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ReturnBool-boolean-"> </object> @@ -195,10 +227,26 @@ <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ReturnString-string-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#RunClient-string-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ScriptClient-string-NativeUInt-string-NativeUInt-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SendRawClient-string-Pointer-NativeUInt-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetResponse"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#SetResponse-string-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUITypes.IWebUIEventHandler.html#ShowClient-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Window"> <param name="Local" value="uWebUITypes.IWebUIEventHandler.html#Window"> </object> @@ -215,6 +263,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#AllowWebView"> </object> <li><object type="text/sitemap"> +<param name="Name" value="BestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#BestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Bind"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Bind-string-TWebUIBindCallback-"> </object> @@ -271,6 +323,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetAllowWebView"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetBestBrowser"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetBestBrowser"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetChildProcessID"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetChildProcessID"> </object> @@ -295,6 +351,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetParentProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetUrl"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#GetUrl"> </object> @@ -327,6 +387,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ParentProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="Port"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#Port"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Run"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Run-string-"> </object> @@ -355,6 +419,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetHide-boolean-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetHighContrast-boolean-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetIcon"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetIcon-string-string-"> </object> @@ -371,6 +439,10 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPort-NativeUInt-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPort2-NativeUInt-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPosition"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#SetPosition-cardinal-cardinal-"> </object> @@ -407,6 +479,14 @@ <param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowBrowser-string-TWebUIBrowser-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ShowWV"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#ShowWV-string-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUITypes.IWebUIWindow.html#StartServer-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Url"> <param name="Local" value="uWebUITypes.IWebUIWindow.html#Url"> </object> @@ -464,8 +544,18 @@ </object> <li><object type="text/sitemap"> <param name="Name" value="StringToPWebUIChar"> +<param name="Local" value="uWebUIMiscFunctions.html#StringToPWebUIChar-AnsiString-integer-"> +</object> +<ul> +<li><object type="text/sitemap"> +<param name="Name" value="uWebUIMiscFunctions Unit"> +<param name="Local" value="uWebUIMiscFunctions.html#StringToPWebUIChar-AnsiString-integer-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="uWebUIMiscFunctions Unit"> <param name="Local" value="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-"> </object> +</ul> <li><object type="text/sitemap"> <param name="Name" value="TLoaderStatus"> <param name="Local" value="uWebUITypes.html#TLoaderStatus"> @@ -505,6 +595,10 @@ <param name="Local" value="uWebUI.TWebUI.html#BeforeDestruction"> </object> <li><object type="text/sitemap"> +<param name="Name" value="BrowserExist"> +<param name="Local" value="uWebUI.TWebUI.html#BrowserExist-TWebUIBrowser-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Clean"> <param name="Local" value="uWebUI.TWebUI.html#Clean"> </object> @@ -553,6 +647,10 @@ <param name="Local" value="uWebUI.TWebUI.html#FLibraryPath"> </object> <li><object type="text/sitemap"> +<param name="Name" value="FreePort"> +<param name="Local" value="uWebUI.TWebUI.html#FreePort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="FReRaiseExceptions"> <param name="Local" value="uWebUI.TWebUI.html#FReRaiseExceptions"> </object> @@ -581,6 +679,10 @@ <param name="Local" value="uWebUI.TWebUI.html#GetErrorMessage"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetFreePort"> +<param name="Local" value="uWebUI.TWebUI.html#GetFreePort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetInitializationError"> <param name="Local" value="uWebUI.TWebUI.html#GetInitializationError"> </object> @@ -593,10 +695,18 @@ <param name="Local" value="uWebUI.TWebUI.html#GetIsAppRunning"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetIsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#GetIsHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetLibraryVersion"> <param name="Local" value="uWebUI.TWebUI.html#GetLibraryVersion"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetMimeType"> +<param name="Local" value="uWebUI.TWebUI.html#GetMimeType-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetStatus"> <param name="Local" value="uWebUI.TWebUI.html#GetStatus"> </object> @@ -617,6 +727,10 @@ <param name="Local" value="uWebUI.TWebUI.html#IsAppRunning"> </object> <li><object type="text/sitemap"> +<param name="Name" value="IsHighContrast"> +<param name="Local" value="uWebUI.TWebUI.html#IsHighContrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="LibraryPath"> <param name="Local" value="uWebUI.TWebUI.html#LibraryPath"> </object> @@ -637,6 +751,10 @@ <param name="Local" value="uWebUI.TWebUI.html#Lock"> </object> <li><object type="text/sitemap"> +<param name="Name" value="OpenURL"> +<param name="Local" value="uWebUI.TWebUI.html#OpenURL-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="RemoveWindow"> <param name="Local" value="uWebUI.TWebUI.html#RemoveWindow-TWebUIWindowID-"> </object> @@ -724,16 +842,16 @@ </ul> <li><object type="text/sitemap"> <param name="Name" value="Encode"> -<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-string-"> +<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-PWebUIChar-"> </object> <ul> <li><object type="text/sitemap"> <param name="Name" value="TWebUIBase64 - uWebUIBase64 Unit"> -<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-string-"> +<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-PWebUIChar-"> </object> <li><object type="text/sitemap"> <param name="Name" value="TWebUIBase64 - uWebUIBase64 Unit"> -<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-PWebUIChar-"> +<param name="Local" value="uWebUIBase64.TWebUIBase64.html#Encode-string-"> </object> </ul> <li><object type="text/sitemap"> @@ -753,10 +871,18 @@ <param name="Local" value="uWebUITypes.html#TWebUIChar"> </object> <li><object type="text/sitemap"> +<param name="Name" value="TWebUIClientID"> +<param name="Local" value="uWebUITypes.html#TWebUIClientID"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="TWebUIConfig"> <param name="Local" value="uWebUITypes.html#TWebUIConfig"> </object> <li><object type="text/sitemap"> +<param name="Name" value="TWebUIConnectionID"> +<param name="Local" value="uWebUITypes.html#TWebUIConnectionID"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="TWebUIEvent"> <param name="Local" value="uWebUITypes.TWebUIEvent.html"> </object> @@ -765,6 +891,18 @@ <param name="Local" value="uWebUITypes.TWebUIEvent.html#bind_id"> </object> <li><object type="text/sitemap"> +<param name="Name" value="client_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#client_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="connection_id"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#connection_id"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="cookies"> +<param name="Local" value="uWebUITypes.TWebUIEvent.html#cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="element"> <param name="Local" value="uWebUITypes.TWebUIEvent.html#element"> </object> @@ -789,17 +927,33 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#BindID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="ClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="CloseClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#CloseClient"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="Cookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Cookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Count"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Count"> </object> <li><object type="text/sitemap"> <param name="Name" value="Create"> -<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-TWebUIClientID-TWebUIConnectionID-PWebUIChar-"> </object> <ul> <li><object type="text/sitemap"> <param name="Name" value="TWebUIEventHandler - uWebUIEventHandler Unit"> -<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-TWebUIClientID-TWebUIConnectionID-PWebUIChar-"> </object> <li><object type="text/sitemap"> <param name="Name" value="TWebUIEventHandler - uWebUIEventHandler Unit"> @@ -839,6 +993,18 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetBoolAt-NativeUInt-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetClientID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetConnectionID"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="GetCookies"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetCount"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#GetCount"> </object> @@ -915,6 +1081,10 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Initialized"> </object> <li><object type="text/sitemap"> +<param name="Name" value="NavigateClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#NavigateClient-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="ReturnBool"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ReturnBool-boolean-"> </object> @@ -945,6 +1115,18 @@ <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ReturnString-string-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="RunClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#RunClient-string-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="ScriptClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ScriptClient-string-NativeUInt-string-NativeUInt-"> +</object> +<li><object type="text/sitemap"> +<param name="Name" value="SendRawClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SendRawClient-string-Pointer-NativeUInt-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetResponse"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-TMemoryStream-int64-int64-"> </object> @@ -963,6 +1145,10 @@ </object> </ul> <li><object type="text/sitemap"> +<param name="Name" value="ShowClient"> +<param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#ShowClient-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="Window"> <param name="Local" value="uWebUIEventHandler.TWebUIEventHandler.html#Window"> </object> @@ -1145,6 +1331,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetParentProcessID"> </object> <li><object type="text/sitemap"> +<param name="Name" value="GetPort"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetPort"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="GetUrl"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#GetUrl"> </object> @@ -1213,6 +1403,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetHide-boolean-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetHighContrast"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetHighContrast-boolean-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetIcon"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetIcon-string-string-"> </object> @@ -1229,6 +1423,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPort-NativeUInt-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="SetPort2"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPort2-NativeUInt-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="SetPosition"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#SetPosition-cardinal-cardinal-"> </object> @@ -1269,6 +1467,10 @@ <param name="Local" value="uWebUIWindow.TWebUIWindow.html#ShowWV-string-"> </object> <li><object type="text/sitemap"> +<param name="Name" value="StartServer"> +<param name="Local" value="uWebUIWindow.TWebUIWindow.html#StartServer-string-"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="UnLock"> <param name="Local" value="uWebUIWindow.TWebUIWindow.html#UnLock"> </object> @@ -1289,6 +1491,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_bind"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_browser_exist"> +<param name="Local" value="uWebUILibFunctions.html#webui_browser_exist"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_clean"> <param name="Local" value="uWebUILibFunctions.html#webui_clean"> </object> @@ -1297,6 +1503,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_close"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_close_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_close_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="WEBUI_DEBUG_LIB"> <param name="Local" value="uWebUIConstants.html#WEBUI_DEBUG_LIB"> </object> @@ -1361,6 +1571,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_get_float_at"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_get_free_port"> +<param name="Local" value="uWebUILibFunctions.html#webui_get_free_port"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_get_int"> <param name="Local" value="uWebUILibFunctions.html#webui_get_int"> </object> @@ -1369,6 +1583,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_get_int_at"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_get_mime_type"> +<param name="Local" value="uWebUILibFunctions.html#webui_get_mime_type"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_get_new_window_id"> <param name="Local" value="uWebUILibFunctions.html#webui_get_new_window_id"> </object> @@ -1377,6 +1595,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_get_parent_process_id"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_get_port"> +<param name="Local" value="uWebUILibFunctions.html#webui_get_port"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_get_size"> <param name="Local" value="uWebUILibFunctions.html#webui_get_size"> </object> @@ -1405,6 +1627,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_interface_get_bool_at"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_interface_get_float_at"> +<param name="Local" value="uWebUILibFunctions.html#webui_interface_get_float_at"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_interface_get_int_at"> <param name="Local" value="uWebUILibFunctions.html#webui_interface_get_int_at"> </object> @@ -1429,6 +1655,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_interface_set_response"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_is_high_contrast"> +<param name="Local" value="uWebUILibFunctions.html#webui_is_high_contrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_is_shown"> <param name="Local" value="uWebUILibFunctions.html#webui_is_shown"> </object> @@ -1453,6 +1683,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_navigate"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_navigate_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_navigate_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_new_window"> <param name="Local" value="uWebUILibFunctions.html#webui_new_window"> </object> @@ -1461,6 +1695,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_new_window_id"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_open_url"> +<param name="Local" value="uWebUILibFunctions.html#webui_open_url"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_return_bool"> <param name="Local" value="uWebUILibFunctions.html#webui_return_bool"> </object> @@ -1481,14 +1719,26 @@ <param name="Local" value="uWebUILibFunctions.html#webui_run"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_run_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_run_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_script"> <param name="Local" value="uWebUILibFunctions.html#webui_script"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_script_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_script_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_send_raw"> <param name="Local" value="uWebUILibFunctions.html#webui_send_raw"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_send_raw_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_send_raw_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_set_config"> <param name="Local" value="uWebUILibFunctions.html#webui_set_config"> </object> @@ -1509,6 +1759,10 @@ <param name="Local" value="uWebUILibFunctions.html#webui_set_hide"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_set_high_contrast"> +<param name="Local" value="uWebUILibFunctions.html#webui_set_high_contrast"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_set_icon"> <param name="Local" value="uWebUILibFunctions.html#webui_set_icon"> </object> @@ -1565,10 +1819,18 @@ <param name="Local" value="uWebUILibFunctions.html#webui_show_browser"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_show_client"> +<param name="Local" value="uWebUILibFunctions.html#webui_show_client"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="webui_show_wv"> <param name="Local" value="uWebUILibFunctions.html#webui_show_wv"> </object> <li><object type="text/sitemap"> +<param name="Name" value="webui_start_server"> +<param name="Local" value="uWebUILibFunctions.html#webui_start_server"> +</object> +<li><object type="text/sitemap"> <param name="Name" value="WEBUI_VERSION_BUILD"> <param name="Local" value="uWebUIConstants.html#WEBUI_VERSION_BUILD"> </object> diff --git a/docs/html/WebUI4Delphi.log b/docs/html/WebUI4Delphi.log index 66845a6..33f5c89 100644 --- a/docs/html/WebUI4Delphi.log +++ b/docs/html/WebUI4Delphi.log @@ -36,11 +36,11 @@ automated.gif pasdoc.css Compile time: 0 minutes, 0 seconds -535 Topics -3,994 Local links +619 Topics +4,646 Local links 5 Internet links 5 Graphics -Created c:\Users\usuario\Documents\Embarcadero\Studio\Projects\WebUI4Delphi\docs\WebUI4Delphi.chm, 126,794 bytes -Compression decreased file by 695,136 bytes. +Created c:\Users\usuario\Documents\Embarcadero\Studio\Projects\WebUI4Delphi\docs\WebUI4Delphi.chm, 148,426 bytes +Compression decreased file by 808,787 bytes. diff --git a/docs/html/uWebUI.TWebUI.html b/docs/html/uWebUI.TWebUI.html index a6224f2..53d3d0f 100644 --- a/docs/html/uWebUI.TWebUI.html +++ b/docs/html/uWebUI.TWebUI.html @@ -98,20 +98,28 @@ <h2 class="description">Description</h2> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#DefaultLibraryPath">DefaultLibraryPath</a></strong>: string;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#GetFreePort">GetFreePort</a></strong>: NativeUInt;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#SetTimeout-NativeUInt-">SetTimeout</a></strong>(aValue: NativeUInt);</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#GetIsHighContrast">GetIsHighContrast</a></strong>: boolean;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#SetStatus-TLoaderStatus-">SetStatus</a></strong>(aValue: <a href="uWebUITypes.html#TLoaderStatus">TLoaderStatus</a>);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#SetTimeout-NativeUInt-">SetTimeout</a></strong>(aValue: NativeUInt);</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#SetStatus-TLoaderStatus-">SetStatus</a></strong>(aValue: <a href="uWebUITypes.html#TLoaderStatus">TLoaderStatus</a>);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#DestroyWindowList">DestroyWindowList</a></strong>;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#DefaultLibraryPath">DefaultLibraryPath</a></strong>: string;</code></td> +</tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> <td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#LoadWebUILibrary">LoadWebUILibrary</a></strong>: boolean;</code></td> @@ -204,6 +212,18 @@ <h2 class="description">Description</h2> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#SetConfig-TWebUIConfig-boolean-">SetConfig</a></strong>(option: <a href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a>; status: boolean);</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#BrowserExist-TWebUIBrowser-">BrowserExist</a></strong>(browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUI.TWebUI.html#GetMimeType-string-">GetMimeType</a></strong>(const file_: string): string;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUI.TWebUI.html#OpenURL-string-">OpenURL</a></strong>(const url: string);</code></td> +</tr> </table> <span id="PasDoc-Properties"></span><h3 class="summary">Properties</h3> <table class="summary wide_list"> @@ -251,6 +271,14 @@ <h2 class="description">Description</h2> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>property <strong><a href="uWebUI.TWebUI.html#Timeout">Timeout</a></strong> : NativeUInt read <a href="uWebUI.TWebUI.html#FTimeout">FTimeout</a> write <a href="uWebUI.TWebUI.html#SetTimeout-NativeUInt-">SetTimeout</a>;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUI.TWebUI.html#IsHighContrast">IsHighContrast</a></strong> : boolean read <a href="uWebUI.TWebUI.html#GetIsHighContrast">GetIsHighContrast</a>;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUI.TWebUI.html#FreePort">FreePort</a></strong> : NativeUInt read <a href="uWebUI.TWebUI.html#GetFreePort">GetFreePort</a>;</code></td> +</tr> </table> <h2 class="description">Description</h2> <h3 class="detail">Fields</h3> @@ -394,7 +422,15 @@ <h3 class="detail">Methods</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> -<td class="itemcode"><span id="DefaultLibraryPath"></span><code>function <strong>DefaultLibraryPath</strong>: string;</code></td> +<td class="itemcode"><span id="GetFreePort"></span><code>function <strong>GetFreePort</strong>: NativeUInt;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><span id="GetIsHighContrast"></span><code>function <strong>GetIsHighContrast</strong>: boolean;</code></td> </tr> <tr><td colspan="2"> <p class="nodescription">This item has no description.</p></td></tr> @@ -426,6 +462,14 @@ <h3 class="detail">Methods</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><span id="DefaultLibraryPath"></span><code>function <strong>DefaultLibraryPath</strong>: string;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> <td class="itemcode"><span id="LoadWebUILibrary"></span><code>function <strong>LoadWebUILibrary</strong>: boolean;</code></td> </tr> <tr><td colspan="2"> @@ -674,7 +718,7 @@ <h6 class="description_section">Returns</h6> </tr> <tr><td colspan="2"> <p> - Control the WebUI behaviour. It's better to call at the beginning. </p> + Control the WebUI behaviour. It's recommended to be called at the beginning. </p> <p> @@ -690,6 +734,69 @@ <h6 class="description_section">Parameters</h6> </dl> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="BrowserExist-TWebUIBrowser-"></span><code>function <strong>BrowserExist</strong>(browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Check if a web browser is installed. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_is_high_contrast))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>browser</dt> +<dd>The web browser to be found.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns True if the specified browser is available.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetMimeType-string-"></span><code>function <strong>GetMimeType</strong>(const file_: string): string;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get the HTTP mime type of a file. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_mime_type))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>file_</dt> +<dd>The file name.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns the HTTP mime string.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="OpenURL-string-"></span><code>procedure <strong>OpenURL</strong>(const url: string);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Open an URL in the native default web browser. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_open_url))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>url</dt> +<dd>The URL to open.</dd> +</dl> +</td></tr> +</table> <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> @@ -802,13 +909,41 @@ <h3 class="detail">Properties</h3> </tr> <tr><td colspan="2"> <p> - Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. </p> + Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. </p> <p> <p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_timeout))</p> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="IsHighContrast"></span><code>property <strong>IsHighContrast</strong> : boolean read <a href="uWebUI.TWebUI.html#GetIsHighContrast">GetIsHighContrast</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get OS high contrast preference. </p> +<p> + @returns(Returns True if OS is using high contrast theme.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_is_high_contrast))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="FreePort"></span><code>property <strong>FreePort</strong> : NativeUInt read <a href="uWebUI.TWebUI.html#GetFreePort">GetFreePort</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get an available usable free network port. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_free_port))</p> +</td></tr> +</table> <hr><span class="appinfo"><em>Generated by <a href="https://pasdoc.github.io/">PasDoc 0.16.0-snapshot</a>. </em> </span> </body></html> diff --git a/docs/html/uWebUIConstants.html b/docs/html/uWebUIConstants.html index 5a8397e..8ccc3cb 100644 --- a/docs/html/uWebUIConstants.html +++ b/docs/html/uWebUIConstants.html @@ -28,7 +28,7 @@ <h1 class="unit">Unit uWebUIConstants</h1> <td class="itemcode"><code><strong><a href="uWebUIConstants.html#WEBUI_VERSION_BUILD">WEBUI_VERSION_BUILD</a></strong> = 0;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUIConstants.html#WEBUI_VERSION_STAGE">WEBUI_VERSION_STAGE</a></strong> = 'beta.1';</code></td> +<td class="itemcode"><code><strong><a href="uWebUIConstants.html#WEBUI_VERSION_STAGE">WEBUI_VERSION_STAGE</a></strong> = 'beta.2';</code></td> </tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUIConstants.html#WEBUI_MAX_IDS">WEBUI_MAX_IDS</a></strong> = 256;</code></td> @@ -83,7 +83,7 @@ <h3 class="detail">Constants</h3> </table> <table class="detail wide_list"> <tr class="list"> -<td class="itemcode"><span id="WEBUI_VERSION_STAGE"></span><code><strong>WEBUI_VERSION_STAGE</strong> = 'beta.1';</code></td> +<td class="itemcode"><span id="WEBUI_VERSION_STAGE"></span><code><strong>WEBUI_VERSION_STAGE</strong> = 'beta.2';</code></td> </tr> <tr><td colspan="1"> <p class="nodescription">This item has no description.</p></td></tr> diff --git a/docs/html/uWebUIEventHandler.TWebUIEventHandler.html b/docs/html/uWebUIEventHandler.TWebUIEventHandler.html index 5f53291..668cd4e 100644 --- a/docs/html/uWebUIEventHandler.TWebUIEventHandler.html +++ b/docs/html/uWebUIEventHandler.TWebUIEventHandler.html @@ -69,135 +69,183 @@ <h2 class="description">Description</h2> <td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCount">GetCount</a></strong>: NativeUInt;</code></td> </tr> <tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID">GetClientID</a></strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID">GetConnectionID</a></strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies">GetCookies</a></strong>: string;</code></td> +</tr> +<tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>constructor <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Create-PWebUIEvent-">Create</a></strong>(const aEvent: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>); overload;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>constructor <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-TWebUIClientID-TWebUIConnectionID-PWebUIChar-">Create</a></strong>(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_type: <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a>; const element: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; bind_id: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; client_id: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>; connection_id: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>; const cookies: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); overload;</code></td> +</tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>constructor <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-">Create</a></strong>(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_type: <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a>; const element: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; bind_id: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>); overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetIntAt-NativeUInt-">GetIntAt</a></strong>(index: NativeUInt): int64;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetIntAt-NativeUInt-">GetIntAt</a></strong>(index: NativeUInt): int64;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInt">GetInt</a></strong>: int64;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInt">GetInt</a></strong>: int64;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetFloatAt-NativeUInt-">GetFloatAt</a></strong>(index: NativeUInt): double;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetFloatAt-NativeUInt-">GetFloatAt</a></strong>(index: NativeUInt): double;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetFloat">GetFloat</a></strong>: double;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetFloat">GetFloat</a></strong>: double;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStringAt-NativeUInt-">GetStringAt</a></strong>(index: NativeUInt): string;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStringAt-NativeUInt-">GetStringAt</a></strong>(index: NativeUInt): string;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetString">GetString</a></strong>: string;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetString">GetString</a></strong>: string;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStreamAt-TMemoryStream-NativeUInt-">GetStreamAt</a></strong>(var aResultStream: TMemoryStream; index: NativeUInt): boolean;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStreamAt-TMemoryStream-NativeUInt-">GetStreamAt</a></strong>(var aResultStream: TMemoryStream; index: NativeUInt): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStream-TMemoryStream-">GetStream</a></strong>(var aResultStream: TMemoryStream): boolean;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetStream-TMemoryStream-">GetStream</a></strong>(var aResultStream: TMemoryStream): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBoolAt-NativeUInt-">GetBoolAt</a></strong>(index: NativeUInt): boolean;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBoolAt-NativeUInt-">GetBoolAt</a></strong>(index: NativeUInt): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBool">GetBool</a></strong>: boolean;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBool">GetBool</a></strong>: boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetSizeAt-NativeUInt-">GetSizeAt</a></strong>(index: NativeUInt): NativeUInt;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetSizeAt-NativeUInt-">GetSizeAt</a></strong>(index: NativeUInt): NativeUInt;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetSize">GetSize</a></strong>: NativeUInt;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#GetSize">GetSize</a></strong>: NativeUInt;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnInt-int64-">ReturnInt</a></strong>(aReturnValue: int64);</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnInt-int64-">ReturnInt</a></strong>(aReturnValue: int64);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnFloat-double-">ReturnFloat</a></strong>(aReturnValue: double);</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnFloat-double-">ReturnFloat</a></strong>(aReturnValue: double);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnString-string-">ReturnString</a></strong>(const aReturnValue: string);</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnString-string-">ReturnString</a></strong>(const aReturnValue: string);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnStream-TMemoryStream-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream); overload;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnStream-TMemoryStream-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnStream-TMemoryStream-int64-int64-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream; aOffset, aCount: int64); overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnStream-TMemoryStream-int64-int64-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream; aOffset, aCount: int64); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnBool-boolean-">ReturnBool</a></strong>(aReturnValue: boolean);</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ReturnBool-boolean-">ReturnBool</a></strong>(aReturnValue: boolean);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-string-">SetResponse</a></strong>(const response: string); overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-string-">SetResponse</a></strong>(const response: string); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-TMemoryStream-">SetResponse</a></strong>(const response: TMemoryStream); overload;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-TMemoryStream-">SetResponse</a></strong>(const response: TMemoryStream); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-TMemoryStream-int64-int64-">SetResponse</a></strong>(const response: TMemoryStream; aOffset, aCount: int64); overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SetResponse-TMemoryStream-int64-int64-">SetResponse</a></strong>(const response: TMemoryStream; aOffset, aCount: int64); overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ShowClient-string-">ShowClient</a></strong>(const content : string) : boolean;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#CloseClient">CloseClient</a></strong>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#SendRawClient-string-Pointer-NativeUInt-">SendRawClient</a></strong>(const function_: string; const raw: Pointer; size: NativeUInt);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#NavigateClient-string-">NavigateClient</a></strong>(const Url: string);</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#RunClient-string-">RunClient</a></strong>(const script_: string);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ScriptClient-string-NativeUInt-string-NativeUInt-">ScriptClient</a></strong>(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean;</code></td> </tr> </table> <span id="PasDoc-Properties"></span><h3 class="summary">Properties</h3> <table class="summary wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Initialized">Initialized</a></strong> : boolean read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Initialized">Initialized</a></strong> : boolean read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Event">Event</a></strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Event">Event</a></strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Window">Window</a></strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Window">Window</a></strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#WindowID">WindowID</a></strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#WindowID">WindowID</a></strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#EventType">EventType</a></strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#EventType">EventType</a></strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Element">Element</a></strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Element">Element</a></strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#EventID">EventID</a></strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#EventID">EventID</a></strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#BindID">BindID</a></strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#BindID">BindID</a></strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Count">Count</a></strong> : NativeUInt read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Count">Count</a></strong> : NativeUInt read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ClientID">ClientID</a></strong> : <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID">GetClientID</a>;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#ConnectionID">ConnectionID</a></strong> : <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID">GetConnectionID</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUIEventHandler.TWebUIEventHandler.html#Cookies">Cookies</a></strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies">GetCookies</a>;</code></td> </tr> </table> <h2 class="description">Description</h2> @@ -285,6 +333,30 @@ <h3 class="detail">Methods</h3> </table> <table class="detail wide_list"> <tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><span id="GetClientID"></span><code>function <strong>GetClientID</strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><span id="GetConnectionID"></span><code>function <strong>GetConnectionID</strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="protected.gif" alt="Protected" title="Protected"></a></td> +<td class="itemcode"><span id="GetCookies"></span><code>function <strong>GetCookies</strong>: string;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="Create-PWebUIEvent-"></span><code>constructor <strong>Create</strong>(const aEvent: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>); overload;</code></td> </tr> @@ -294,7 +366,7 @@ <h3 class="detail">Methods</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-"></span><code>constructor <strong>Create</strong>(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_type: <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a>; const element: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; bind_id: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>); overload;</code></td> +<td class="itemcode"><span id="Create-TWebUIWindowID-TWebUIEventType-PWebUIChar-TWebUIEventID-TWebUIBindID-TWebUIClientID-TWebUIConnectionID-PWebUIChar-"></span><code>constructor <strong>Create</strong>(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_type: <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a>; const element: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; bind_id: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; client_id: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>; connection_id: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>; const cookies: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); overload;</code></td> </tr> <tr><td colspan="2"> <p class="nodescription">This item has no description.</p></td></tr> @@ -715,11 +787,146 @@ <h6 class="description_section">Parameters</h6> </dl> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ShowClient-string-"></span><code>function <strong>ShowClient</strong>(const content : string) : boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_show_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>content</dt> +<dd>The HTML, URL, Or a local file.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns True if showing the window is successed.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="CloseClient"></span><code>procedure <strong>CloseClient</strong>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Close a specific client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_close_client))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SendRawClient-string-Pointer-NativeUInt-"></span><code>procedure <strong>SendRawClient</strong>(const function_: string; const raw: Pointer; size: NativeUInt);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Safely send raw data to the UI. Single client. </p> +<p> + + +<p> + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_send_raw_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>function_</dt> +<dd>The JavaScript function to receive raw data: `function * myFunc(myData){}`.</dd> +<dt>raw</dt> +<dd>The raw data buffer.</dd> +<dt>size</dt> +<dd>The raw data size in bytes.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="NavigateClient-string-"></span><code>procedure <strong>NavigateClient</strong>(const Url: string);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Navigate to a specific URL. Single client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_navigate_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>url</dt> +<dd>Full HTTP URL.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="RunClient-string-"></span><code>procedure <strong>RunClient</strong>(const script_: string);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Run JavaScript without waiting for the response. Single client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_run))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>script_</dt> +<dd>The JavaScript to be run.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ScriptClient-string-NativeUInt-string-NativeUInt-"></span><code>function <strong>ScriptClient</strong>(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Run JavaScript and get the response back. Single client. Make sure your local buffer can hold the response. </p> +<p> + + +<p> + +<p> + +<p> + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_script))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>script_</dt> +<dd>The JavaScript to be run.</dd> +<dt>timeout</dt> +<dd>The execution timeout in seconds.</dd> +<dt>buffer</dt> +<dd>The local buffer to hold the response.</dd> +<dt>buffer_length</dt> +<dd>The local buffer size.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns True if there is no execution error.</p></td></tr> +</table> <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Initialized"></span><code>property <strong>Initialized</strong> : boolean read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> +<td class="itemcode"><span id="Initialized"></span><code>property <strong>Initialized</strong> : boolean read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -729,7 +936,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Event"></span><code>property <strong>Event</strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> +<td class="itemcode"><span id="Event"></span><code>property <strong>Event</strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -743,7 +950,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Window"></span><code>property <strong>Window</strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> +<td class="itemcode"><span id="Window"></span><code>property <strong>Window</strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -753,7 +960,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="WindowID"></span><code>property <strong>WindowID</strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> +<td class="itemcode"><span id="WindowID"></span><code>property <strong>WindowID</strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -763,7 +970,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="EventType"></span><code>property <strong>EventType</strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> +<td class="itemcode"><span id="EventType"></span><code>property <strong>EventType</strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -773,7 +980,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Element"></span><code>property <strong>Element</strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> +<td class="itemcode"><span id="Element"></span><code>property <strong>Element</strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -783,7 +990,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="EventID"></span><code>property <strong>EventID</strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> +<td class="itemcode"><span id="EventID"></span><code>property <strong>EventID</strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -793,7 +1000,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="BindID"></span><code>property <strong>BindID</strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> +<td class="itemcode"><span id="BindID"></span><code>property <strong>BindID</strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -803,7 +1010,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Count"></span><code>property <strong>Count</strong> : NativeUInt read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +<td class="itemcode"><span id="Count"></span><code>property <strong>Count</strong> : NativeUInt read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -814,6 +1021,36 @@ <h3 class="detail">Properties</h3> <p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_count))</p> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ClientID"></span><code>property <strong>ClientID</strong> : <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetClientID">GetClientID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's unique ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ConnectionID"></span><code>property <strong>ConnectionID</strong> : <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a> read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetConnectionID">GetConnectionID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's connection ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="Cookies"></span><code>property <strong>Cookies</strong> : string read <a href="uWebUIEventHandler.TWebUIEventHandler.html#GetCookies">GetCookies</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's full cookies. </p> +</td></tr> +</table> <hr><span class="appinfo"><em>Generated by <a href="https://pasdoc.github.io/">PasDoc 0.16.0-snapshot</a>. </em> </span> </body></html> diff --git a/docs/html/uWebUILibFunctions.html b/docs/html/uWebUILibFunctions.html index b54595c..ff164b7 100644 --- a/docs/html/uWebUILibFunctions.html +++ b/docs/html/uWebUILibFunctions.html @@ -34,8 +34,14 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_show">webui_show</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_show_client">webui_show_client</a></strong>: function(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_show_browser">webui_show_browser</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean; cdecl;</code></td> </tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_start_server">webui_start_server</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const path: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; cdecl;</code></td> +</tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_show_wv">webui_show_wv</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> </tr> @@ -43,11 +49,23 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_kiosk">webui_set_kiosk</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_wait">webui_wait</a></strong>: procedure(); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_high_contrast">webui_set_high_contrast</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_is_high_contrast">webui_is_high_contrast</a></strong>: function(): boolean; cdecl;</code></td> +</tr> +<tr class="list2"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_browser_exist">webui_browser_exist</a></strong>: function(browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean; cdecl;</code></td> +</tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_wait">webui_wait</a></strong>: procedure(); cdecl;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_close">webui_close</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>); cdecl;</code></td> </tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_close_client">webui_close_client</a></strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>); cdecl;</code></td> +</tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_destroy">webui_destroy</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>); cdecl;</code></td> </tr> @@ -88,23 +106,29 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_send_raw">webui_send_raw</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const function_: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; const raw: Pointer; size: NativeUInt); cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_hide">webui_set_hide</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_send_raw_client">webui_send_raw_client</a></strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const function_: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; const raw: Pointer; size: NativeUInt); cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_size">webui_set_size</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; width, height: cardinal); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_hide">webui_set_hide</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_position">webui_set_position</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; x, y: cardinal); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_size">webui_set_size</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; width, height: cardinal); cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_profile">webui_set_profile</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const name, path: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_position">webui_set_position</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; x, y: cardinal); cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_proxy">webui_set_proxy</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const proxy_server: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_profile">webui_set_profile</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const name, path: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> </tr> <tr class="list2"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_proxy">webui_set_proxy</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const proxy_server: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> +<tr class="list"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_url">webui_get_url</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; cdecl;</code></td> </tr> +<tr class="list2"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_open_url">webui_open_url</a></strong>: procedure(const url: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> <tr class="list"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_public">webui_set_public</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> @@ -112,29 +136,41 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_navigate">webui_navigate</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const url: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_clean">webui_clean</a></strong>: procedure(); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_navigate_client">webui_navigate_client</a></strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const url: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_delete_all_profiles">webui_delete_all_profiles</a></strong>: procedure(); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_clean">webui_clean</a></strong>: procedure(); cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_delete_profile">webui_delete_profile</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_delete_all_profiles">webui_delete_all_profiles</a></strong>: procedure(); cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_parent_process_id">webui_get_parent_process_id</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): NativeUInt; cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_delete_profile">webui_delete_profile</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>); cdecl;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_parent_process_id">webui_get_parent_process_id</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): NativeUInt; cdecl;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_child_process_id">webui_get_child_process_id</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): NativeUInt; cdecl;</code></td> </tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_port">webui_get_port</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): NativeUInt; cdecl;</code></td> +</tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_port">webui_set_port</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; port: NativeUInt): boolean; cdecl;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_config">webui_set_config</a></strong>: procedure(option: <a href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a>; status: boolean); cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_free_port">webui_get_free_port</a></strong>: function(): NativeUInt; cdecl;</code></td> </tr> <tr class="list2"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_config">webui_set_config</a></strong>: procedure(option: <a href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a>; status: boolean); cdecl;</code></td> +</tr> +<tr class="list"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_event_blocking">webui_set_event_blocking</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> +<tr class="list2"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_get_mime_type">webui_get_mime_type</a></strong>: function(const file_: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; cdecl;</code></td> +</tr> <tr class="list"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_tls_certificate">webui_set_tls_certificate</a></strong>: function(const certificate_pem, private_key_pem: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> </tr> @@ -142,8 +178,14 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_run">webui_run</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_run_client">webui_run_client</a></strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_script">webui_script</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; timeout: NativeUInt; buffer: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; buffer_length: NativeUInt): boolean; cdecl;</code></td> </tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_script_client">webui_script_client</a></strong>: function(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; timeout: NativeUInt; buffer: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; buffer_length: NativeUInt): boolean; cdecl;</code></td> +</tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_set_runtime">webui_set_runtime</a></strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; runtime: <a href="uWebUITypes.html#TWebUIRuntime">TWebUIRuntime</a>); cdecl;</code></td> </tr> @@ -211,9 +253,12 @@ <h1 class="unit">Unit uWebUILibFunctions</h1> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_interface_get_int_at">webui_interface_get_int_at</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): int64; cdecl;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_interface_get_bool_at">webui_interface_get_bool_at</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): boolean; cdecl;</code></td> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_interface_get_float_at">webui_interface_get_float_at</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): double; cdecl;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_interface_get_bool_at">webui_interface_get_bool_at</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): boolean; cdecl;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUILibFunctions.html#webui_interface_get_size_at">webui_interface_get_size_at</a></strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): NativeUInt; cdecl;</code></td> </tr> </table> @@ -271,7 +316,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Bind a specific html element click event with a function. Empty element means all events. </p> + Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. </p> <p> @@ -287,7 +332,7 @@ <h6 class="description_section">Parameters</h6> <dt>window</dt> <dd>The window number.</dd> <dt>element</dt> -<dd>The HTML ID.</dd> +<dd>The HTML element / JavaScript object.</dd> <dt>func</dt> <dd>The callback function.</dd> </dl> @@ -319,7 +364,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. </p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. </p> <p> @@ -339,6 +384,30 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_show_client"></span><code><strong>webui_show_client</strong>: function(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. </p> +<p> + + +<p> + +<p>@returns(Returns True if showing the window is successed.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_show_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +<dt>content</dt> +<dd>The HTML, URL, Or a local file.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_show_browser"></span><code><strong>webui_show_browser</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -367,6 +436,30 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_start_server"></span><code><strong>webui_start_server</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const path: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Start only the web server and return the URL. This is useful for web app. </p> +<p> + + +<p> + +<p>@returns(Returns the url of this window server.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_start_server))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>window</dt> +<dd>The window number.</dd> +<dt>path</dt> +<dd>The local root folder full path.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_show_wv"></span><code><strong>webui_show_wv</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const content: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -413,6 +506,61 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_set_high_contrast"></span><code><strong>webui_set_high_contrast</strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_high_contrast))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>window</dt> +<dd>The window number.</dd> +<dt>status</dt> +<dd>True or False.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="itemcode"><span id="webui_is_high_contrast"></span><code><strong>webui_is_high_contrast</strong>: function(): boolean; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Get OS high contrast preference. </p> +<p> + @returns(Returns True if OS is using high contrast theme.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_is_high_contrast))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="itemcode"><span id="webui_browser_exist"></span><code><strong>webui_browser_exist</strong>: function(browser: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>): boolean; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Check if a web browser is installed. </p> +<p> + + +<p>@returns(Returns True if the specified browser is available.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_is_high_contrast))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>browser</dt> +<dd>The web browser to be found.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_wait"></span><code><strong>webui_wait</strong>: procedure(); cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -430,7 +578,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Close a specific window only. The window object will still exist. </p> + Close a specific window only. The window object will still exist. All clients. </p> <p> @@ -444,6 +592,24 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_close_client"></span><code><strong>webui_close_client</strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Close a specific client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_close_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_destroy"></span><code><strong>webui_destroy</strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>); cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -523,7 +689,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Set a custom handler to serve files. </p> + Set a custom handler to serve files. This custom handler should return full HTTP header and body. </p> <p> @@ -565,7 +731,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. </p> + Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. </p> <p> @@ -687,7 +853,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Safely send raw data to the UI. </p> + Safely send raw data to the UI. All clients. </p> <p> @@ -713,6 +879,36 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_send_raw_client"></span><code><strong>webui_send_raw_client</strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const function_: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; const raw: Pointer; size: NativeUInt); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Safely send raw data to the UI. Single client. </p> +<p> + + +<p> + +<p> + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_send_raw_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +<dt>function_</dt> +<dd>The JavaScript function to receive raw data: `function * myFunc(myData){}`.</dd> +<dt>raw</dt> +<dd>The raw data buffer.</dd> +<dt>size</dt> +<dd>The raw data size in bytes.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_set_hide"></span><code><strong>webui_set_hide</strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -855,6 +1051,24 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_open_url"></span><code><strong>webui_open_url</strong>: procedure(const url: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Open an URL in the native default web browser. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_open_url))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>url</dt> +<dd>The URL to open.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_set_public"></span><code><strong>webui_set_public</strong>: procedure(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; status: boolean); cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -881,7 +1095,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Navigate to a specific URL. </p> + Navigate to a specific URL. All clients. </p> <p> @@ -899,6 +1113,28 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_navigate_client"></span><code><strong>webui_navigate_client</strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const url: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Navigate to a specific URL. Single client. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_navigate_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +<dt>url</dt> +<dd>Full HTTP URL.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_clean"></span><code><strong>webui_clean</strong>: procedure(); cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -985,6 +1221,26 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_get_port"></span><code><strong>webui_get_port</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>): NativeUInt; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p> +<p> + + +<p>@returns(Returns the network port of the window.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_port))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>window</dt> +<dd>The window number.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_set_port"></span><code><strong>webui_set_port</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; port: NativeUInt): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -1009,11 +1265,24 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_get_free_port"></span><code><strong>webui_get_free_port</strong>: function(): NativeUInt; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Get an available usable free network port. </p> +<p> + @returns(Returns a free port.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_free_port))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_set_config"></span><code><strong>webui_set_config</strong>: procedure(option: <a href="uWebUITypes.html#TWebUIConfig">TWebUIConfig</a>; status: boolean); cdecl;</code></td> </tr> <tr><td colspan="1"> <p> - Control the WebUI behaviour. It's better to call at the beginning. </p> + Control the WebUI behaviour. It's recommended to be called at the beginning. </p> <p> @@ -1053,6 +1322,26 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_get_mime_type"></span><code><strong>webui_get_mime_type</strong>: function(const file_: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Get the HTTP mime type of a file. </p> +<p> + + +<p>@returns(Returns the HTTP mime string.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_mime_type))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>file_</dt> +<dd>The file name.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_set_tls_certificate"></span><code><strong>webui_set_tls_certificate</strong>: function(const certificate_pem, private_key_pem: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> @@ -1081,7 +1370,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="1"> <p> - Run JavaScript without waiting for the response. </p> + Run JavaScript without waiting for the response. All clients. </p> <p> @@ -1099,11 +1388,33 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_run_client"></span><code><strong>webui_run_client</strong>: procedure(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>); cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Run JavaScript without waiting for the response. Single client. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_run_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +<dt>script</dt> +<dd>The JavaScript to be run.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_script"></span><code><strong>webui_script</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; timeout: NativeUInt; buffer: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; buffer_length: NativeUInt): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> <p> - Run JavaScript and get the response back. Make sure your local buffer can hold the response. </p> + Run JavaScript and get the response back. Work only in single client mode. Make sure your local buffer can hold the response. </p> <p> @@ -1125,7 +1436,43 @@ <h6 class="description_section">Parameters</h6> <dt>script</dt> <dd>The JavaScript to be run.</dd> <dt>timeout</dt> -<dd>The execution timeout.</dd> +<dd>The execution timeout in seconds.</dd> +<dt>buffer</dt> +<dd>The local buffer to hold the response.</dd> +<dt>buffer_length</dt> +<dd>The local buffer size.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="itemcode"><span id="webui_script_client"></span><code><strong>webui_script_client</strong>: function(e: <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a>; const script: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; timeout: NativeUInt; buffer: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; buffer_length: NativeUInt): boolean; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Run JavaScript and get the response back. Single client. Make sure your local buffer can hold the response. </p> +<p> + + +<p> + +<p> + +<p> + +<p> + +<p>@returns(Returns True if there is no execution error.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_script_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>e</dt> +<dd>The event struct.</dd> +<dt>script</dt> +<dd>The JavaScript to be run.</dd> +<dt>timeout</dt> +<dd>The execution timeout in seconds.</dd> <dt>buffer</dt> <dd>The local buffer to hold the response.</dd> <dt>buffer_length</dt> @@ -1151,7 +1498,7 @@ <h6 class="description_section">Parameters</h6> <dt>window</dt> <dd>The window number.</dd> <dt>runtime</dt> -<dd>Deno, Nodejs or None.</dd> +<dd>Deno, Bun, Nodejs or None.</dd> </dl> </td></tr> </table> @@ -1628,6 +1975,34 @@ <h6 class="description_section">Parameters</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="webui_interface_get_float_at"></span><code><strong>webui_interface_get_float_at</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): double; cdecl;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Get an argument as float at a specific index. </p> +<p> + + +<p> + +<p> + +<p>@returns(Returns argument as float.) + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_interface_get_float_at))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>window</dt> +<dd>The window number.</dd> +<dt>event_number</dt> +<dd>The event number.</dd> +<dt>index</dt> +<dd>The argument position.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="webui_interface_get_bool_at"></span><code><strong>webui_interface_get_bool_at</strong>: function(window: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>; event_number: <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a>; index: NativeUInt): boolean; cdecl;</code></td> </tr> <tr><td colspan="1"> diff --git a/docs/html/uWebUIMiscFunctions.html b/docs/html/uWebUIMiscFunctions.html index e1a0ee7..d5b8591 100644 --- a/docs/html/uWebUIMiscFunctions.html +++ b/docs/html/uWebUIMiscFunctions.html @@ -46,30 +46,33 @@ <h1 class="unit">Unit uWebUIMiscFunctions</h1> <td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#LibraryExists-string-">LibraryExists</a></strong>(const aPath : string) : boolean;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-">StringToPWebUIChar</a></strong>(const aSrcString: string; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#StringToPWebUIChar-string-integer-">StringToPWebUIChar</a></strong>(const aSrcString: string; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; overload;</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsRelativeAnsi-LPCSTR-">PathIsRelativeAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsRelativeA';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#StringToPWebUIChar-AnsiString-integer-">StringToPWebUIChar</a></strong>(const aSrcString: AnsiString; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; overload;</code></td> </tr> <tr class="list"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsRelativeUnicode-LPCWSTR-">PathIsRelativeUnicode</a></strong>(pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsRelativeW';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsRelativeAnsi-LPCSTR-">PathIsRelativeAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsRelativeA';</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathCanonicalizeAnsi-LPSTR-LPCSTR-">PathCanonicalizeAnsi</a></strong>(pszBuf: LPSTR; pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathCanonicalizeA';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsRelativeUnicode-LPCWSTR-">PathIsRelativeUnicode</a></strong>(pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsRelativeW';</code></td> </tr> <tr class="list"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathCanonicalizeUnicode-LPWSTR-LPCWSTR-">PathCanonicalizeUnicode</a></strong>(pszBuf: LPWSTR; pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathCanonicalizeW';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathCanonicalizeAnsi-LPSTR-LPCSTR-">PathCanonicalizeAnsi</a></strong>(pszBuf: LPSTR; pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathCanonicalizeA';</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsUNCAnsi-LPCSTR-">PathIsUNCAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsUNCA';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathCanonicalizeUnicode-LPWSTR-LPCWSTR-">PathCanonicalizeUnicode</a></strong>(pszBuf: LPWSTR; pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathCanonicalizeW';</code></td> </tr> <tr class="list"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsUNCUnicode-LPCWSTR-">PathIsUNCUnicode</a></strong>(pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsUNCW';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsUNCAnsi-LPCSTR-">PathIsUNCAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsUNCA';</code></td> </tr> <tr class="list2"> -<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsURLAnsi-LPCSTR-">PathIsURLAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsURLA';</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsUNCUnicode-LPCWSTR-">PathIsUNCUnicode</a></strong>(pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsUNCW';</code></td> </tr> <tr class="list"> +<td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsURLAnsi-LPCSTR-">PathIsURLAnsi</a></strong>(pszPath: LPCSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsURLA';</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code>function <strong><a href="uWebUIMiscFunctions.html#PathIsURLUnicode-LPCWSTR-">PathIsURLUnicode</a></strong>(pszPath: LPCWSTR): BOOL; stdcall; external <a href="uWebUIMiscFunctions.html#SHLWAPIDLL">SHLWAPIDLL</a> name 'PathIsURLW';</code></td> </tr> </table> @@ -225,7 +228,27 @@ <h6 class="description_section">Returns</h6> </table> <table class="detail wide_list"> <tr class="list"> -<td class="itemcode"><span id="StringToPWebUIChar-string-integer-"></span><code>function <strong>StringToPWebUIChar</strong>(const aSrcString: string; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>;</code></td> +<td class="itemcode"><span id="StringToPWebUIChar-string-integer-"></span><code>function <strong>StringToPWebUIChar</strong>(const aSrcString: string; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; overload;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Converts a unicode string to a WebUI string. This function should only be used by the file handler callback. By allocating resources using webui_malloc() WebUI will automaticaly free the resources. </p> +<p> + + +<p></p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>aSrcString</dt> +<dd>The original unicode string.</dd> +<dt>aRsltLength</dt> +<dd>The length of the result string.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="itemcode"><span id="StringToPWebUIChar-AnsiString-integer-"></span><code>function <strong>StringToPWebUIChar</strong>(const aSrcString: AnsiString; var aRsltLength: integer): <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>; overload;</code></td> </tr> <tr><td colspan="1"> <p> diff --git a/docs/html/uWebUITypes.IWebUIEventHandler.html b/docs/html/uWebUITypes.IWebUIEventHandler.html index 5c1cf80..badeba3 100644 --- a/docs/html/uWebUITypes.IWebUIEventHandler.html +++ b/docs/html/uWebUITypes.IWebUIEventHandler.html @@ -66,118 +66,166 @@ <h2 class="description">Description</h2> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetIntAt-NativeUInt-">GetIntAt</a></strong>(index: NativeUInt): int64;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetClientID">GetClientID</a></strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetInt">GetInt</a></strong>: int64;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetConnectionID">GetConnectionID</a></strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetFloatAt-NativeUInt-">GetFloatAt</a></strong>(index: NativeUInt): double;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetCookies">GetCookies</a></strong>: string;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetFloat">GetFloat</a></strong>: double;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetIntAt-NativeUInt-">GetIntAt</a></strong>(index: NativeUInt): int64;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStringAt-NativeUInt-">GetStringAt</a></strong>(index: NativeUInt): string;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetInt">GetInt</a></strong>: int64;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetString">GetString</a></strong>: string;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetFloatAt-NativeUInt-">GetFloatAt</a></strong>(index: NativeUInt): double;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStreamAt-TMemoryStream-NativeUInt-">GetStreamAt</a></strong>(var aResultStream: TMemoryStream; index: NativeUInt): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetFloat">GetFloat</a></strong>: double;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStream-TMemoryStream-">GetStream</a></strong>(var aResultStream: TMemoryStream): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStringAt-NativeUInt-">GetStringAt</a></strong>(index: NativeUInt): string;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetBoolAt-NativeUInt-">GetBoolAt</a></strong>(index: NativeUInt): boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetString">GetString</a></strong>: string;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetBool">GetBool</a></strong>: boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStreamAt-TMemoryStream-NativeUInt-">GetStreamAt</a></strong>(var aResultStream: TMemoryStream; index: NativeUInt): boolean;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetSizeAt-NativeUInt-">GetSizeAt</a></strong>(index: NativeUInt): NativeUInt;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetStream-TMemoryStream-">GetStream</a></strong>(var aResultStream: TMemoryStream): boolean;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetSize">GetSize</a></strong>: NativeUInt;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetBoolAt-NativeUInt-">GetBoolAt</a></strong>(index: NativeUInt): boolean;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnInt-int64-">ReturnInt</a></strong>(aReturnValue: int64);</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetBool">GetBool</a></strong>: boolean;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnFloat-double-">ReturnFloat</a></strong>(aReturnValue: double);</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetSizeAt-NativeUInt-">GetSizeAt</a></strong>(index: NativeUInt): NativeUInt;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnString-string-">ReturnString</a></strong>(const aReturnValue: string);</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#GetSize">GetSize</a></strong>: NativeUInt;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnStream-TMemoryStream-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnInt-int64-">ReturnInt</a></strong>(aReturnValue: int64);</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnStream-TMemoryStream-int64-int64-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream; aOffset, aCount: int64); overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnFloat-double-">ReturnFloat</a></strong>(aReturnValue: double);</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnBool-boolean-">ReturnBool</a></strong>(aReturnValue: boolean);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnString-string-">ReturnString</a></strong>(const aReturnValue: string);</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnStream-TMemoryStream-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream); overload;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnStream-TMemoryStream-int64-int64-">ReturnStream</a></strong>(const aReturnValue: TMemoryStream; aOffset, aCount: int64); overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#ReturnBool-boolean-">ReturnBool</a></strong>(aReturnValue: boolean);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#SetResponse-string-">SetResponse</a></strong>(const response: string);</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#ShowClient-string-">ShowClient</a></strong>(const content : string) : boolean;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#CloseClient">CloseClient</a></strong>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#SendRawClient-string-Pointer-NativeUInt-">SendRawClient</a></strong>(const function_: string; const raw: Pointer; size: NativeUInt);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#NavigateClient-string-">NavigateClient</a></strong>(const Url: string);</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIEventHandler.html#RunClient-string-">RunClient</a></strong>(const script_: string);</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIEventHandler.html#ScriptClient-string-NativeUInt-string-NativeUInt-">ScriptClient</a></strong>(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean;</code></td> +</tr> </table> <span id="PasDoc-Properties"></span><h3 class="summary">Properties</h3> <table class="summary wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Initialized">Initialized</a></strong> : boolean read <a href="uWebUITypes.IWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Initialized">Initialized</a></strong> : boolean read <a href="uWebUITypes.IWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Event">Event</a></strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Event">Event</a></strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Window">Window</a></strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Window">Window</a></strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#WindowID">WindowID</a></strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#WindowID">WindowID</a></strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#EventType">EventType</a></strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#EventType">EventType</a></strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Element">Element</a></strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Element">Element</a></strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#EventID">EventID</a></strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#EventID">EventID</a></strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#BindID">BindID</a></strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#BindID">BindID</a></strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Count">Count</a></strong> : NativeUInt read <a href="uWebUITypes.IWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Count">Count</a></strong> : NativeUInt read <a href="uWebUITypes.IWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#ClientID">ClientID</a></strong> : <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetClientID">GetClientID</a>;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#ConnectionID">ConnectionID</a></strong> : <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetConnectionID">GetConnectionID</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIEventHandler.html#Cookies">Cookies</a></strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetCookies">GetCookies</a>;</code></td> </tr> </table> <h2 class="description">Description</h2> @@ -257,6 +305,30 @@ <h3 class="detail">Methods</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetClientID"></span><code>function <strong>GetClientID</strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetConnectionID"></span><code>function <strong>GetConnectionID</strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetCookies"></span><code>function <strong>GetCookies</strong>: string;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="GetIntAt-NativeUInt-"></span><code>function <strong>GetIntAt</strong>(index: NativeUInt): int64;</code></td> </tr> <tr><td colspan="2"> @@ -624,11 +696,146 @@ <h6 class="description_section">Parameters</h6> </dl> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ShowClient-string-"></span><code>function <strong>ShowClient</strong>(const content : string) : boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_show_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>content</dt> +<dd>The HTML, URL, Or a local file.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns True if showing the window is successed.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="CloseClient"></span><code>procedure <strong>CloseClient</strong>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Close a specific client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_close_client))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SendRawClient-string-Pointer-NativeUInt-"></span><code>procedure <strong>SendRawClient</strong>(const function_: string; const raw: Pointer; size: NativeUInt);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Safely send raw data to the UI. Single client. </p> +<p> + + +<p> + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_send_raw_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>function_</dt> +<dd>The JavaScript function to receive raw data: `function * myFunc(myData){}`.</dd> +<dt>raw</dt> +<dd>The raw data buffer.</dd> +<dt>size</dt> +<dd>The raw data size in bytes.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="NavigateClient-string-"></span><code>procedure <strong>NavigateClient</strong>(const Url: string);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Navigate to a specific URL. Single client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_navigate_client))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>url</dt> +<dd>Full HTTP URL.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="RunClient-string-"></span><code>procedure <strong>RunClient</strong>(const script_: string);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Run JavaScript without waiting for the response. Single client. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_run))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>script_</dt> +<dd>The JavaScript to be run.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ScriptClient-string-NativeUInt-string-NativeUInt-"></span><code>function <strong>ScriptClient</strong>(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Run JavaScript and get the response back. Single client. Make sure your local buffer can hold the response. </p> +<p> + + +<p> + +<p> + +<p> + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_script))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>script_</dt> +<dd>The JavaScript to be run.</dd> +<dt>timeout</dt> +<dd>The execution timeout in seconds.</dd> +<dt>buffer</dt> +<dd>The local buffer to hold the response.</dd> +<dt>buffer_length</dt> +<dd>The local buffer size.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns True if there is no execution error.</p></td></tr> +</table> <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Initialized"></span><code>property <strong>Initialized</strong> : boolean read <a href="uWebUITypes.IWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> +<td class="itemcode"><span id="Initialized"></span><code>property <strong>Initialized</strong> : boolean read <a href="uWebUITypes.IWebUIEventHandler.html#GetInitialized">GetInitialized</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -638,7 +845,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Event"></span><code>property <strong>Event</strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> +<td class="itemcode"><span id="Event"></span><code>property <strong>Event</strong> : <a href="uWebUITypes.html#PWebUIEvent">PWebUIEvent</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEvent">GetEvent</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -652,7 +859,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Window"></span><code>property <strong>Window</strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> +<td class="itemcode"><span id="Window"></span><code>property <strong>Window</strong> : <a href="uWebUITypes.IWebUIWindow.html">IWebUIWindow</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindow">GetWindow</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -662,7 +869,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="WindowID"></span><code>property <strong>WindowID</strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> +<td class="itemcode"><span id="WindowID"></span><code>property <strong>WindowID</strong> : <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetWindowID">GetWindowID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -672,7 +879,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="EventType"></span><code>property <strong>EventType</strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> +<td class="itemcode"><span id="EventType"></span><code>property <strong>EventType</strong> : <a href="uWebUITypes.html#TWebUIEventType">TWebUIEventType</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventType">GetEventType</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -682,7 +889,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Element"></span><code>property <strong>Element</strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> +<td class="itemcode"><span id="Element"></span><code>property <strong>Element</strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetElement">GetElement</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -692,7 +899,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="EventID"></span><code>property <strong>EventID</strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> +<td class="itemcode"><span id="EventID"></span><code>property <strong>EventID</strong> : <a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetEventID">GetEventID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -702,7 +909,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="BindID"></span><code>property <strong>BindID</strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> +<td class="itemcode"><span id="BindID"></span><code>property <strong>BindID</strong> : <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetBindID">GetBindID</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -712,7 +919,7 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><span id="Count"></span><code>property <strong>Count</strong> : NativeUInt read <a href="uWebUITypes.IWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> +<td class="itemcode"><span id="Count"></span><code>property <strong>Count</strong> : NativeUInt read <a href="uWebUITypes.IWebUIEventHandler.html#GetCount">GetCount</a>;</code></td> </tr> <tr><td colspan="2"> <p> @@ -723,6 +930,36 @@ <h3 class="detail">Properties</h3> <p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_count))</p> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ClientID"></span><code>property <strong>ClientID</strong> : <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetClientID">GetClientID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's unique ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ConnectionID"></span><code>property <strong>ConnectionID</strong> : <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a> read <a href="uWebUITypes.IWebUIEventHandler.html#GetConnectionID">GetConnectionID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's connection ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="Cookies"></span><code>property <strong>Cookies</strong> : string read <a href="uWebUITypes.IWebUIEventHandler.html#GetCookies">GetCookies</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's full cookies. </p> +</td></tr> +</table> <hr><span class="appinfo"><em>Generated by <a href="https://pasdoc.github.io/">PasDoc 0.16.0-snapshot</a>. </em> </span> </body></html> diff --git a/docs/html/uWebUITypes.IWebUIWindow.html b/docs/html/uWebUITypes.IWebUIWindow.html index 802616c..e8c2db2 100644 --- a/docs/html/uWebUITypes.IWebUIWindow.html +++ b/docs/html/uWebUITypes.IWebUIWindow.html @@ -58,52 +58,60 @@ <h2 class="description">Description</h2> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#GetAllowWebView">GetAllowWebView</a></strong>: boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#GetBestBrowser">GetBestBrowser</a></strong>: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetOnWebUIEvent-TOnWebUIEvent-">SetOnWebUIEvent</a></strong>(const aEvent : <a href="uWebUITypes.html#TOnWebUIEvent">TOnWebUIEvent</a>);</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#GetAllowWebView">GetAllowWebView</a></strong>: boolean;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetAllowWebView-boolean-">SetAllowWebView</a></strong>(aAllow : boolean);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetOnWebUIEvent-TOnWebUIEvent-">SetOnWebUIEvent</a></strong>(const aEvent : <a href="uWebUITypes.html#TOnWebUIEvent">TOnWebUIEvent</a>);</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#doOnWebUIEvent-IWebUIEventHandler-">doOnWebUIEvent</a></strong>(const aEvent: <a href="uWebUITypes.IWebUIEventHandler.html">IWebUIEventHandler</a>);</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetAllowWebView-boolean-">SetAllowWebView</a></strong>(aAllow : boolean);</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#DestroyWindow">DestroyWindow</a></strong>;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#doOnWebUIEvent-IWebUIEventHandler-">doOnWebUIEvent</a></strong>(const aEvent: <a href="uWebUITypes.IWebUIEventHandler.html">IWebUIEventHandler</a>);</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-">Bind</a></strong>(const element_: string): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#DestroyWindow">DestroyWindow</a></strong>;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-TWebUIBindCallback-">Bind</a></strong>(const element_: string; func_: <a href="uWebUITypes.html#TWebUIBindCallback">TWebUIBindCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-">Bind</a></strong>(const element_: string): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-TWebUIInterfaceEventCallback-">Bind</a></strong>(const element_: string; func_: <a href="uWebUITypes.html#TWebUIInterfaceEventCallback">TWebUIInterfaceEventCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-TWebUIBindCallback-">Bind</a></strong>(const element_: string; func_: <a href="uWebUITypes.html#TWebUIBindCallback">TWebUIBindCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#BindAllEvents">BindAllEvents</a></strong>: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Bind-string-TWebUIInterfaceEventCallback-">Bind</a></strong>(const element_: string; func_: <a href="uWebUITypes.html#TWebUIInterfaceEventCallback">TWebUIInterfaceEventCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#BindAllEvents-TWebUIBindCallback-">BindAllEvents</a></strong>(func_: <a href="uWebUITypes.html#TWebUIBindCallback">TWebUIBindCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#BindAllEvents">BindAllEvents</a></strong>: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> -<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Show-string-">Show</a></strong>(const content : string) : boolean;</code></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#BindAllEvents-TWebUIBindCallback-">BindAllEvents</a></strong>(func_: <a href="uWebUITypes.html#TWebUIBindCallback">TWebUIBindCallback</a>): <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>; overload;</code></td> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#Show-string-">Show</a></strong>(const content : string) : boolean;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#ShowBrowser-string-TWebUIBrowser-">ShowBrowser</a></strong>(const content : string; browser : <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>) : boolean;</code></td> </tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#ShowWV-string-">ShowWV</a></strong>(const content : string) : boolean;</code></td> +</tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetKiosk-boolean-">SetKiosk</a></strong>(status: boolean);</code></td> @@ -162,8 +170,16 @@ <h2 class="description">Description</h2> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#GetPort">GetPort</a></strong>: NativeUInt;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#SetPort-NativeUInt-">SetPort</a></strong>(port : NativeUInt): boolean;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetPort2-NativeUInt-">SetPort2</a></strong>(port : NativeUInt);</code></td> +</tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#Run-string-">Run</a></strong>(const script_: string);</code></td> @@ -184,6 +200,14 @@ <h2 class="description">Description</h2> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetEventBlocking-boolean-">SetEventBlocking</a></strong>(status: boolean);</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUITypes.IWebUIWindow.html#StartServer-string-">StartServer</a></strong>(const path: string): string;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUITypes.IWebUIWindow.html#SetHighContrast-boolean-">SetHighContrast</a></strong>(status: boolean);</code></td> +</tr> </table> <span id="PasDoc-Properties"></span><h3 class="summary">Properties</h3> <table class="summary wide_list"> @@ -213,8 +237,16 @@ <h2 class="description">Description</h2> </tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIWindow.html#BestBrowser">BestBrowser</a></strong> : <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a> read <a href="uWebUITypes.IWebUIWindow.html#GetBestBrowser">GetBestBrowser</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIWindow.html#AllowWebView">AllowWebView</a></strong> : boolean read <a href="uWebUITypes.IWebUIWindow.html#GetAllowWebView">GetAllowWebView</a> write <a href="uWebUITypes.IWebUIWindow.html#SetAllowWebView-boolean-">SetAllowWebView</a>;</code></td> </tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIWindow.html#Port">Port</a></strong> : NativeUInt read <a href="uWebUITypes.IWebUIWindow.html#GetPort">GetPort</a> write <a href="uWebUITypes.IWebUIWindow.html#SetPort2-NativeUInt-">SetPort2</a>;</code></td> +</tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>property <strong><a href="uWebUITypes.IWebUIWindow.html#OnWebUIEvent">OnWebUIEvent</a></strong> : <a href="uWebUITypes.html#TOnWebUIEvent">TOnWebUIEvent</a> read <a href="uWebUITypes.IWebUIWindow.html#GetOnWebUIEvent">GetOnWebUIEvent</a> write <a href="uWebUITypes.IWebUIWindow.html#SetOnWebUIEvent-TOnWebUIEvent-">SetOnWebUIEvent</a>;</code></td> @@ -281,6 +313,14 @@ <h3 class="detail">Methods</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetBestBrowser"></span><code>function <strong>GetBestBrowser</strong>: <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p class="nodescription">This item has no description.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="GetAllowWebView"></span><code>function <strong>GetAllowWebView</strong>: boolean;</code></td> </tr> <tr><td colspan="2"> @@ -333,7 +373,7 @@ <h3 class="detail">Methods</h3> <p> -<p>Bind a specific html element click event with the OnWebUIEvent event. Empty element means all events. +<p>Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. <p></p> <p> @@ -347,7 +387,7 @@ <h3 class="detail">Methods</h3> <h6 class="description_section">Parameters</h6> <dl class="parameters"> <dt>element_</dt> -<dd>The HTML element ID.</dd> +<dd>The HTML element / JavaScript object.</dd> </dl> <h6 class="description_section">Returns</h6> <p class="return">Returns a unique bind ID.</p></td></tr> @@ -460,7 +500,7 @@ <h6 class="description_section">Returns</h6> </tr> <tr><td colspan="2"> <p> - Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. </p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. </p> <p> @@ -504,6 +544,25 @@ <h6 class="description_section">Returns</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="ShowWV-string-"></span><code>function <strong>ShowWV</strong>(const content : string) : boolean;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Show a WebView window using embedded HTML, or a file. If the window is already open, it will be refreshed. Note: Win32 need `WebView2Loader.dll`. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_show_wv))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>content</dt> +<dd>The HTML, URL, Or a local file.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="SetKiosk-boolean-"></span><code>procedure <strong>SetKiosk</strong>(status: boolean);</code></td> </tr> <tr><td colspan="2"> @@ -527,7 +586,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Close a specific window only. The window object will still exist. </p> + Close a specific window only. The window object will still exist. All clients. </p> <p> @@ -563,7 +622,7 @@ <h6 class="description_section">Returns</h6> </tr> <tr><td colspan="2"> <p> - Set a custom handler to serve files. </p> + Set a custom handler to serve files. This custom handler should return full HTTP header and body. </p> <p> @@ -609,7 +668,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Safely send raw data to the UI. </p> + Safely send raw data to the UI. All clients. </p> <p> @@ -762,7 +821,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Navigate to a specific URL. </p> + Navigate to a specific URL. All clients. </p> <p> @@ -793,6 +852,21 @@ <h6 class="description_section">Parameters</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetPort"></span><code>function <strong>GetPort</strong>: NativeUInt;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_port))</p> +<h6 class="description_section">Returns</h6> +<p class="return">Returns the network port of the window.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="SetPort-NativeUInt-"></span><code>function <strong>SetPort</strong>(port : NativeUInt): boolean;</code></td> </tr> <tr><td colspan="2"> @@ -815,11 +889,30 @@ <h6 class="description_section">Returns</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SetPort2-NativeUInt-"></span><code>procedure <strong>SetPort2</strong>(port : NativeUInt);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Set a custom web-server/websocket network port to be used by WebUI. This can be useful to determine the HTTP link of `webui.js` in case you are trying to use WebUI with an external web-server like NGNIX </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_port))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>port</dt> +<dd>The web-server network port WebUI should use.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="Run-string-"></span><code>procedure <strong>Run</strong>(const script_: string);</code></td> </tr> <tr><td colspan="2"> <p> - Run JavaScript without waiting for the response. </p> + Run JavaScript without waiting for the response. All clients. </p> <p> @@ -838,7 +931,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Run JavaScript and get the response back. Make sure your local buffer can hold the response. </p> + Run JavaScript and get the response back. Work only in single client mode. Make sure your local buffer can hold the response. </p> <p> @@ -856,7 +949,7 @@ <h6 class="description_section">Parameters</h6> <dt>script_</dt> <dd>The JavaScript to be run.</dd> <dt>timeout</dt> -<dd>The execution timeout.</dd> +<dd>The execution timeout in seconds.</dd> <dt>buffer</dt> <dd>The local buffer to hold the response.</dd> <dt>buffer_length</dt> @@ -880,7 +973,7 @@ <h6 class="description_section">Returns</h6> <h6 class="description_section">Parameters</h6> <dl class="parameters"> <dt>runtime</dt> -<dd>Deno, Nodejs or None.</dd> +<dd>Deno, Bun, Nodejs or None.</dd> </dl> </td></tr> </table> @@ -915,6 +1008,47 @@ <h6 class="description_section">Parameters</h6> <p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_event_blocking))</p> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="StartServer-string-"></span><code>function <strong>StartServer</strong>(const path: string): string;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Start only the web server and return the URL. This is useful for web app. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_start_server))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>path</dt> +<dd>The local root folder full path.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns the url of this window server.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SetHighContrast-boolean-"></span><code>procedure <strong>SetHighContrast</strong>(status: boolean);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_high_contrast))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>status</dt> +<dd>True or False.</dd> +</dl> +</td></tr> +</table> <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> @@ -995,6 +1129,20 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="BestBrowser"></span><code>property <strong>BestBrowser</strong> : <a href="uWebUITypes.html#TWebUIBrowser">TWebUIBrowser</a> read <a href="uWebUITypes.IWebUIWindow.html#GetBestBrowser">GetBestBrowser</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get the recommended web browser ID to use. If you are already using one, this function will return the same ID. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_best_browser))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="AllowWebView"></span><code>property <strong>AllowWebView</strong> : boolean read <a href="uWebUITypes.IWebUIWindow.html#GetAllowWebView">GetAllowWebView</a> write <a href="uWebUITypes.IWebUIWindow.html#SetAllowWebView-boolean-">SetAllowWebView</a>;</code></td> </tr> <tr><td colspan="2"> @@ -1005,6 +1153,20 @@ <h3 class="detail">Properties</h3> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="Port"></span><code>property <strong>Port</strong> : NativeUInt read <a href="uWebUITypes.IWebUIWindow.html#GetPort">GetPort</a> write <a href="uWebUITypes.IWebUIWindow.html#SetPort2-NativeUInt-">SetPort2</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_port))</p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="OnWebUIEvent"></span><code>property <strong>OnWebUIEvent</strong> : <a href="uWebUITypes.html#TOnWebUIEvent">TOnWebUIEvent</a> read <a href="uWebUITypes.IWebUIWindow.html#GetOnWebUIEvent">GetOnWebUIEvent</a> write <a href="uWebUITypes.IWebUIWindow.html#SetOnWebUIEvent-TOnWebUIEvent-">SetOnWebUIEvent</a>;</code></td> </tr> <tr><td colspan="2"> diff --git a/docs/html/uWebUITypes.TWebUIEvent.html b/docs/html/uWebUITypes.TWebUIEvent.html index 4da46ef..0478967 100644 --- a/docs/html/uWebUITypes.TWebUIEvent.html +++ b/docs/html/uWebUITypes.TWebUIEvent.html @@ -47,6 +47,18 @@ <h2 class="overview">Overview</h2> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code><strong><a href="uWebUITypes.TWebUIEvent.html#bind_id">bind_id</a></strong>: <a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a>;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code><strong><a href="uWebUITypes.TWebUIEvent.html#client_id">client_id</a></strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code><strong><a href="uWebUITypes.TWebUIEvent.html#connection_id">connection_id</a></strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code><strong><a href="uWebUITypes.TWebUIEvent.html#cookies">cookies</a></strong>: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>;</code></td> +</tr> </table> <h2 class="description">Description</h2> <h3 class="detail">Fields</h3> @@ -100,6 +112,36 @@ <h3 class="detail">Fields</h3> Bind ID. </p> </td></tr> </table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="client_id"></span><code><strong>client_id</strong>: <a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's unique ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="connection_id"></span><code><strong>connection_id</strong>: <a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's connection ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="cookies"></span><code><strong>cookies</strong>: <a href="uWebUITypes.html#PWebUIChar">PWebUIChar</a>;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Client's full cookies. </p> +</td></tr> +</table> <hr><span class="appinfo"><em>Generated by <a href="https://pasdoc.github.io/">PasDoc 0.16.0-snapshot</a>. </em> </span> </body></html> diff --git a/docs/html/uWebUITypes.html b/docs/html/uWebUITypes.html index d192406..2c89309 100644 --- a/docs/html/uWebUITypes.html +++ b/docs/html/uWebUITypes.html @@ -53,8 +53,14 @@ <h1 class="unit">Unit uWebUITypes</h1> <td class="itemcode"><code><strong><a href="uWebUITypes.html#TWebUIBindID">TWebUIBindID</a></strong> = type NativeUInt;</code></td> </tr> <tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUITypes.html#TWebUIClientID">TWebUIClientID</a></strong> = type NativeUInt;</code></td> +</tr> +<tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUITypes.html#TWebUIEventID">TWebUIEventID</a></strong> = type NativeUInt;</code></td> </tr> +<tr class="list"> +<td class="itemcode"><code><strong><a href="uWebUITypes.html#TWebUIConnectionID">TWebUIConnectionID</a></strong> = type NativeUInt;</code></td> +</tr> <tr class="list2"> <td class="itemcode"><code><strong><a href="uWebUITypes.html#TWebUIChar">TWebUIChar</a></strong> = type AnsiChar;</code></td> </tr> @@ -145,6 +151,8 @@ <h6 class="description_section">Values</h6> <span id="Yandex">Yandex</span>: Yandex. </li> <li> <span id="ChromiumBased">ChromiumBased</span>: Any Chromium based browser. </li> +<li> +<span id="Webview">Webview</span>: WebView (Non-web-browser). </li> </ul> </td></tr> </table> @@ -167,6 +175,8 @@ <h6 class="description_section">Values</h6> <span id="Deno">Deno</span>: Use Deno runtime for .js and .ts files. </li> <li> <span id="NodeJS">NodeJS</span>: Use Nodejs runtime for .js files. </li> +<li> +<span id="Bun">Bun</span>: Use Bun runtime for .js and .ts files </li> </ul> </td></tr> </table> @@ -216,6 +226,15 @@ <h6 class="description_section">Values</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="TWebUIClientID"></span><code><strong>TWebUIClientID</strong> = type NativeUInt;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Client's unique ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="TWebUIEventID"></span><code><strong>TWebUIEventID</strong> = type NativeUInt;</code></td> </tr> <tr><td colspan="1"> @@ -225,6 +244,15 @@ <h6 class="description_section">Values</h6> </table> <table class="detail wide_list"> <tr class="list"> +<td class="itemcode"><span id="TWebUIConnectionID"></span><code><strong>TWebUIConnectionID</strong> = type NativeUInt;</code></td> +</tr> +<tr><td colspan="1"> +<p> + Client's connection ID. </p> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> <td class="itemcode"><span id="TWebUIChar"></span><code><strong>TWebUIChar</strong> = type AnsiChar;</code></td> </tr> <tr><td colspan="1"> @@ -246,12 +274,22 @@ <h6 class="description_section">Values</h6> <tr><td colspan="1"> <p> WebUI configuration. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_config))</p> <h6 class="description_section">Values</h6> <ul> <li> <span id="show_wait_connection">show_wait_connection = 0</span>: Control if `webui_show()`, `webui_show_browser()` and `webui_show_wv()` should wait for the window to connect before returns or not. Default: True. </li> <li> <span id="ui_event_blocking">ui_event_blocking</span>: Control if WebUI should block and process the UI events one a time in a single thread `True`, or process every event in a new non-blocking thread `False`. This updates all windows. You can use `webui_set_event_blocking()` for a specific single window update. Default: False. </li> +<li> +<span id="folder_monitor">folder_monitor</span>: Automatically refresh the window UI when any file in the root folder gets changed. Default: False </li> +<li> +<span id="multi_client">multi_client</span>: Allow multiple clients to connect to the same window, This is helpful for web apps (non-desktop software), Please see the documentation for more details. Default: False </li> +<li> +<span id="use_cookies">use_cookies</span>: Allow multiple clients to connect to the same window, This is helpful for web apps (non-desktop software), Please see the documentation for more details. Default: False </li> </ul> </td></tr> </table> diff --git a/docs/html/uWebUIWindow.TWebUIWindow.html b/docs/html/uWebUIWindow.TWebUIWindow.html index 75acb24..8ad89fe 100644 --- a/docs/html/uWebUIWindow.TWebUIWindow.html +++ b/docs/html/uWebUIWindow.TWebUIWindow.html @@ -230,8 +230,16 @@ <h2 class="description">Description</h2> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIWindow.TWebUIWindow.html#GetPort">GetPort</a></strong>: NativeUInt;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>function <strong><a href="uWebUIWindow.TWebUIWindow.html#SetPort-NativeUInt-">SetPort</a></strong>(port : NativeUInt): boolean;</code></td> </tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIWindow.TWebUIWindow.html#SetPort2-NativeUInt-">SetPort2</a></strong>(port : NativeUInt);</code></td> +</tr> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>procedure <strong><a href="uWebUIWindow.TWebUIWindow.html#Run-string-">Run</a></strong>(const script_: string);</code></td> @@ -254,6 +262,14 @@ <h2 class="description">Description</h2> </tr> <tr class="list2"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>function <strong><a href="uWebUIWindow.TWebUIWindow.html#StartServer-string-">StartServer</a></strong>(const path: string): string;</code></td> +</tr> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><code>procedure <strong><a href="uWebUIWindow.TWebUIWindow.html#SetHighContrast-boolean-">SetHighContrast</a></strong>(status: boolean);</code></td> +</tr> +<tr class="list2"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><code>class function <strong><a href="uWebUIWindow.TWebUIWindow.html#GetNewWindowID">GetNewWindowID</a></strong>: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>;</code></td> </tr> </table> @@ -557,7 +573,7 @@ <h6 class="description_section">Parameters</h6> <p> -<p>Bind a specific html element click event with the OnWebUIEvent event. Empty element means all events. +<p>Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. <p></p> <p> @@ -571,7 +587,7 @@ <h6 class="description_section">Parameters</h6> <h6 class="description_section">Parameters</h6> <dl class="parameters"> <dt>element_</dt> -<dd>The HTML element ID.</dd> +<dd>The HTML element / JavaScript object.</dd> </dl> <h6 class="description_section">Returns</h6> <p class="return">Returns a unique bind ID.</p></td></tr> @@ -688,7 +704,7 @@ <h6 class="description_section">Returns</h6> </tr> <tr><td colspan="2"> <p> - Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. </p> + Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. </p> <p> @@ -774,7 +790,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Close a specific window only. The window object will still exist. </p> + Close a specific window only. The window object will still exist. All clients. </p> <p> @@ -810,7 +826,7 @@ <h6 class="description_section">Returns</h6> </tr> <tr><td colspan="2"> <p> - Set a custom handler to serve files. </p> + Set a custom handler to serve files. This custom handler should return full HTTP header and body. </p> <p> @@ -856,7 +872,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Safely send raw data to the UI. </p> + Safely send raw data to the UI. All clients. </p> <p> @@ -1009,7 +1025,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Navigate to a specific URL. </p> + Navigate to a specific URL. All clients. </p> <p> @@ -1040,6 +1056,21 @@ <h6 class="description_section">Parameters</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="GetPort"></span><code>function <strong>GetPort</strong>: NativeUInt;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_get_port))</p> +<h6 class="description_section">Returns</h6> +<p class="return">Returns the network port of the window.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="SetPort-NativeUInt-"></span><code>function <strong>SetPort</strong>(port : NativeUInt): boolean;</code></td> </tr> <tr><td colspan="2"> @@ -1062,11 +1093,30 @@ <h6 class="description_section">Returns</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SetPort2-NativeUInt-"></span><code>procedure <strong>SetPort2</strong>(port : NativeUInt);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Set a custom web-server/websocket network port to be used by WebUI. This can be useful to determine the HTTP link of `webui.js` in case you are trying to use WebUI with an external web-server like NGNIX </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_port))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>port</dt> +<dd>The web-server network port WebUI should use.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="Run-string-"></span><code>procedure <strong>Run</strong>(const script_: string);</code></td> </tr> <tr><td colspan="2"> <p> - Run JavaScript without waiting for the response. </p> + Run JavaScript without waiting for the response. All clients. </p> <p> @@ -1085,7 +1135,7 @@ <h6 class="description_section">Parameters</h6> </tr> <tr><td colspan="2"> <p> - Run JavaScript and get the response back. Make sure your local buffer can hold the response. </p> + Run JavaScript and get the response back. Work only in single client mode. Make sure your local buffer can hold the response. </p> <p> @@ -1103,7 +1153,7 @@ <h6 class="description_section">Parameters</h6> <dt>script_</dt> <dd>The JavaScript to be run.</dd> <dt>timeout</dt> -<dd>The execution timeout.</dd> +<dd>The execution timeout in seconds.</dd> <dt>buffer</dt> <dd>The local buffer to hold the response.</dd> <dt>buffer_length</dt> @@ -1127,7 +1177,7 @@ <h6 class="description_section">Returns</h6> <h6 class="description_section">Parameters</h6> <dl class="parameters"> <dt>runtime</dt> -<dd>Deno, Nodejs or None.</dd> +<dd>Deno, Bun, Nodejs or None.</dd> </dl> </td></tr> </table> @@ -1165,6 +1215,47 @@ <h6 class="description_section">Parameters</h6> <table class="detail wide_list"> <tr class="list"> <td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="StartServer-string-"></span><code>function <strong>StartServer</strong>(const path: string): string;</code></td> +</tr> +<tr><td colspan="2"> +<p> + Start only the web server and return the URL. This is useful for web app. </p> +<p> + + +<p> + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_start_server))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>path</dt> +<dd>The local root folder full path.</dd> +</dl> +<h6 class="description_section">Returns</h6> +<p class="return">Returns the url of this window server.</p></td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> +<td class="itemcode"><span id="SetHighContrast-boolean-"></span><code>procedure <strong>SetHighContrast</strong>(status: boolean);</code></td> +</tr> +<tr><td colspan="2"> +<p> + Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. </p> +<p> + + +<p><see href="<a href="https://github.com/webui-dev/webui/blob/main/include/webui.h">https://github.com/webui-dev/webui/blob/main/include/webui.h</a>">WebUI source file: /include/webui.h (webui_set_high_contrast))</p> +<h6 class="description_section">Parameters</h6> +<dl class="parameters"> +<dt>status</dt> +<dd>True or False.</dd> +</dl> +</td></tr> +</table> +<table class="detail wide_list"> +<tr class="list"> +<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td> <td class="itemcode"><span id="GetNewWindowID"></span><code>class function <strong>GetNewWindowID</strong>: <a href="uWebUITypes.html#TWebUIWindowID">TWebUIWindowID</a>;</code></td> </tr> <tr><td colspan="2"> diff --git a/packages/WebUI4Delphi.dproj b/packages/WebUI4Delphi.dproj index 010450d..ad16b64 100644 --- a/packages/WebUI4Delphi.dproj +++ b/packages/WebUI4Delphi.dproj @@ -9,6 +9,7 @@ <Platform Condition="'$(Platform)'==''">Win32</Platform> <TargetedPlatforms>3</TargetedPlatforms> <AppType>Package</AppType> + <ProjectName Condition="'$(ProjectName)'==''">WebUI4Delphi</ProjectName> </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> <Base>true</Base> @@ -43,6 +44,11 @@ <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> + <PropertyGroup Condition="('$(Platform)'=='Win64x' and '$(Base)'=='true') or '$(Base_Win64x)'!=''"> + <Base_Win64x>true</Base_Win64x> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> <Cfg_1>true</Cfg_1> <CfgParent>Base</CfgParent> @@ -111,6 +117,12 @@ <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> <VerInfo_Locale>1033</VerInfo_Locale> </PropertyGroup> + <PropertyGroup Condition="'$(Base_Win64x)'!=''"> + <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace> + <BT_BuildType>Debug</BT_BuildType> + <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> + <VerInfo_Locale>1033</VerInfo_Locale> + </PropertyGroup> <PropertyGroup Condition="'$(Cfg_1)'!=''"> <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> <DCC_DebugDCUs>true</DCC_DebugDCUs> @@ -789,6 +801,9 @@ <Platform Name="Win64"> <Operation>1</Operation> </Platform> + <Platform Name="Win64x"> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="ProjectiOSDeviceDebug"> <Platform Name="iOSDevice32"> @@ -1049,6 +1064,7 @@ <ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/> </Deployment> <Platforms> <Platform value="Android">False</Platform> @@ -1059,6 +1075,7 @@ <Platform value="OSXARM64">False</Platform> <Platform value="Win32">True</Platform> <Platform value="Win64">True</Platform> + <Platform value="Win64x">False</Platform> </Platforms> </BorlandProject> <ProjectFileVersion>12</ProjectFileVersion> diff --git a/packages/WebUI4Delphi.res b/packages/WebUI4Delphi.res index 35049f9..fdb4202 100644 Binary files a/packages/WebUI4Delphi.res and b/packages/WebUI4Delphi.res differ diff --git a/packages/res/viejos/webui.bmp b/packages/res/viejos/webui.bmp deleted file mode 100644 index a9b8015..0000000 Binary files a/packages/res/viejos/webui.bmp and /dev/null differ diff --git a/packages/res/viejos/webui.png b/packages/res/viejos/webui.png deleted file mode 100644 index 3bec110..0000000 Binary files a/packages/res/viejos/webui.png and /dev/null differ diff --git a/packages/res/viejos/webui_128.png b/packages/res/viejos/webui_128.png deleted file mode 100644 index 3f0feb1..0000000 Binary files a/packages/res/viejos/webui_128.png and /dev/null differ diff --git a/packages/res/viejos/webui_16.png b/packages/res/viejos/webui_16.png deleted file mode 100644 index 31cda00..0000000 Binary files a/packages/res/viejos/webui_16.png and /dev/null differ diff --git a/packages/res/viejos/webui_24.png b/packages/res/viejos/webui_24.png deleted file mode 100644 index 3bec110..0000000 Binary files a/packages/res/viejos/webui_24.png and /dev/null differ diff --git a/packages/res/viejos/webui_256.png b/packages/res/viejos/webui_256.png deleted file mode 100644 index 94db656..0000000 Binary files a/packages/res/viejos/webui_256.png and /dev/null differ diff --git a/packages/res/viejos/webui_256_shadow.png b/packages/res/viejos/webui_256_shadow.png deleted file mode 100644 index 37b510b..0000000 Binary files a/packages/res/viejos/webui_256_shadow.png and /dev/null differ diff --git a/packages/res/viejos/webui_32.png b/packages/res/viejos/webui_32.png deleted file mode 100644 index 8320344..0000000 Binary files a/packages/res/viejos/webui_32.png and /dev/null differ diff --git a/packages/res/viejos/webui_48.png b/packages/res/viejos/webui_48.png deleted file mode 100644 index eb5b473..0000000 Binary files a/packages/res/viejos/webui_48.png and /dev/null differ diff --git a/packages/res/viejos/webui_64.png b/packages/res/viejos/webui_64.png deleted file mode 100644 index 375a6e5..0000000 Binary files a/packages/res/viejos/webui_64.png and /dev/null differ diff --git a/packages/res/webui.bmp b/packages/res/webui.bmp index 162ec0b..ee7e9fc 100644 Binary files a/packages/res/webui.bmp and b/packages/res/webui.bmp differ diff --git a/packages/res/webui.png b/packages/res/webui.png index 6769a04..06ce4e1 100644 Binary files a/packages/res/webui.png and b/packages/res/webui.png differ diff --git a/packages/res/webui4delphi.dcr b/packages/res/webui4delphi.dcr index 261f0b3..f7ea5d5 100644 Binary files a/packages/res/webui4delphi.dcr and b/packages/res/webui4delphi.dcr differ diff --git a/packages/res/webui_128_shadow.png b/packages/res/webui_128_shadow.png deleted file mode 100644 index 6ada8c6..0000000 Binary files a/packages/res/webui_128_shadow.png and /dev/null differ diff --git a/packages/res/webui_16.png b/packages/res/webui_16.png deleted file mode 100644 index 7dec544..0000000 Binary files a/packages/res/webui_16.png and /dev/null differ diff --git a/packages/res/webui_24.png b/packages/res/webui_24.png deleted file mode 100644 index 6769a04..0000000 Binary files a/packages/res/webui_24.png and /dev/null differ diff --git a/packages/res/webui_240.png b/packages/res/webui_240.png deleted file mode 100644 index 8844c8f..0000000 Binary files a/packages/res/webui_240.png and /dev/null differ diff --git a/packages/res/webui_240_shadow.png b/packages/res/webui_240_shadow.png deleted file mode 100644 index c73cb04..0000000 Binary files a/packages/res/webui_240_shadow.png and /dev/null differ diff --git a/packages/res/webui_32.png b/packages/res/webui_32.png deleted file mode 100644 index e2eb2ba..0000000 Binary files a/packages/res/webui_32.png and /dev/null differ diff --git a/packages/res/webui_48.png b/packages/res/webui_48.png deleted file mode 100644 index 377050c..0000000 Binary files a/packages/res/webui_48.png and /dev/null differ diff --git a/packages/res/webui_500.svg b/packages/res/webui_500.svg new file mode 100644 index 0000000..f5ded74 --- /dev/null +++ b/packages/res/webui_500.svg @@ -0,0 +1 @@ +<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" xmlns:bx="https://boxy-svg.com"> <defs> <mask id="circle-mask"> <rect width="500" height="500" fill="white"/> <circle cx="500" cy="250" r="70"/> </mask> <bx:grid x="0" y="0" width="83.36" height="96.753"/> </defs> <rect width="500" height="500" fill="#2a6699" mask="url(#circle-mask)"/> <g fill="#fefdff" fill-opacity="1"> <g transform="translate(98.512824, 354.131869)"> <g/> </g> </g> <g fill="#fefdff" fill-opacity="1"> <g transform="translate(165.285775, 354.131869)"> <g/> </g> </g> <g fill="#fefdff" fill-opacity="1"> <g transform="translate(235.60963, 354.131869)"> <g/> </g> </g> <g fill="#fefdff" fill-opacity="1"> <g transform="translate(311.837626, 354.131869)"> <g/> </g> </g> <path d="M 391.07 375 L 386.842 355.4 L 389.026 355.4 L 392.358 371.584 L 397.202 355.4 L 399.302 355.4 L 404.146 371.528 L 407.506 355.4 L 409.606 355.4 L 405.378 375 L 403.194 375 L 398.238 358.396 L 393.254 375 Z M 412.714 375 L 412.714 355.4 L 426.742 355.4 L 426.742 357.304 L 414.87 357.304 L 414.87 364.164 L 422.626 364.164 L 422.626 366.04 L 414.87 366.04 L 414.87 373.096 L 426.854 373.096 L 426.854 375 Z M 429.961 375 L 429.961 355.4 L 437.913 355.4 Q 439.817 355.4 441.203 356.016 Q 442.589 356.632 443.345 357.766 Q 444.101 358.9 444.101 360.44 Q 444.101 361.952 443.303 363.072 Q 442.505 364.192 441.105 364.78 Q 442.869 365.312 443.891 366.544 Q 444.913 367.776 444.913 369.484 Q 444.913 371.164 444.087 372.41 Q 443.261 373.656 441.763 374.328 Q 440.265 375 438.249 375 Z M 432.117 363.94 L 437.801 363.94 Q 439.705 363.94 440.839 363.044 Q 441.973 362.148 441.973 360.608 Q 441.973 359.068 440.839 358.172 Q 439.705 357.276 437.801 357.276 L 432.117 357.276 Z M 432.117 373.124 L 438.081 373.124 Q 440.209 373.124 441.469 372.116 Q 442.729 371.108 442.729 369.428 Q 442.729 367.748 441.469 366.74 Q 440.209 365.732 438.081 365.732 L 432.117 365.732 Z" transform="matrix(5.194462, 0, 0, 4.646009, -1985.117065, -1285.859375)" style="fill: rgb(255, 255, 255);"/> <path d="M 456.339 375.28 Q 453.679 375.28 451.733 374.216 Q 449.787 373.152 448.723 371.178 Q 447.659 369.204 447.659 366.544 L 447.659 355.4 L 451.719 355.4 L 451.719 366.544 Q 451.719 368.056 452.293 369.19 Q 452.867 370.324 453.917 370.926 Q 454.967 371.528 456.367 371.528 Q 457.767 371.528 458.803 370.926 Q 459.839 370.324 460.413 369.19 Q 460.987 368.056 460.987 366.544 L 460.987 355.4 L 465.019 355.4 L 465.019 366.544 Q 465.019 369.176 463.955 371.15 Q 462.891 373.124 460.945 374.202 Q 458.999 375.28 456.339 375.28 Z M 468.266 375 L 468.266 355.4 L 472.326 355.4 L 472.326 375 Z" transform="matrix(5.194462, 0, 0, 4.646009, -1985.117065, -1285.859375)" style="fill: rgb(255, 255, 255);"/></svg> \ No newline at end of file diff --git a/packages/res/webui_64.ico b/packages/res/webui_64.ico deleted file mode 100644 index feecce4..0000000 Binary files a/packages/res/webui_64.ico and /dev/null differ diff --git a/packages/res/webui_64.png b/packages/res/webui_64.png deleted file mode 100644 index cf84178..0000000 Binary files a/packages/res/webui_64.png and /dev/null differ diff --git a/packages/res/webui_pascal.png b/packages/res/webui_pascal.png new file mode 100644 index 0000000..8fd23f0 Binary files /dev/null and b/packages/res/webui_pascal.png differ diff --git a/packages/webui4delphi.lpk b/packages/webui4delphi.lpk index 89db21c..58f05e1 100644 --- a/packages/webui4delphi.lpk +++ b/packages/webui4delphi.lpk @@ -13,7 +13,7 @@ <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> </CompilerOptions> - <Version Major="2" Minor="4" Release="2"/> + <Version Major="2" Minor="5"/> <Files> <Item> <Filename Value="..\source\uWebUI.inc"/> diff --git a/source/uWebUI.pas b/source/uWebUI.pas index e41df44..866ed7a 100644 --- a/source/uWebUI.pas +++ b/source/uWebUI.pas @@ -54,12 +54,14 @@ TWebUI = class function GetIsAppRunning : boolean; function GetStatus : TLoaderStatus; function GetLibraryVersion : string; - function DefaultLibraryPath : string; + function GetFreePort: NativeUInt; + function GetIsHighContrast : boolean; procedure SetTimeout(aValue: NativeUInt); procedure SetStatus(aValue: TLoaderStatus); procedure DestroyWindowList; + function DefaultLibraryPath : string; function LoadWebUILibrary : boolean; function LoadLibProcedures : boolean; procedure UnLoadWebUILibrary; @@ -146,7 +148,7 @@ TWebUI = class /// </summary> procedure RemoveWindow(windowId: TWebUIWindowID); /// <summary> - /// Control the WebUI behaviour. It's better to call at the beginning. + /// Control the WebUI behaviour. It's recommended to be called at the beginning. /// </summary> /// <param name="option">The desired option from `webui_config` enum.</param> /// <param name="status">The status of the option, `true` or `false`.</param> @@ -154,6 +156,32 @@ TWebUI = class /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_config)</see></para> /// </remarks> procedure SetConfig(option: TWebUIConfig; status: boolean); + /// <summary> + /// Check if a web browser is installed. + /// </summary> + /// <param name="browser">The web browser to be found.</param> + /// <returns>Returns True if the specified browser is available.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_is_high_contrast)</see></para> + /// </remarks> + function BrowserExist(browser: TWebUIBrowser): boolean; + /// <summary> + /// Get the HTTP mime type of a file. + /// </summary> + /// <param name="file_">The file name.</param> + /// <returns>Returns the HTTP mime string.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_mime_type)</see></para> + /// </remarks> + function GetMimeType(const file_: string): string; + /// <summary> + /// Open an URL in the native default web browser. + /// </summary> + /// <param name="url">The URL to open.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_open_url)</see></para> + /// </remarks> + procedure OpenURL(const url: string); /// <summary> /// Returns the TWVLoader initialization status. @@ -200,7 +228,7 @@ TWebUI = class /// </remarks> property IsAppRunning : boolean read GetIsAppRunning; /// <summary> - /// Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. + /// Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_timeout)</see></para> @@ -212,6 +240,21 @@ TWebUI = class /// </summary> property SyncedEvents : boolean read FSyncedEvents write FSyncedEvents; {$ENDIF} + /// <summary> + /// Get OS high contrast preference. + /// </summary> + /// <returns>Returns True if OS is using high contrast theme.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_is_high_contrast)</see></para> + /// </remarks> + property IsHighContrast : boolean read GetIsHighContrast; + /// <summary> + /// Get an available usable free network port. + /// </summary> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_free_port)</see></para> + /// </remarks> + property FreePort : NativeUInt read GetFreePort; end; var @@ -442,11 +485,17 @@ function TWebUI.LoadLibProcedures : boolean; webui_bind := GetProcAddress(FLibHandle, 'webui_bind'); webui_get_best_browser := GetProcAddress(FLibHandle, 'webui_get_best_browser'); webui_show := GetProcAddress(FLibHandle, 'webui_show'); + webui_show_client := GetProcAddress(FLibHandle, 'webui_show_client'); webui_show_browser := GetProcAddress(FLibHandle, 'webui_show_browser'); + webui_start_server := GetProcAddress(FLibHandle, 'webui_start_server'); webui_show_wv := GetProcAddress(FLibHandle, 'webui_show_wv'); webui_set_kiosk := GetProcAddress(FLibHandle, 'webui_set_kiosk'); + webui_set_high_contrast := GetProcAddress(FLibHandle, 'webui_set_high_contrast'); + webui_is_high_contrast := GetProcAddress(FLibHandle, 'webui_is_high_contrast'); + webui_browser_exist := GetProcAddress(FLibHandle, 'webui_browser_exist'); webui_wait := GetProcAddress(FLibHandle, 'webui_wait'); webui_close := GetProcAddress(FLibHandle, 'webui_close'); + webui_close_client := GetProcAddress(FLibHandle, 'webui_close_client'); webui_destroy := GetProcAddress(FLibHandle, 'webui_destroy'); webui_exit := GetProcAddress(FLibHandle, 'webui_exit'); webui_set_root_folder := GetProcAddress(FLibHandle, 'webui_set_root_folder'); @@ -460,25 +509,33 @@ function TWebUI.LoadLibProcedures : boolean; webui_free := GetProcAddress(FLibHandle, 'webui_free'); webui_malloc := GetProcAddress(FLibHandle, 'webui_malloc'); webui_send_raw := GetProcAddress(FLibHandle, 'webui_send_raw'); + webui_send_raw_client := GetProcAddress(FLibHandle, 'webui_send_raw_client'); webui_set_hide := GetProcAddress(FLibHandle, 'webui_set_hide'); webui_set_size := GetProcAddress(FLibHandle, 'webui_set_size'); webui_set_position := GetProcAddress(FLibHandle, 'webui_set_position'); webui_set_profile := GetProcAddress(FLibHandle, 'webui_set_profile'); webui_set_proxy := GetProcAddress(FLibHandle, 'webui_set_proxy'); webui_get_url := GetProcAddress(FLibHandle, 'webui_get_url'); + webui_open_url := GetProcAddress(FLibHandle, 'webui_open_url'); webui_set_public := GetProcAddress(FLibHandle, 'webui_set_public'); webui_navigate := GetProcAddress(FLibHandle, 'webui_navigate'); + webui_navigate_client := GetProcAddress(FLibHandle, 'webui_navigate_client'); webui_clean := GetProcAddress(FLibHandle, 'webui_clean'); webui_delete_all_profiles := GetProcAddress(FLibHandle, 'webui_delete_all_profiles'); webui_delete_profile := GetProcAddress(FLibHandle, 'webui_delete_profile'); webui_get_parent_process_id := GetProcAddress(FLibHandle, 'webui_get_parent_process_id'); webui_get_child_process_id := GetProcAddress(FLibHandle, 'webui_get_child_process_id'); + webui_get_port := GetProcAddress(FLibHandle, 'webui_get_port'); webui_set_port := GetProcAddress(FLibHandle, 'webui_set_port'); + webui_get_free_port := GetProcAddress(FLibHandle, 'webui_get_free_port'); webui_set_config := GetProcAddress(FLibHandle, 'webui_set_config'); webui_set_event_blocking := GetProcAddress(FLibHandle, 'webui_set_event_blocking'); + webui_get_mime_type := GetProcAddress(FLibHandle, 'webui_get_mime_type'); webui_set_tls_certificate := GetProcAddress(FLibHandle, 'webui_set_tls_certificate'); webui_run := GetProcAddress(FLibHandle, 'webui_run'); + webui_run_client := GetProcAddress(FLibHandle, 'webui_run_client'); webui_script := GetProcAddress(FLibHandle, 'webui_script'); + webui_script_client := GetProcAddress(FLibHandle, 'webui_script_client'); webui_set_runtime := GetProcAddress(FLibHandle, 'webui_set_runtime'); webui_get_count := GetProcAddress(FLibHandle, 'webui_get_count'); webui_get_int_at := GetProcAddress(FLibHandle, 'webui_get_int_at'); @@ -501,6 +558,7 @@ function TWebUI.LoadLibProcedures : boolean; webui_interface_get_window_id := GetProcAddress(FLibHandle, 'webui_interface_get_window_id'); webui_interface_get_string_at := GetProcAddress(FLibHandle, 'webui_interface_get_string_at'); webui_interface_get_int_at := GetProcAddress(FLibHandle, 'webui_interface_get_int_at'); + webui_interface_get_float_at := GetProcAddress(FLibHandle, 'webui_interface_get_float_at'); webui_interface_get_bool_at := GetProcAddress(FLibHandle, 'webui_interface_get_bool_at'); webui_interface_get_size_at := GetProcAddress(FLibHandle, 'webui_interface_get_size_at'); @@ -510,11 +568,17 @@ function TWebUI.LoadLibProcedures : boolean; if not(assigned(webui_bind)) then LMissing.Add('webui_bind'); if not(assigned(webui_get_best_browser)) then LMissing.Add('webui_get_best_browser'); if not(assigned(webui_show)) then LMissing.Add('webui_show'); + if not(assigned(webui_show_client)) then LMissing.Add('webui_show_client'); if not(assigned(webui_show_browser)) then LMissing.Add('webui_show_browser'); + if not(assigned(webui_start_server)) then LMissing.Add('webui_start_server'); if not(assigned(webui_show_wv)) then LMissing.Add('webui_show_wv'); if not(assigned(webui_set_kiosk)) then LMissing.Add('webui_set_kiosk'); + if not(assigned(webui_set_high_contrast)) then LMissing.Add('webui_set_high_contrast'); + if not(assigned(webui_is_high_contrast)) then LMissing.Add('webui_is_high_contrast'); + if not(assigned(webui_browser_exist)) then LMissing.Add('webui_browser_exist'); if not(assigned(webui_wait)) then LMissing.Add('webui_wait'); if not(assigned(webui_close)) then LMissing.Add('webui_close'); + if not(assigned(webui_close_client)) then LMissing.Add('webui_close_client'); if not(assigned(webui_destroy)) then LMissing.Add('webui_destroy'); if not(assigned(webui_exit)) then LMissing.Add('webui_exit'); if not(assigned(webui_set_root_folder)) then LMissing.Add('webui_set_root_folder'); @@ -528,25 +592,33 @@ function TWebUI.LoadLibProcedures : boolean; if not(assigned(webui_free)) then LMissing.Add('webui_free'); if not(assigned(webui_malloc)) then LMissing.Add('webui_malloc'); if not(assigned(webui_send_raw)) then LMissing.Add('webui_send_raw'); + if not(assigned(webui_send_raw_client)) then LMissing.Add('webui_send_raw_client'); if not(assigned(webui_set_hide)) then LMissing.Add('webui_set_hide'); if not(assigned(webui_set_size)) then LMissing.Add('webui_set_size'); if not(assigned(webui_set_position)) then LMissing.Add('webui_set_position'); if not(assigned(webui_set_profile)) then LMissing.Add('webui_set_profile'); if not(assigned(webui_set_proxy)) then LMissing.Add('webui_set_proxy'); if not(assigned(webui_get_url)) then LMissing.Add('webui_get_url'); + if not(assigned(webui_open_url)) then LMissing.Add('webui_open_url'); if not(assigned(webui_set_public)) then LMissing.Add('webui_set_public'); if not(assigned(webui_navigate)) then LMissing.Add('webui_navigate'); + if not(assigned(webui_navigate_client)) then LMissing.Add('webui_navigate_client'); if not(assigned(webui_clean)) then LMissing.Add('webui_clean'); if not(assigned(webui_delete_all_profiles)) then LMissing.Add('webui_delete_all_profiles'); if not(assigned(webui_delete_profile)) then LMissing.Add('webui_delete_profile'); if not(assigned(webui_get_parent_process_id)) then LMissing.Add('webui_get_parent_process_id'); if not(assigned(webui_get_child_process_id)) then LMissing.Add('webui_get_child_process_id'); + if not(assigned(webui_get_port)) then LMissing.Add('webui_get_port'); if not(assigned(webui_set_port)) then LMissing.Add('webui_set_port'); + if not(assigned(webui_get_free_port)) then LMissing.Add('webui_get_free_port'); if not(assigned(webui_set_config)) then LMissing.Add('webui_set_config'); if not(assigned(webui_set_event_blocking)) then LMissing.Add('webui_set_event_blocking'); + if not(assigned(webui_get_mime_type)) then LMissing.Add('webui_get_mime_type'); if not(assigned(webui_set_tls_certificate)) then LMissing.Add('webui_set_tls_certificate'); if not(assigned(webui_run)) then LMissing.Add('webui_run'); + if not(assigned(webui_run_client)) then LMissing.Add('webui_run_client'); if not(assigned(webui_script)) then LMissing.Add('webui_script'); + if not(assigned(webui_script_client)) then LMissing.Add('webui_script_client'); if not(assigned(webui_set_runtime)) then LMissing.Add('webui_set_runtime'); if not(assigned(webui_get_count)) then LMissing.Add('webui_get_count'); if not(assigned(webui_get_int_at)) then LMissing.Add('webui_get_int_at'); @@ -569,6 +641,7 @@ function TWebUI.LoadLibProcedures : boolean; if not(assigned(webui_interface_get_window_id)) then LMissing.Add('webui_interface_get_window_id'); if not(assigned(webui_interface_get_string_at)) then LMissing.Add('webui_interface_get_string_at'); if not(assigned(webui_interface_get_int_at)) then LMissing.Add('webui_interface_get_int_at'); + if not(assigned(webui_interface_get_float_at)) then LMissing.Add('webui_interface_get_float_at'); if not(assigned(webui_interface_get_bool_at)) then LMissing.Add('webui_interface_get_bool_at'); if not(assigned(webui_interface_get_size_at)) then LMissing.Add('webui_interface_get_size_at'); @@ -752,6 +825,14 @@ function TWebUI.GetLibraryVersion : string; Result := Result + '-' + WEBUI_VERSION_STAGE; end; +function TWebUI.GetFreePort: NativeUInt; +begin + if Initialized then + Result := webui_get_free_port() + else + Result := 0; +end; + function TWebUI.DefaultLibraryPath : string; begin {$IFDEF MACOSX} @@ -761,6 +842,12 @@ function TWebUI.DefaultLibraryPath : string; {$ENDIF} end; +function TWebUI.GetIsHighContrast : boolean; +begin + Result := Initialized and + webui_is_high_contrast(); +end; + procedure TWebUI.SetTimeout(aValue: NativeUInt); begin FTimeout := aValue; @@ -907,6 +994,37 @@ procedure TWebUI.SetConfig(option: TWebUIConfig; status: boolean); webui_set_config(option, status); end; +function TWebUI.BrowserExist(browser: TWebUIBrowser): boolean; +begin + Result := Initialized and + webui_browser_exist(browser); +end; + +function TWebUI.GetMimeType(const file_: string): string; +var + LFile : AnsiString; +begin + Result := ''; + + if Initialized then + begin + LFile := UTF8Encode(file_ + #0); + Result := {$IFDEF DELPHI12_UP}UTF8ToString{$ELSE}UTF8Decode{$ENDIF}(PAnsiChar(webui_get_mime_type(@LFile[1]))); + end; +end; + +procedure TWebUI.OpenURL(const url: string); +var + LUrl : AnsiString; +begin + if Initialized then + begin + LUrl := UTF8Encode(url + #0); + webui_open_url(@LUrl[1]); + end; +end; + + initialization finalization diff --git a/source/uWebUIEventHandler.pas b/source/uWebUIEventHandler.pas index 3171407..dab5bfd 100644 --- a/source/uWebUIEventHandler.pas +++ b/source/uWebUIEventHandler.pas @@ -41,10 +41,13 @@ TWebUIEventHandler = class(TInterfacedObject, IWebUIEventHandler) function GetBindID: TWebUIBindID; function GetWindow: IWebUIWindow; function GetCount: NativeUInt; + function GetClientID: TWebUIClientID; + function GetConnectionID : TWebUIConnectionID; + function GetCookies : string; public constructor Create(const aEvent: PWebUIEvent); overload; - constructor Create(window: TWebUIWindowID; event_type: TWebUIEventType; const element: PWebUIChar; event_number: TWebUIEventID; bind_id: TWebUIBindID); overload; + constructor Create(window: TWebUIWindowID; event_type: TWebUIEventType; const element: PWebUIChar; event_number: TWebUIEventID; bind_id: TWebUIBindID; client_id: TWebUIClientID; connection_id: TWebUIConnectionID; const cookies: PWebUIChar); overload; /// <summary> /// Get an argument as integer at a specific index. @@ -224,49 +227,116 @@ TWebUIEventHandler = class(TInterfacedObject, IWebUIEventHandler) /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_interface_set_response)</see></para> /// </remarks> procedure SetResponse(const response: TMemoryStream; aOffset, aCount: int64); overload; + /// <summary> + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. + /// </summary> + /// <param name="content">The HTML, URL, Or a local file.</param> + /// <returns>Returns True if showing the window is successed.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_show_client)</see></para> + /// </remarks> + function ShowClient(const content : string) : boolean; + /// <summary> + /// Close a specific client. + /// </summary> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_close_client)</see></para> + /// </remarks> + procedure CloseClient; + /// <summary> + /// Safely send raw data to the UI. Single client. + /// </summary> + /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> + /// <param name="raw">The raw data buffer.</param> + /// <param name="size">The raw data size in bytes.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_send_raw_client)</see></para> + /// </remarks> + procedure SendRawClient(const function_: string; const raw: Pointer; size: NativeUInt); + /// <summary> + /// Navigate to a specific URL. Single client. + /// </summary> + /// <param name="url">Full HTTP URL.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_navigate_client)</see></para> + /// </remarks> + procedure NavigateClient(const Url: string); + /// <summary> + /// Run JavaScript without waiting for the response. Single client. + /// </summary> + /// <param name="script_">The JavaScript to be run.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_run)</see></para> + /// </remarks> + procedure RunClient(const script_: string); + /// <summary> + /// Run JavaScript and get the response back. Single client. + /// Make sure your local buffer can hold the response. + /// </summary> + /// <param name="script_">The JavaScript to be run.</param> + /// <param name="timeout">The execution timeout in seconds.</param> + /// <param name="buffer">The local buffer to hold the response.</param> + /// <param name="buffer_length">The local buffer size.</param> + /// <returns>Returns True if there is no execution error.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_script)</see></para> + /// </remarks> + function ScriptClient(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean; /// <summary> /// Returns true if the Window was created successfully. /// </summary> - property Initialized : boolean read GetInitialized; + property Initialized : boolean read GetInitialized; /// <summary> /// Pointer to WebUI event record. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_event_t)</see></para> /// </remarks> - property Event : PWebUIEvent read GetEvent; + property Event : PWebUIEvent read GetEvent; /// <summary> /// Window wrapper for the Window object of this event. /// </summary> - property Window : IWebUIWindow read GetWindow; + property Window : IWebUIWindow read GetWindow; /// <summary> /// The window object number or ID. /// </summary> - property WindowID : TWebUIWindowID read GetWindowID; + property WindowID : TWebUIWindowID read GetWindowID; /// <summary> /// Event type. /// </summary> - property EventType : TWebUIEventType read GetEventType; + property EventType : TWebUIEventType read GetEventType; /// <summary> /// HTML element ID. /// </summary> - property Element : string read GetElement; + property Element : string read GetElement; /// <summary> /// Event number or Event ID. /// </summary> - property EventID : TWebUIEventID read GetEventID; + property EventID : TWebUIEventID read GetEventID; /// <summary> /// Bind ID. /// </summary> - property BindID : TWebUIBindID read GetBindID; + property BindID : TWebUIBindID read GetBindID; /// <summary> /// Get how many arguments there are in an event. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_count)</see></para> /// </remarks> - property Count : NativeUInt read GetCount; + property Count : NativeUInt read GetCount; + /// <summary> + /// Client's unique ID. + /// </summary> + property ClientID : TWebUIClientID read GetClientID; + /// <summary> + /// Client's connection ID. + /// </summary> + property ConnectionID : TWebUIConnectionID read GetConnectionID; + /// <summary> + /// Client's full cookies. + /// </summary> + property Cookies : string read GetCookies; end; implementation @@ -280,25 +350,38 @@ constructor TWebUIEventHandler.Create(const aEvent: PWebUIEvent); if assigned(aEvent) then begin - FEvent.window := aEvent^.window; - FEvent.event_type := aEvent^.event_type; - FEvent.element := aEvent^.element; - FEvent.event_number := aEvent^.event_number; - FEvent.bind_id := aEvent^.bind_id; + FEvent.window := aEvent^.window; + FEvent.event_type := aEvent^.event_type; + FEvent.element := aEvent^.element; + FEvent.event_number := aEvent^.event_number; + FEvent.bind_id := aEvent^.bind_id; + FEvent.client_id := aEvent^.client_id; + FEvent.connection_id := aEvent^.connection_id; + FEvent.cookies := aEvent^.cookies; end else FillChar(FEvent, SizeOf(TWebUIEvent), #0); end; -constructor TWebUIEventHandler.Create(window: TWebUIWindowID; event_type: TWebUIEventType; const element: PWebUIChar; event_number: TWebUIEventID; bind_id: TWebUIBindID); +constructor TWebUIEventHandler.Create( window : TWebUIWindowID; + event_type : TWebUIEventType; + const element : PWebUIChar; + event_number : TWebUIEventID; + bind_id : TWebUIBindID; + client_id : TWebUIClientID; + connection_id : TWebUIConnectionID; + const cookies : PWebUIChar); begin inherited Create; - FEvent.window := window; - FEvent.event_type := event_type; - FEvent.element := element; - FEvent.event_number := event_number; - FEvent.bind_id := bind_id; + FEvent.window := window; + FEvent.event_type := event_type; + FEvent.element := element; + FEvent.event_number := event_number; + FEvent.bind_id := bind_id; + FEvent.client_id := client_id; + FEvent.connection_id := connection_id; + FEvent.cookies := cookies; end; function TWebUIEventHandler.GetInitialized: boolean; @@ -354,6 +437,24 @@ function TWebUIEventHandler.GetCount: NativeUInt; Result := 0; end; +function TWebUIEventHandler.GetClientID: TWebUIClientID; +begin + Result := FEvent.client_id; +end; + +function TWebUIEventHandler.GetConnectionID : TWebUIConnectionID; +begin + Result := FEvent.connection_id; +end; + +function TWebUIEventHandler.GetCookies : string; +begin + if assigned(FEvent.cookies) then + Result := {$IFDEF DELPHI12_UP}UTF8ToString{$ELSE}UTF8Decode{$ENDIF}(PAnsiChar(FEvent.cookies)) + else + Result := ''; +end; + function TWebUIEventHandler.GetIntAt(index: NativeUInt): int64; begin if Initialized then @@ -589,4 +690,88 @@ procedure TWebUIEventHandler.SetResponse(const response: TMemoryStream; aOffset, end; end; +function TWebUIEventHandler.ShowClient(const content : string) : boolean; +var + LContent : AnsiString; + LContentPtr : PWebUIChar; +begin + Result := False; + + if Initialized then + begin + if (length(content) > 0) then + begin + LContent := UTF8Encode(content + #0); + LContentPtr := @LContent[1]; + end + else + LContentPtr := nil; + + Result := webui_show_client(@FEvent, LContentPtr); + end; +end; + +procedure TWebUIEventHandler.CloseClient; +begin + if Initialized then + webui_close_client(@FEvent); +end; + +procedure TWebUIEventHandler.SendRawClient(const function_: string; const raw: Pointer; size: NativeUInt); +var + LFunction: AnsiString; +begin + if Initialized then + begin + LFunction := UTF8Encode(function_ + #0); + webui_send_raw_client(@FEvent, @LFunction[1], raw, size); + end; +end; + +procedure TWebUIEventHandler.NavigateClient(const Url: string); +var + LUrl: AnsiString; +begin + if Initialized then + begin + LUrl := UTF8Encode(Url + #0); + webui_navigate_client(@FEvent, @LUrl[1]); + end; +end; + +procedure TWebUIEventHandler.RunClient(const script_: string); +var + LScript : AnsiString; +begin + if Initialized then + begin + LScript := UTF8Encode(script_ + #0); + webui_run_client(@FEvent, @LScript[1]); + end; +end; + +function TWebUIEventHandler.ScriptClient(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean; +var + LScript : AnsiString; + LBuffer : PWebUIChar; +begin + Result := False; + LBuffer := nil; + + if Initialized then + try + LBuffer := webui_malloc(buffer_length); + LScript := UTF8Encode(script_ + #0); + + if webui_script_client(@FEvent, @LScript[1], timeout, LBuffer, buffer_length) then + begin + buffer := {$IFDEF DELPHI12_UP}UTF8ToString{$ELSE}UTF8Decode{$ENDIF}(PAnsiChar(LBuffer)); + Result := True; + end; + finally + if (LBuffer <> nil) then + webui_free(LBuffer); + end; +end; + end. diff --git a/source/uWebUILibFunctions.pas b/source/uWebUILibFunctions.pas index 2a1428b..1567583 100644 --- a/source/uWebUILibFunctions.pas +++ b/source/uWebUILibFunctions.pas @@ -44,10 +44,10 @@ interface webui_get_new_window_id : function(): TWebUIWindowID; cdecl; /// <summary> - /// Bind a specific html element click event with a function. Empty element means all events. + /// Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events. /// </summary> /// <param name="window">The window number.</param> - /// <param name="element">The HTML ID.</param> + /// <param name="element">The HTML element / JavaScript object.</param> /// <param name="func">The callback function.</param> /// <returns>Returns a unique bind ID.</returns> /// <remarks> @@ -67,7 +67,7 @@ interface webui_get_best_browser : function(window: TWebUIWindowID): TWebUIBrowser; cdecl; /// <summary> - /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. /// </summary> /// <param name="window">The window number.</param> /// <param name="content">The HTML, URL, Or a local file.</param> @@ -77,6 +77,17 @@ interface /// </remarks> webui_show : function(window: TWebUIWindowID; const content: PWebUIChar): boolean; cdecl; + /// <summary> + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. + /// </summary> + /// <param name="e">The event struct.</param> + /// <param name="content">The HTML, URL, Or a local file.</param> + /// <returns>Returns True if showing the window is successed.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_show_client)</see></para> + /// </remarks> + webui_show_client : function(e: PWebUIEvent; const content: PWebUIChar): boolean; cdecl; + /// <summary> /// Same as `webui_show()`. But using a specific web browser. /// </summary> @@ -89,6 +100,17 @@ interface /// </remarks> webui_show_browser : function(window: TWebUIWindowID; const content: PWebUIChar; browser: TWebUIBrowser): boolean; cdecl; + /// <summary> + /// Start only the web server and return the URL. This is useful for web app. + /// </summary> + /// <param name="window">The window number.</param> + /// <param name="path">The local root folder full path.</param> + /// <returns>Returns the url of this window server.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_start_server)</see></para> + /// </remarks> + webui_start_server : function(window: TWebUIWindowID; const path: PWebUIChar): PWebUIChar; cdecl; + /// <summary> /// Show a WebView window using embedded HTML, or a file. If the window is already /// open, it will be refreshed. Note: Win32 need `WebView2Loader.dll`. @@ -111,6 +133,35 @@ interface /// </remarks> webui_set_kiosk : procedure(window: TWebUIWindowID; status: boolean); cdecl; + /// <summary> + /// Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. + /// </summary> + /// <param name="window">The window number.</param> + /// <param name="status">True or False.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_high_contrast)</see></para> + /// </remarks> + webui_set_high_contrast : procedure(window: TWebUIWindowID; status: boolean); cdecl; + + /// <summary> + /// Get OS high contrast preference. + /// </summary> + /// <returns>Returns True if OS is using high contrast theme.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_is_high_contrast)</see></para> + /// </remarks> + webui_is_high_contrast : function(): boolean; cdecl; + + /// <summary> + /// Check if a web browser is installed. + /// </summary> + /// <param name="browser">The web browser to be found.</param> + /// <returns>Returns True if the specified browser is available.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_is_high_contrast)</see></para> + /// </remarks> + webui_browser_exist : function(browser: TWebUIBrowser): boolean; cdecl; + /// <summary> /// Wait until all opened windows get closed. /// </summary> @@ -120,7 +171,7 @@ interface webui_wait : procedure(); cdecl; /// <summary> - /// Close a specific window only. The window object will still exist. + /// Close a specific window only. The window object will still exist. All clients. /// </summary> /// <param name="window">The window number.</param> /// <remarks> @@ -128,6 +179,15 @@ interface /// </remarks> webui_close : procedure(window: TWebUIWindowID); cdecl; + /// <summary> + /// Close a specific client. + /// </summary> + /// <param name="e">The event struct.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_close_client)</see></para> + /// </remarks> + webui_close_client : procedure(e: PWebUIEvent); cdecl; + /// <summary> /// Close a specific window and free all memory resources. /// </summary> @@ -167,7 +227,7 @@ interface webui_set_default_root_folder : function(const path: PWebUIChar): boolean; cdecl; /// <summary> - /// Set a custom handler to serve files. + /// Set a custom handler to serve files. This custom handler should return full HTTP header and body. /// </summary> /// <param name="window">The window number.</param> /// <param name="handler">The handler function: `void myHandler(const char* filename, * int* length)`.</param> @@ -187,7 +247,7 @@ interface webui_is_shown : function(window: TWebUIWindowID): boolean; cdecl; /// <summary> - /// Set the maximum time in seconds to wait for the window to connect. This affects `show()` and `wait()`. + /// Set the maximum time in seconds to wait for the window to connect. This effect `show()` and `wait()`. Value of `0` means wait forever. /// </summary> /// <param name="second">The timeout in seconds.</param> /// <remarks> @@ -246,7 +306,7 @@ interface webui_malloc : function(size: NativeUInt): Pointer; cdecl; /// <summary> - /// Safely send raw data to the UI. + /// Safely send raw data to the UI. All clients. /// </summary> /// <param name="window">The window number.</param> /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> @@ -257,6 +317,18 @@ interface /// </remarks> webui_send_raw : procedure(window: TWebUIWindowID; const function_: PWebUIChar; const raw: Pointer; size: NativeUInt); cdecl; + /// <summary> + /// Safely send raw data to the UI. Single client. + /// </summary> + /// <param name="e">The event struct.</param> + /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> + /// <param name="raw">The raw data buffer.</param> + /// <param name="size">The raw data size in bytes.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_send_raw_client)</see></para> + /// </remarks> + webui_send_raw_client : procedure(e: PWebUIEvent; const function_: PWebUIChar; const raw: Pointer; size: NativeUInt); cdecl; + /// <summary> /// Set a window in hidden mode. Should be called before `webui_show()`. /// </summary> @@ -320,6 +392,15 @@ interface /// </remarks> webui_get_url : function(window: TWebUIWindowID): PWebUIChar; cdecl; + /// <summary> + /// Open an URL in the native default web browser. + /// </summary> + /// <param name="url">The URL to open.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_open_url)</see></para> + /// </remarks> + webui_open_url : procedure(const url: PWebUIChar); cdecl; + /// <summary> /// Allow a specific window address to be accessible from a public network. /// </summary> @@ -331,7 +412,7 @@ interface webui_set_public : procedure(window: TWebUIWindowID; status: boolean); cdecl; /// <summary> - /// Navigate to a specific URL. + /// Navigate to a specific URL. All clients. /// </summary> /// <param name="window">The window number.</param> /// <param name="url">Full HTTP URL.</param> @@ -340,6 +421,16 @@ interface /// </remarks> webui_navigate : procedure(window: TWebUIWindowID; const url: PWebUIChar); cdecl; + /// <summary> + /// Navigate to a specific URL. Single client. + /// </summary> + /// <param name="e">The event struct.</param> + /// <param name="url">Full HTTP URL.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_navigate_client)</see></para> + /// </remarks> + webui_navigate_client : procedure(e: PWebUIEvent; const url: PWebUIChar); cdecl; + /// <summary> /// Free all memory resources. Should be called only at the end. /// </summary> @@ -386,6 +477,16 @@ interface /// </remarks> webui_get_child_process_id : function(window: TWebUIWindowID): NativeUInt; cdecl; + /// <summary> + /// Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` + /// </summary> + /// <param name="window">The window number.</param> + /// <returns>Returns the network port of the window.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_port)</see></para> + /// </remarks> + webui_get_port : function(window: TWebUIWindowID): NativeUInt; cdecl; + /// <summary> /// Set a custom web-server/websocket network port to be used by WebUI. /// This can be useful to determine the HTTP link of `webui.js` in case @@ -400,7 +501,16 @@ interface webui_set_port : function(window: TWebUIWindowID; port: NativeUInt): boolean; cdecl; /// <summary> - /// Control the WebUI behaviour. It's better to call at the beginning. + /// Get an available usable free network port. + /// </summary> + /// <returns>Returns a free port.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_free_port)</see></para> + /// </remarks> + webui_get_free_port : function(): NativeUInt; cdecl; + + /// <summary> + /// Control the WebUI behaviour. It's recommended to be called at the beginning. /// </summary> /// <param name="option">The desired option from `webui_config` enum.</param> /// <param name="status">The status of the option, `true` or `false`.</param> @@ -422,6 +532,16 @@ interface /// </remarks> webui_set_event_blocking : procedure(window: TWebUIWindowID; status: boolean); cdecl; + /// <summary> + /// Get the HTTP mime type of a file. + /// </summary> + /// <param name="file_">The file name.</param> + /// <returns>Returns the HTTP mime string.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_mime_type)</see></para> + /// </remarks> + webui_get_mime_type : function(const file_: PWebUIChar): PWebUIChar; cdecl; + /// <summary> /// Set the SSL/TLS certificate and the private key content, both in PEM /// format. This works only with `webui-2-secure` library. If set empty WebUI @@ -436,7 +556,7 @@ interface webui_set_tls_certificate : function(const certificate_pem, private_key_pem: PWebUIChar): boolean; cdecl; /// <summary> - /// Run JavaScript without waiting for the response. + /// Run JavaScript without waiting for the response. All clients. /// </summary> /// <param name="window">The window number.</param> /// <param name="script">The JavaScript to be run.</param> @@ -446,12 +566,22 @@ interface webui_run : procedure(window: TWebUIWindowID; const script: PWebUIChar); cdecl; /// <summary> - /// Run JavaScript and get the response back. + /// Run JavaScript without waiting for the response. Single client. + /// </summary> + /// <param name="e">The event struct.</param> + /// <param name="script">The JavaScript to be run.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_run_client)</see></para> + /// </remarks> + webui_run_client : procedure(e: PWebUIEvent; const script: PWebUIChar); cdecl; + + /// <summary> + /// Run JavaScript and get the response back. Work only in single client mode. /// Make sure your local buffer can hold the response. /// </summary> /// <param name="window">The window number.</param> /// <param name="script">The JavaScript to be run.</param> - /// <param name="timeout">The execution timeout.</param> + /// <param name="timeout">The execution timeout in seconds.</param> /// <param name="buffer">The local buffer to hold the response.</param> /// <param name="buffer_length">The local buffer size.</param> /// <returns>Returns True if there is no execution error.</returns> @@ -460,11 +590,26 @@ interface /// </remarks> webui_script : function(window: TWebUIWindowID; const script: PWebUIChar; timeout: NativeUInt; buffer: PWebUIChar; buffer_length: NativeUInt): boolean; cdecl; + /// <summary> + /// Run JavaScript and get the response back. Single client. + /// Make sure your local buffer can hold the response. + /// </summary> + /// <param name="e">The event struct.</param> + /// <param name="script">The JavaScript to be run.</param> + /// <param name="timeout">The execution timeout in seconds.</param> + /// <param name="buffer">The local buffer to hold the response.</param> + /// <param name="buffer_length">The local buffer size.</param> + /// <returns>Returns True if there is no execution error.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_script_client)</see></para> + /// </remarks> + webui_script_client : function(e: PWebUIEvent; const script: PWebUIChar; timeout: NativeUInt; buffer: PWebUIChar; buffer_length: NativeUInt): boolean; cdecl; + /// <summary> /// Chose between Deno and Nodejs as runtime for .js and .ts files. /// </summary> /// <param name="window">The window number.</param> - /// <param name="runtime">Deno, Nodejs or None.</param> + /// <param name="runtime">Deno, Bun, Nodejs or None.</param> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_runtime)</see></para> /// </remarks> @@ -691,6 +836,18 @@ interface /// </remarks> webui_interface_get_int_at : function(window: TWebUIWindowID; event_number: TWebUIEventID; index: NativeUInt): int64; cdecl; + /// <summary> + /// Get an argument as float at a specific index. + /// </summary> + /// <param name="window">The window number.</param> + /// <param name="event_number">The event number.</param> + /// <param name="index">The argument position.</param> + /// <returns>Returns argument as float.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_interface_get_float_at)</see></para> + /// </remarks> + webui_interface_get_float_at : function(window: TWebUIWindowID; event_number: TWebUIEventID; index: NativeUInt): double; cdecl; + /// <summary> /// Get an argument as boolean at a specific index. /// </summary> diff --git a/source/uWebUIMiscFunctions.pas b/source/uWebUIMiscFunctions.pas index b72c4fb..198a7a8 100644 --- a/source/uWebUIMiscFunctions.pas +++ b/source/uWebUIMiscFunctions.pas @@ -115,7 +115,15 @@ function LibraryExists(const aPath : string) : boolean; /// </summary> /// <param name="aSrcString">The original unicode string.</param> /// <param name="aRsltLength">The length of the result string.</param> -function StringToPWebUIChar(const aSrcString: string; var aRsltLength: integer): PWebUIChar; +function StringToPWebUIChar(const aSrcString: string; var aRsltLength: integer): PWebUIChar; overload; +/// <summary> +/// Converts a unicode string to a WebUI string. +/// This function should only be used by the file handler callback. +/// By allocating resources using webui_malloc() WebUI will automaticaly free the resources. +/// </summary> +/// <param name="aSrcString">The original unicode string.</param> +/// <param name="aRsltLength">The length of the result string.</param> +function StringToPWebUIChar(const aSrcString: AnsiString; var aRsltLength: integer): PWebUIChar; overload; {$IFDEF MSWINDOWS} function PathIsRelativeAnsi(pszPath: LPCSTR): BOOL; stdcall; external SHLWAPIDLL name 'PathIsRelativeA'; @@ -389,4 +397,20 @@ function StringToPWebUIChar(const aSrcString: string; var aRsltLength: integer): Result := LRsltBuffer; end; +function StringToPWebUIChar(const aSrcString: AnsiString; var aRsltLength: integer): PWebUIChar; +var + LRsltString : AnsiString; + LRsltBuffer : PWebUIChar; +begin + LRsltString := aSrcString + AnsiChar(#0); + aRsltLength := length(LRsltString); + LRsltBuffer := webui_malloc(aRsltLength); + {$IFDEF MSWINDOWS} + CopyMemory(LRsltBuffer, @LRsltString[1], aRsltLength); + {$ELSE} + Move(LRsltString[1], LRsltBuffer^, aRsltLength); + {$ENDIF} + Result := LRsltBuffer; +end; + end. diff --git a/source/uWebUITypes.pas b/source/uWebUITypes.pas index 3734adc..f23f6af 100644 --- a/source/uWebUITypes.pas +++ b/source/uWebUITypes.pas @@ -90,7 +90,11 @@ interface /// <summary> /// Any Chromium based browser. /// </summary> - ChromiumBased + ChromiumBased, + /// <summary> + /// WebView (Non-web-browser). + /// </summary> + Webview ); /// <summary> @@ -111,7 +115,11 @@ interface /// <summary> /// Use Nodejs runtime for .js files. /// </summary> - NodeJS + NodeJS, + /// <summary> + /// Use Bun runtime for .js and .ts files + /// </summary> + Bun ); /// <summary> @@ -153,11 +161,21 @@ interface /// </summary> TWebUIBindID = type NativeUInt; + /// <summary> + /// Client's unique ID. + /// </summary> + TWebUIClientID = type NativeUInt; + /// <summary> /// The event number or event ID. /// </summary> TWebUIEventID = type NativeUInt; + /// <summary> + /// Client's connection ID. + /// </summary> + TWebUIConnectionID = type NativeUInt; + /// <summary> /// WebUI char type. /// </summary> @@ -167,6 +185,9 @@ interface /// <summary> /// WebUI configuration. /// </summary> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_config)</see></para> + /// </remarks> TWebUIConfig = ( /// <summary> /// Control if `webui_show()`, `webui_show_browser()` and @@ -181,7 +202,27 @@ interface /// all windows. You can use `webui_set_event_blocking()` for /// a specific single window update. Default: False. /// </summary> - ui_event_blocking + ui_event_blocking, + /// <summary> + /// Automatically refresh the window UI when any file in the + /// root folder gets changed. + /// Default: False + /// </summary> + folder_monitor, + /// <summary> + /// Allow multiple clients to connect to the same window, + /// This is helpful for web apps (non-desktop software), + /// Please see the documentation for more details. + /// Default: False + /// </summary> + multi_client, + /// <summary> + /// Allow multiple clients to connect to the same window, + /// This is helpful for web apps (non-desktop software), + /// Please see the documentation for more details. + /// Default: False + /// </summary> + use_cookies ); /// <summary> @@ -194,23 +235,35 @@ TWebUIEvent = record /// <summary> /// The window object number. /// </summary> - window : TWebUIWindowID; + window : TWebUIWindowID; /// <summary> /// Event type. /// </summary> - event_type : TWebUIEventType; + event_type : TWebUIEventType; /// <summary> /// HTML element ID. /// </summary> - element : PWebUIChar; + element : PWebUIChar; /// <summary> /// Internal WebUI. Event number or Event ID. /// </summary> - event_number : TWebUIEventID; + event_number : TWebUIEventID; /// <summary> /// Bind ID. /// </summary> - bind_id : TWebUIBindID; + bind_id : TWebUIBindID; + /// <summary> + /// Client's unique ID. + /// </summary> + client_id : TWebUIClientID; + /// <summary> + /// Client's connection ID. + /// </summary> + connection_id : TWebUIConnectionID; + /// <summary> + /// Client's full cookies. + /// </summary> + cookies : PWebUIChar; end; PWebUIEvent = ^TWebUIEvent; @@ -233,6 +286,9 @@ TWebUIEvent = record function GetBindID: TWebUIBindID; function GetWindow: IWebUIWindow; function GetCount: NativeUInt; + function GetClientID: TWebUIClientID; + function GetConnectionID : TWebUIConnectionID; + function GetCookies : string; /// <summary> /// Get an argument as integer at a specific index. @@ -394,49 +450,116 @@ TWebUIEvent = record /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_interface_set_response)</see></para> /// </remarks> procedure SetResponse(const response: string); + /// <summary> + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. Single client. + /// </summary> + /// <param name="content">The HTML, URL, Or a local file.</param> + /// <returns>Returns True if showing the window is successed.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_show_client)</see></para> + /// </remarks> + function ShowClient(const content : string) : boolean; + /// <summary> + /// Close a specific client. + /// </summary> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_close_client)</see></para> + /// </remarks> + procedure CloseClient; + /// <summary> + /// Safely send raw data to the UI. Single client. + /// </summary> + /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> + /// <param name="raw">The raw data buffer.</param> + /// <param name="size">The raw data size in bytes.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_send_raw_client)</see></para> + /// </remarks> + procedure SendRawClient(const function_: string; const raw: Pointer; size: NativeUInt); + /// <summary> + /// Navigate to a specific URL. Single client. + /// </summary> + /// <param name="url">Full HTTP URL.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_navigate_client)</see></para> + /// </remarks> + procedure NavigateClient(const Url: string); + /// <summary> + /// Run JavaScript without waiting for the response. Single client. + /// </summary> + /// <param name="script_">The JavaScript to be run.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_run)</see></para> + /// </remarks> + procedure RunClient(const script_: string); + /// <summary> + /// Run JavaScript and get the response back. Single client. + /// Make sure your local buffer can hold the response. + /// </summary> + /// <param name="script_">The JavaScript to be run.</param> + /// <param name="timeout">The execution timeout in seconds.</param> + /// <param name="buffer">The local buffer to hold the response.</param> + /// <param name="buffer_length">The local buffer size.</param> + /// <returns>Returns True if there is no execution error.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_script)</see></para> + /// </remarks> + function ScriptClient(const script_: string; timeout: NativeUInt; var buffer: string; buffer_length: NativeUInt): boolean; /// <summary> /// Returns true if the Window was created successfully. /// </summary> - property Initialized : boolean read GetInitialized; + property Initialized : boolean read GetInitialized; /// <summary> /// Pointer to WebUI event record. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_event_t)</see></para> /// </remarks> - property Event : PWebUIEvent read GetEvent; + property Event : PWebUIEvent read GetEvent; /// <summary> /// Window wrapper for the Window object of this event. /// </summary> - property Window : IWebUIWindow read GetWindow; + property Window : IWebUIWindow read GetWindow; /// <summary> /// The window object number or ID. /// </summary> - property WindowID : TWebUIWindowID read GetWindowID; + property WindowID : TWebUIWindowID read GetWindowID; /// <summary> /// Event type. /// </summary> - property EventType : TWebUIEventType read GetEventType; + property EventType : TWebUIEventType read GetEventType; /// <summary> /// HTML element ID. /// </summary> - property Element : string read GetElement; + property Element : string read GetElement; /// <summary> /// Event number or Event ID. /// </summary> - property EventID : TWebUIEventID read GetEventID; + property EventID : TWebUIEventID read GetEventID; /// <summary> /// Bind ID. /// </summary> - property BindID : TWebUIBindID read GetBindID; + property BindID : TWebUIBindID read GetBindID; /// <summary> /// Get how many arguments there are in an event. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_count)</see></para> /// </remarks> - property Count : NativeUInt read GetCount; + property Count : NativeUInt read GetCount; + /// <summary> + /// Client's unique ID. + /// </summary> + property ClientID : TWebUIClientID read GetClientID; + /// <summary> + /// Client's connection ID. + /// </summary> + property ConnectionID : TWebUIConnectionID read GetConnectionID; + /// <summary> + /// Client's full cookies. + /// </summary> + property Cookies : string read GetCookies; end; IWebUIWindow = interface @@ -464,9 +587,9 @@ TWebUIEvent = record /// </remarks> procedure DestroyWindow; /// <summary> - /// <para>Bind a specific html element click event with the OnWebUIEvent event. Empty element means all events.</para> + /// <para>Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events.</para> /// </summary> - /// <param name="element_">The HTML element ID.</param> + /// <param name="element_">The HTML element / JavaScript object.</param> /// <returns>Returns a unique bind ID.</returns> /// <remarks> /// <para>The OnWebUIEvent event will be executed in the main application thread by default. Set WebUI.SyncedEvents to false in order to execute it in a background thread.</para> @@ -515,7 +638,7 @@ TWebUIEvent = record /// </remarks> function BindAllEvents(func_: TWebUIBindCallback): TWebUIBindID; overload; /// <summary> - /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. /// </summary> /// <param name="content">The HTML, URL, Or a local file.</param> /// <returns>Returns True if showing the window is successed.</returns> @@ -551,7 +674,7 @@ TWebUIEvent = record /// </remarks> procedure SetKiosk(status: boolean); /// <summary> - /// Close a specific window only. The window object will still exist. + /// Close a specific window only. The window object will still exist. All clients. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_close)</see></para> @@ -567,7 +690,7 @@ TWebUIEvent = record /// </remarks> function SetRootFolder(const path : string) : boolean; /// <summary> - /// Set a custom handler to serve files. + /// Set a custom handler to serve files. This custom handler should return full HTTP header and body. /// </summary> /// <param name="handler">The handler function: `void myHandler(const char* filename, * int* length)`.</param> /// <remarks> @@ -585,7 +708,7 @@ TWebUIEvent = record /// </remarks> procedure SetIcon(const icon, icon_type : string); /// <summary> - /// Safely send raw data to the UI. + /// Safely send raw data to the UI. All clients. /// </summary> /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> /// <param name="raw">The raw data buffer.</param> @@ -646,7 +769,7 @@ TWebUIEvent = record /// </remarks> procedure SetPublic(status: boolean); /// <summary> - /// Navigate to a specific URL. + /// Navigate to a specific URL. All clients. /// </summary> /// <param name="url">Full HTTP URL.</param> /// <remarks> @@ -662,6 +785,14 @@ TWebUIEvent = record /// </remarks> procedure DeleteProfile; /// <summary> + /// Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` + /// </summary> + /// <returns>Returns the network port of the window.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_port)</see></para> + /// </remarks> + function GetPort : NativeUInt; + /// <summary> /// Set a custom web-server/websocket network port to be used by WebUI. /// This can be useful to determine the HTTP link of `webui.js` in case /// you are trying to use WebUI with an external web-server like NGNIX @@ -673,7 +804,17 @@ TWebUIEvent = record /// </remarks> function SetPort(port : NativeUInt): boolean; /// <summary> - /// Run JavaScript without waiting for the response. + /// Set a custom web-server/websocket network port to be used by WebUI. + /// This can be useful to determine the HTTP link of `webui.js` in case + /// you are trying to use WebUI with an external web-server like NGNIX + /// </summary> + /// <param name="port">The web-server network port WebUI should use.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_port)</see></para> + /// </remarks> + procedure SetPort2(port : NativeUInt); + /// <summary> + /// Run JavaScript without waiting for the response. All clients. /// </summary> /// <param name="script_">The JavaScript to be run.</param> /// <remarks> @@ -681,11 +822,11 @@ TWebUIEvent = record /// </remarks> procedure Run(const script_: string); /// <summary> - /// Run JavaScript and get the response back. + /// Run JavaScript and get the response back. Work only in single client mode. /// Make sure your local buffer can hold the response. /// </summary> /// <param name="script_">The JavaScript to be run.</param> - /// <param name="timeout">The execution timeout.</param> + /// <param name="timeout">The execution timeout in seconds.</param> /// <param name="buffer">The local buffer to hold the response.</param> /// <param name="buffer_length">The local buffer size.</param> /// <returns>Returns True if there is no execution error.</returns> @@ -696,7 +837,7 @@ TWebUIEvent = record /// <summary> /// Chose between Deno and Nodejs as runtime for .js and .ts files. /// </summary> - /// <param name="runtime">Deno, Nodejs or None.</param> + /// <param name="runtime">Deno, Bun, Nodejs or None.</param> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_runtime)</see></para> /// </remarks> @@ -717,6 +858,23 @@ TWebUIEvent = record /// </remarks> procedure SetEventBlocking(status: boolean); /// <summary> + /// Start only the web server and return the URL. This is useful for web app. + /// </summary> + /// <param name="path">The local root folder full path.</param> + /// <returns>Returns the url of this window server.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_start_server)</see></para> + /// </remarks> + function StartServer(const path: string): string; + /// <summary> + /// Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. + /// </summary> + /// <param name="status">True or False.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_high_contrast)</see></para> + /// </remarks> + procedure SetHighContrast(status: boolean); + /// <summary> /// Window number or Window ID. /// </summary> property ID : TWebUIWindowID read GetID; @@ -765,6 +923,13 @@ TWebUIEvent = record /// </summary> property AllowWebView : boolean read GetAllowWebView write SetAllowWebView; /// <summary> + /// Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` + /// </summary> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_port)</see></para> + /// </remarks> + property Port : NativeUInt read GetPort write SetPort2; + /// <summary> /// Event triggered on a browser event. It's necessay to bind the event using the TWebUIWindow.Bind* functions without a "func_" parameter. /// </summary> property OnWebUIEvent : TOnWebUIEvent read GetOnWebUIEvent write SetOnWebUIEvent; diff --git a/source/uWebUIVersion.inc b/source/uWebUIVersion.inc index b17df7f..319cbed 100644 --- a/source/uWebUIVersion.inc +++ b/source/uWebUIVersion.inc @@ -2,4 +2,4 @@ WEBUI_VERSION_MINOR = 5; WEBUI_VERSION_RELEASE = 0; WEBUI_VERSION_BUILD = 0; - WEBUI_VERSION_STAGE = 'beta.1'; + WEBUI_VERSION_STAGE = 'beta.2'; diff --git a/source/uWebUIWindow.pas b/source/uWebUIWindow.pas index afd4fe7..cddaa39 100644 --- a/source/uWebUIWindow.pas +++ b/source/uWebUIWindow.pas @@ -86,9 +86,9 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure DestroyWindow; /// <summary> - /// <para>Bind a specific html element click event with the OnWebUIEvent event. Empty element means all events.</para> + /// <para>Bind an HTML element and a JavaScript object with a backend function. Empty element name means all events.</para> /// </summary> - /// <param name="element_">The HTML element ID.</param> + /// <param name="element_">The HTML element / JavaScript object.</param> /// <returns>Returns a unique bind ID.</returns> /// <remarks> /// <para>The OnWebUIEvent event will be executed in the main application thread by default. Set WebUI.SyncedEvents to false in order to execute it in a background thread.</para> @@ -137,7 +137,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> function BindAllEvents(func_: TWebUIBindCallback): TWebUIBindID; overload; /// <summary> - /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. + /// Show a window using embedded HTML, or a file. If the window is already open, it will be refreshed. This will refresh all windows in multi-client mode. /// </summary> /// <param name="content">The HTML, URL, Or a local file.</param> /// <returns>Returns True if showing the window is successed.</returns> @@ -173,7 +173,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure SetKiosk(status: boolean); /// <summary> - /// Close a specific window only. The window object will still exist. + /// Close a specific window only. The window object will still exist. All clients. /// </summary> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_close)</see></para> @@ -189,7 +189,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> function SetRootFolder(const path : string) : boolean; /// <summary> - /// Set a custom handler to serve files. + /// Set a custom handler to serve files. This custom handler should return full HTTP header and body. /// </summary> /// <param name="handler">The handler function: `void myHandler(const char* filename, * int* length)`.</param> /// <remarks> @@ -207,7 +207,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure SetIcon(const icon, icon_type : string); /// <summary> - /// Safely send raw data to the UI. + /// Safely send raw data to the UI. All clients. /// </summary> /// <param name="function_">The JavaScript function to receive raw data: `function * myFunc(myData){}`.</param> /// <param name="raw">The raw data buffer.</param> @@ -268,7 +268,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure SetPublic(status: boolean); /// <summary> - /// Navigate to a specific URL. + /// Navigate to a specific URL. All clients. /// </summary> /// <param name="url">Full HTTP URL.</param> /// <remarks> @@ -284,6 +284,14 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure DeleteProfile; /// <summary> + /// Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` + /// </summary> + /// <returns>Returns the network port of the window.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_get_port)</see></para> + /// </remarks> + function GetPort : NativeUInt; + /// <summary> /// Set a custom web-server/websocket network port to be used by WebUI. /// This can be useful to determine the HTTP link of `webui.js` in case /// you are trying to use WebUI with an external web-server like NGNIX @@ -295,7 +303,17 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> function SetPort(port : NativeUInt): boolean; /// <summary> - /// Run JavaScript without waiting for the response. + /// Set a custom web-server/websocket network port to be used by WebUI. + /// This can be useful to determine the HTTP link of `webui.js` in case + /// you are trying to use WebUI with an external web-server like NGNIX + /// </summary> + /// <param name="port">The web-server network port WebUI should use.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_port)</see></para> + /// </remarks> + procedure SetPort2(port : NativeUInt); + /// <summary> + /// Run JavaScript without waiting for the response. All clients. /// </summary> /// <param name="script_">The JavaScript to be run.</param> /// <remarks> @@ -303,11 +321,11 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure Run(const script_: string); /// <summary> - /// Run JavaScript and get the response back. + /// Run JavaScript and get the response back. Work only in single client mode. /// Make sure your local buffer can hold the response. /// </summary> /// <param name="script_">The JavaScript to be run.</param> - /// <param name="timeout">The execution timeout.</param> + /// <param name="timeout">The execution timeout in seconds.</param> /// <param name="buffer">The local buffer to hold the response.</param> /// <param name="buffer_length">The local buffer size.</param> /// <returns>Returns True if there is no execution error.</returns> @@ -318,7 +336,7 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// <summary> /// Chose between Deno and Nodejs as runtime for .js and .ts files. /// </summary> - /// <param name="runtime">Deno, Nodejs or None.</param> + /// <param name="runtime">Deno, Bun, Nodejs or None.</param> /// <remarks> /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_runtime)</see></para> /// </remarks> @@ -339,6 +357,23 @@ TWebUIWindow = class(TInterfacedObject, IWebUIWindow) /// </remarks> procedure SetEventBlocking(status: boolean); /// <summary> + /// Start only the web server and return the URL. This is useful for web app. + /// </summary> + /// <param name="path">The local root folder full path.</param> + /// <returns>Returns the url of this window server.</returns> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_start_server)</see></para> + /// </remarks> + function StartServer(const path: string): string; + /// <summary> + /// Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. + /// </summary> + /// <param name="status">True or False.</param> + /// <remarks> + /// <para><see href="https://github.com/webui-dev/webui/blob/main/include/webui.h">WebUI source file: /include/webui.h (webui_set_high_contrast)</see></para> + /// </remarks> + procedure SetHighContrast(status: boolean); + /// <summary> /// Get a free window number that can be used with `webui_new_window_id()`. /// </summary> /// <returns>Returns the first available free window number. Starting from 1.</returns> @@ -612,6 +647,25 @@ procedure TWebUIWindow.SetEventBlocking(status: boolean); webui_set_event_blocking(FID, status); end; +function TWebUIWindow.StartServer(const path: string): string; +var + LPath: AnsiString; +begin + Result := ''; + + if Initialized then + begin + LPath := UTF8Encode(path + #0); + Result := {$IFDEF DELPHI12_UP}UTF8ToString{$ELSE}UTF8Decode{$ENDIF}(PAnsiChar(webui_start_server(FID, @LPath[1]))) + end; +end; + +procedure TWebUIWindow.SetHighContrast(status: boolean); +begin + if Initialized then + webui_set_high_contrast(FID, status); +end; + procedure TWebUIWindow.doOnWebUIEvent(const aEvent: IWebUIEventHandler); begin if assigned(FOnWebUIEvent) then @@ -859,12 +913,25 @@ procedure TWebUIWindow.DeleteProfile; webui_delete_profile(FID); end; +function TWebUIWindow.GetPort : NativeUInt; +begin + if Initialized then + Result := webui_get_port(FID) + else + Result := 0; +end; + function TWebUIWindow.SetPort(port : NativeUInt): boolean; begin Result := Initialized and webui_set_port(FID, port); end; +procedure TWebUIWindow.SetPort2(port : NativeUInt); +begin + SetPort(port); +end; + procedure TWebUIWindow.Run(const script_: string); var LScript : AnsiString;