![]() |
Chromium Embedded und Firemonkey
Hi,
ich wollte mit LibCEF einen einfachen Offscreen Renderer bauen der mir in eine Bitmap die Webseite rendert. Das geht im Prinzip auch wie es soll, aber ich kriege die Anwendung nicht beendet. Ich konnte das ganze auf folgenden Code herunter trimmen:
Delphi-Quellcode:
Eigentlich mache ich hier nichts anderes als die GlobalCefApp Klasse, den Scheduler zu erstellen und am Ende das ganze wieder zu beenden. Das macht er aber nicht. Irgendwie bleibt das MainForm als Kopie bestehen und cef_shutdown hängt fest.
unit UMain;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TForm3 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation uses uCEFFMXWorkScheduler, UCefApplication; {$R *.fmx} procedure GlobalCEFApp_OnScheduleMessagePumpWork(const aDelayMS: int64); begin if (GlobalFMXWorkScheduler <> nil) then GlobalFMXWorkScheduler.ScheduleMessagePumpWork(aDelayMS); end; procedure CreateGlobalCEFApp; begin if assigned(GlobalCEFApp) then exit; GlobalFMXWorkScheduler := TFMXWorkScheduler.Create(nil); GlobalCEFApp := TCefApplication.Create; GlobalCEFApp.OnScheduleMessagePumpWork := GlobalCEFApp_OnScheduleMessagePumpWork; GlobalCEFApp.EnableHighDPISupport := true; GlobalCEFApp.ExternalMessagePump := true; GlobalCEFApp.MultiThreadedMessageLoop := False; GlobalCEFApp.cache := 'cache'; GlobalCEFApp.StartMainProcess; end; initialization CreateGlobalCEFApp; finalization if assigned(GlobalFMXWorkScheduler) then GlobalFMXWorkScheduler.StopScheduler; DestroyGlobalCEFApp; DestroyGlobalFMXWorkScheduler; end. Die Beispiele von LibCEF sind alles andere als übersichtlich und ich sehe dort nicht was die bei der Initialisierung anders machen. |
AW: Chromium Embedded und Firemonkey
Das kann ich erklären. Chromium startet die Instanz mehrfach sobald StartMainProcess aufgerufen wird. Damit das nicht passiert, musst du entweder
Delphi-Quellcode:
machen, oder das anderweitig blockieren. Eine elegante Lösung für das Problem ist mir aber auch nicht eingefallen.
if GlobalCefApp.StartMainProcess then
begin application.initialize; ... application.run end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz