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:
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;
Zum Schließen des Tabs habe ich Folgendes fabriziert:
Delphi-Quellcode:
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;
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.
Gruß an die Frau