Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как нужно удалять 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо