Einzelnen Beitrag anzeigen

Benutzerbild von Thunderchild
Thunderchild

Registriert seit: 12. Nov 2003
Ort: Nohra
139 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit dynamischem Erstellen und Freigeben

  Alt 5. Apr 2004, 08:09
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
Das letzte Schöne, das in C geschrieben wurde, war Schuberts 9. Sinfonie.
Meine Softwareseite (Link aktualisiert am 13.12.2006).
  Mit Zitat antworten Zitat