![]() |
TWebBrowser zur Laufzeit löschen
Hallo Forum!
Wenn ich ein Form zur Laufzeit löschen möchte, mache ich das so:
Code:
Wenn aber ein TWebbrowser, der eine lokale html-Datei lädt, auf dem Form lag, bekomme ich eine Zugriffsverletzung, wenn ich das Form wieder laden will.
if assigned(Form) then
begin Form.DisposeOf; Form := nil; end; Der TWebbrowser scheint nicht vollständig gelöscht zu sein. Weiß jemand, wie ich das Problem lösen kann? |
AW: TWebBrowser zur Laufzeit löschen
Die Fragestellung lässt doch sehr zu wünschen übrig. :?
Aber wenn du eine Form "zerstörst", dann musst du sie vor dem erneuten Aurufen mit
Delphi-Quellcode:
wieder erstellen.
Form := TForm.Create
Wenn das jetzt nicht das ist was du suchst, dann wäre eine aussagekräftigere Beschreibung angeraten. Evtl. auch ein bisschen SourceCode aus deinem Programm wo der Fehler auftritt. |
AW: TWebBrowser zur Laufzeit löschen
Hi,
zeig doch mal den Code der die Zugriffsverletzung auslöst. Interessanter ist in der Tat wie du das Form erzeugst/aufrufst, anstatt der Code des freigebens. Wo knallt es genau? Beim Erzeugen, Anzeigen oder beim Laden des Webbrowserinhalts? |
AW: TWebBrowser zur Laufzeit löschen
Ich rufe das Formular folgendermaßen auf:
Code:
Das funktioniert alles wunderbar, es können also alle möglichen FMX-Komponenten drin liegen.
begin
if not (Assigned(Form)) then Application.CreateForm(TForm, Form); end; Außer eben ein TWebbrowser. Wenn ein TWebbrowser drin liegt gibt es einen Absturz, wenn der oben genannte Code ausgeführt wird. |
AW: TWebBrowser zur Laufzeit löschen
Also das Szenario ist so:
Ich habe ein Startformular (nur dieses Form ist geladen). Von dort komme ich mit dem genannten Code auf ein Formular 1 (wird neu geladen) und von dort aus wird ein weiteres Formular 2 (neu) geladen, in dem der Webbrowser liegt. Der Webbrowser zeigt eine lokale html-Datei an. Zwischen Forumular 1 und 2 kann hin und her wechseln. Hier wird nicht gelöscht. Wenn ich zum Startformular zurückgehe, wird der obige Code aufgerufen, der Formular 1 und 2 aus dem Speicher nimmt. Dann kommt die Zugriffsverletzung. |
AW: TWebBrowser zur Laufzeit löschen
Zitat:
Zitat:
Hast Du schonmal ausprobiert keine Datei in den Webbrowser zu laden? Knallt es dann auch, oder wirklich nur wenn die Datei geladen ist? Hast Du schonmal probiert den Webbrowser temporär mal zu löschen. Knallt es dann auch? |
AW: TWebBrowser zur Laufzeit löschen
Ich bekomme die Zugriffsverletzung nicht, wenn ich das Formular wieder laden will, sondern schon vorher, wenn das Startformular wieder erscheint.
Der Webbrowser ist nicht dynamisch erzeugt, sondern liegt auf dem Form. Meinst Du mit temporär löschen zur Laufzeit löschen? Da weiß ich nicht, wie das geht. Wenn ich aber im Designer den TWebbrowser lösche, funktioniert alles. UND: Wenn der Webbrowser keine html-Datei lädt, passt auch alles. Erst, wenn Daten geladen werden und dann das Form mit dem Browser freigegeben wird, knallt es. |
AW: TWebBrowser zur Laufzeit löschen
Hi,
die Ansätze die Darlo genannt hat solltest du natürlich mal überprüfen. Ich würde aber mal den Debugger anwerfen und schauen, wo es knallt. Einfach mal auf "Anhalten" klicken und schauen in welcher Zeile er stehen bleibt. Eventuell noch den StackTrace zu rate ziehen. Dann siehst du, woher der fehlgeschlagene Aufruf kommt. Dann kannst du somit immer weiter vorne anfangen zu debuggen und findest dann schlussendlich den Übeltäter. Aber da das anscheinend beim Laden der HTML Datei passiert, vermute ich, dass wohl irgendwas im Constructor der Form ausgeführt wird. |
AW: TWebBrowser zur Laufzeit löschen
Probier mal die HTML-Datei zu verlassen.
Delphi-Quellcode:
form3.WebBrowser1.Stop;
form3.WebBrowser1.URL := ''; form3.WebBrowser1.Navigate; |
AW: TWebBrowser zur Laufzeit löschen
Zitat:
Was ich gefunden habe: NavNoReadFromCache
Code:
Das scheint ein guter Ansatz zu sein. Flags: OLEVariant; ist bei mir jetzt eine globale Variable im Startformular. Wenn im Formcreate ich eine html lade und davor Flags:=4; setze, gibt es keine Fehlermeldung, wenn später alles freigegeben wird.
procedure TForm1.Button1Click(Sender: TObject);
var Flags: OLEVariant; begin Flags:=4; // NavNoReadFromCache WebBrowser1.Navigate('http://www.example.com', Flags); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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