![]() |
Problem mit dynamischem Erstellen und Freigeben
Hallo,
ich habe einen Frame, in dem sich eine WebBrowser-Kompo befindet. Im Hauptfenster sitzt ein TabControl. Die Tabs erstelle uch zur Laufzeit und fülle sie mit je einem Frame. Schon mal richtig geraten - es geht um einen Mehrfensterbrowser. Leider habe ich folgendes Problem: häufig - jedoch nicht immer - bekomme ich, nachdem ich einen Reiter geschlossen habe - Zugriffsverletzungen, sobald ich irgendwo hinins Hauptfenster klicke. Ich verwende folgenden Code zum Erstellen einer TabSeite:
Delphi-Quellcode:
Zum Schließen des Tabs habe ich Folgendes fabriziert:
procedure Tfm.abAddBrowserWindowExecute;
var sheet:tTabSheet; browser:tWebBrowser; f:TfBrowser; // die Instanz des Frames item:tTreeNode; begin sheet:=TTabSheet.Create(fm); // fm=Hauptformular (FormMain) sheet.PageControl:=pcBrowser; pcBrowser.ActivePage:=sheet; f:=TfBrowser.create(sheet); f.Parent:=sheet; f.Align:=alClient; with f.Browser do begin OnTitleChange:=TitleChange; OnBeforeNavigate2:=BeforeNavigate; OnDownloadBegin:=DownloadBegin; OnDownloadComplete:=DownloadComplete; OnNewWindow2:=NewWindow; OnProgressChange:=ProgressChange; if cbNewBrowserIsOffline.checked then Offline:=true end; // Eintrag in Übersichtsliste für die Seite item:=tvBrowserSheets.Items.AddNode(nil,nil,'',nil,naAdd); end;
Delphi-Quellcode:
Ich nehme stark an, daß ich da einen Fehler mit dem Erzeugen/Freigeben gemacht habe. Findet jemand den Fehler? Ich habe zum Test mal das f.Free hier oben weg gemacht (da ja ein Owner bei seiner Auflösung dafür sorgt, daß seine "Kinder" auch gelöscht werden), aber da kams immer noch.
procedure CloseBrowserWindow(index:integer);
var pc:tTabSheet; f:tfBrowser; begin with fm do try pc:=pcBrowser.Pages[index]; if index=pcBrowser.PageCount-1 then pcBrowser.ActivePageIndex:=index-1; f:=(pc.Controls[0] as tfBrowser); f.Free; pc.Free; pcBrowser.Visible:=pcBrowser.PageCount>0; tvBrowserSheets.Items.Delete(tvBrowserSheets.Items[index]); // Listeneintrag dazu löschen except halt end end; Gruß an die Frau |
Re: Problem mit dynamischem Erstellen und Freigeben
Ich habe noch weiter getestet. Mittlerweile konnte ich das Problem (hoffentlich) etwas eingrenzen; sobald ich das TabControl verlasse (also ein anderes Control den Fokus bekommt), erhalte ich die Zugriffsverletzung.
So langsam glaube ich, es hat mit der angezeigten Seite zu tun. Als Beispiel ![]() Ich habe bei anderen Threads, wo es um tWebBrowser ging, immer wieder das OLEDocument im Code gesehen. Muß ich darüber den WebBrowser freigeben, nicht über free? Außerdem: woran erkenne ich, daß das Browserfenster von der angezeigten Seite geschlossen würd, zum Beispiel ein PopUp, das sich per Javascript schließt? Ein OnClose gibt es nämlich nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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