SpTBXLib spTBXTabControl komponenti ile oluşturulmuş bir web browser formum var.
Bu komponenti tercih etmemin nedeni TabClose imkanı.
WebBrowser'in OnNewWindow2 eventine eklediğim birkaç satırla; yeni sayfaları yeni bir browser form oluşturup ve bu formu TabSheet'e gömerek programın ana formunda gösteriyorum.
Fakat yeni açtığım Tab'ı kapatsam da webbrowser'in hafızada kapladığı yer boşaltılmıyor.
Bir süre kullanımdan sonra program vahşet derecede hafıza kaplamaya başlıyor.
Yeni Tab için;
Kod: Tümünü seç
procedure TBrowserForm.BrowserNewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
Var NTab:TSPTBXTABITEM;
BrwForm:TBrowserForm;
begin
NTab := Form1.STC1.Add('Yeni Sekme');
ntab.OnTabClose := Form1.SpTBXTabItem1.OnTabClose;
BrwForm:=TBrowserForm.Create(NTab);
BrwForm.Parent := TWinControl(Form1.STC1.GetPage(Ntab));
BrwForm.Align := AlClient;
BrwForm.BorderStyle := BSNone;
BrwForm.Visible := True;
Form1.STC1.ActivePage := Form1.STC1.GetPage(NTab);
ppdisp := BrwForm.Browser.Application;
end;
Kod: Tümünü seç
procedure TForm1.SpTBXTabItem1TabClose(Sender: TObject);
var i:integer;
Control:TControl;
Begin
for i:=0 to stc1.GetPage(Sender as TSPTBXTabItem).ControlCount-1 do
begin
Control:=stc1.GetPage(Sender as TSPTBXTabItem).Controls[i];
if Control.ClassName ='TBrowserForm' then
begin
(Control as TBrowserForm).Close;
FreeAndNil(Control);
end;
end;
STC1.Items.Remove(Sender as TSpTbxTabItem);
stc1.GetPage(Sender as TSPTBXTabItem).Free;
(sender as TSpTbxTabItem).Free;
End;
Kod: Tümünü seç
procedure TBrowserForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Browser.Navigate('About:Blank');
Browser.Destroy;
Action:=CaFree;
end;
Browser.Destroy; yerine Browser.Free de kullandım ama bişey değişmedi.
TWEBBrowser yerine TEmbeddedWB'de de aynı sorunu yaşadım.
İnternette uzun zamanları bu sorunun çözümünü arayarak geçirdim, çeşitli test uygulamaları var (FastMM, MemCheck vs.)
ama bunların hem kullanım açıklaması yeterli değil, hemde sadece Memory Leak'ları gösteriyorlar.
Sorunu çözmekle ilgili bir fonksiyona sahip değiller.
Sorunu görebileceğiniz kaynak kodu burada.
Bu konuda yardımlara çok müteşekkir olacağım..
Teşekkürler, saygılar..