Ende 2020 würde ich mir überlegen nicht gleich auf D10.4 zu gehen und auf Edge Chromium zu setzen.
Ist im ersten Moment eine wirklich gute Idee.
Jetzt kommt das "aber": der Umstieg auf Delphi 10.4 ist für mich finanziell nicht unproblematisch, da ich nicht jedes Jahr die neue Version kaufe und somit auch nicht den günstigeren Upgrade-Preis nutzen kann, sondern ich muß warten, bis ich ein Angebot finde bei dem ich entsprechend sparen kann.
Im Moment gibt es zwar Delphi 10.4 für 900 Euro zuzgl. MwSt. aber das sind immernoch über 1000 Euro und somit für mich (momentan) nicht machbar (private Gründe).
Nachteil: Wird nicht überall schon gehen
Vorteil: Kein 100 MB Dateien mit zu verteilen, Keine Umständliche Initialisierung
Die notwendigen CEF-Binaries muss sich der Anwender selbst herunterladen, da ich immer dafür bin, das dieser auch was "nützliches" machen soll.
Spass beiseite: ich habe keine Lust mir Ärger einzuhandeln, wenn ich Binaries mitliefere die eigentlich nicht mitgeliefert werden dürfen (Lizenzbestimmung).
Welche "umständliche Initialisierung"?
Die Initialisierung die ich nutze ist ganz einfach und "im Handumdrehen" erledigt:
1) benötigte Units einbinden,
2) in die Ereignisroutine "FormCreate" kommen die folgenden Zeilen rein:
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.FrameworkDirPath := <Pfad zu den Chromium-Binaries>;
GlobalCEFApp.ResourcesDirPath := <Pfad zu den Resources>;
GlobalCEFApp.LocalesDirPath := <Pfad zum "locales"-Verzeichnis;
GlobalCEFApp.EnableGPU := True; // Enable hardware acceleration
GlobalCEFApp.cache := <Pfad zum "cache"-Verzeichnis>;
GlobalCEFApp.UserDataPath := <Pfad zum "data"-Verzeichnis>;
dann wird geprüft, ob die Funktion "StartMainProcess" den Wert "True" zurück liefert.
Trifft dies zu, wird z. B. der "Browser" für die Komponente "ChromiumWindow" mit
ChromiumWindow1.CreateBrowser;
ChromiumWindow1.Initialized;
erstellt und initialisiert und zum Schluss werden (falls notwendig) noch ein paar Ereignisrouten von der Chromium-Komponente zugewiesen:
z. B.:
ChromiumWindow1.ChromiumBrowser.OnBeforeDownload := BeforeDownload;
ChromiumWindow1.ChromiumBrowser.OnDownloadUpdated := DownloadUpdated;
Mehr brauche ich nicht.
Hinzu kommt noch: wenn ich das Chromium-Embedded-Framework nutze habe ich die Sicherheit das dies auch langfristig aktuell gehalten wird.
Bei Micro$oft ist es so, das man nie weiß, wie aktuell das CEF für Edge gehalten wird... Bestes Beispeil: IE 11. Wurde jahrelang vernachlässigt bis er durch den aktuellen Edge "ergänzt" wurde (denn der IE 11 ist immernoch da!).