![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как нужно удалять TwebBrowser ? [D7, Win2k]
bloodman © (2005-02-11 17:45:00)В рантайме создаю несколько TwebBrowser , для проверки устанавливаю им parentWindow на хендл панели. Браузеры появляются но не удаляются когда я вызываю метод Destroy .. как правильно удалять ?
bloodman (2005-02-11 20:06:00) [1]Почему не устраивает , усраивает только free это и есть destroy только с проверкой на nil и все.. Какой конструктор? Те что у моих классов? Для того чтобу создать TWebBrowser и присвоить другим переменным нужные значения..
ТехникПТО (2005-02-11 20:01:00) [2]А чем тебя Free не устраивает?? И зачем тебе constructor??
Я делал массив браузеров и делал Free нужному...
Но я делал создание на TabSheet... ну и контрол интерфеса конечно же на него при OnNewWindow...
bloodman (2005-02-11 19:21:00) [3]послн того как написал override после деструкторов удаляются... НО память не освобождается! :(( Диспетчере задач :( После работы она занимает 60 мегабайт! :( Подскажите что не так .:(
bloodman (2005-02-11 18:30:00) [4]Вообщем дело обстоит так: Есть класс(TBrunchScaner) , он содержит другой класс(TObjectScaner) , последний содержит TwebBrowser
TBrunchScaner = class
constructor Create(...;CallBack: TCAllbackunc);
destructor Destroy();
...
protected
WebBrowser : TWebBrowser;
ObjectScaners : array of TObjectScaner;
Call : TCAllbackunc;
....
private
end;
constructor TObjectScaner.Create(ID1:Integer;CallBack : TCAllbackunc);
begin
Webbrowser:=nil;
Call:=CallBack;
ID:=ID1;
WebBrowser:=TWebBrowser.Create(nil);
Webbrowser.ParentWindow:=MainForm.Form.tsS.Handle;
Webbrowser.Align:=alTop;
Webbrowser.Left:=Random(400);
Webbrowser.Top:=Random(400);
end;
destructor TObjectScaner.Destroy;
begin
Webbrowser.Free;
inherited;
end;
constructor TBrunchScaner.Create(...;CallBack: TCAllbackunc);
begin
Webbrowser:=nil;
Call:=CallBack;
WebBrowser:=TWebBrowser.Create(nil);
...
end;
destructor TBrunchScaner.Destroy;
begin
WebBrowser.Destroy;
inherited;
end;
procedure TBrunchScaner.Destroyer(ID :Integer);
begin
//MessageDlg('Destroy!'+IntToStr(ID),mtInformation,[mbOK],0);
ObjectScaners[ID].Free;
ObjectScaners[ID]:=nil;
ScanersCount:=ScanersCount-1;
ProgressBar.Position:=ProgressBar.Position+1;
end;
Вообщем есть метотд у TBrunchScaner под названием scan суть его сводится к тому что он в цикле создает несколько экземпляров TObjectScaner вот так :
For i := 0 to n do
begin
ar[i]:=TObjectScaner.create(i,destroer);
ar[i].scan(..)
...
end;
После отработки метода scan он в конце через Callback вызывает Destroyer , который должен уничтожить объект (и webbrowser соответственно) . Все вроде отрабатывает , но IE не пропадает с формы и при следующем вызове Create появляется еще один IE :(
begin...end (2005-02-11 18:09:00) [5]> bloodman © (11.02.05 17:45)
ParentWindow устанавливать не нужно. Как и для других динамически создаваемых компонентов, для экземпляра TWebBrowser'а нужно указать Parent'а и (необязательно) Owner'а. В случае TWebBrowser напрямую использовать свойство Parent: TWinControl не удастся, т.к. в самом TWebBrowser есть свойство Parent: IDispatch. Чтобы назначить родителя WebBrowser'у, можно обратиться к свойству Parent предка: TControl(WebBrowser).Parent := ...
Александр Иванов (2005-02-11 17:58:00) [6]bloodman © (11.02.05 17:45)
Код покажи, и во всяком случае лучше пользовать Free