Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Уничтожение вкладок TabSheet.


Автор: Borland_Delphi_6 30.3.2005, 15:11
Пишу веб-браузер для своего сайта. Почти написал поддержку вкладок, создаю их таким вот образом:

Код
procedure TS0ftNavigator.CreateTab(TabUrl:String; Title:String = 'EDb$tf%fdg68][|');
var
TabSheet:TTabSheet;
Url:String;
begin
TabSheet:=TTabSheet.Create(Self);
TabSheet.PageControl:=PageControl1;
if Title = 'EDb$tf%fdg68][|' then
TabSheet.Caption:='[Blank Page]' else TabSheet.Caption:=Title; 
PageControl1.ActivePage:=TabSheet;
WebBrowser1:=TWebBrowser.Create(self);
TOleControl(WebBrowser1).Parent := PageControl1.ActivePage;
WebBrowser1.OnBeforeNavigate2:=Wb.OnBeforeNavigate2;
WebBrowser1.OnDocumentComplete:=WB.OnDocumentComplete;
WebBrowser1.OnDownloadBegin:=Wb.OnDownloadBegin;
WebBrowser1.OnProgressChange:=Wb.OnProgressChange;
WebBrowser1.OnStatusTextChange:=Wb.OnStatusTextChange;
WebBrowser1.OnTitleChange:=WB.OnTitleChange;
WebBrowser1.Align:=alClient;
if TabUrl <> '' then WebBrowser1.Navigate(TabURL);
end;


Вопрос: как правильно закрыть вкладку? Пробовал несколько способов - AV. smile

Автор: Vit 30.3.2005, 16:07
А как ты ищешь какой TWebBrowser использовать? Он же у тебя на каждой странице...

ИМХО надо как минимум иметь доступ именно к нужному TWebBrowser


Код

procedure TS0ftNavigator.CreateTab(TabUrl:String; Title:String = 'EDb$tf%fdg68][|');
var
TabSheet:TTabSheet;
Url:String;
begin
TabSheet:=TTabSheet.Create(Self);
TabSheet.PageControl:=PageControl1;
if Title = 'EDb$tf%fdg68][|' then
TabSheet.Caption:='[Blank Page]' else TabSheet.Caption:=Title; 
PageControl1.ActivePage:=TabSheet;
WebBrowser1:=TWebBrowser.Create(self);
TOleControl(WebBrowser1).Parent := PageControl1.ActivePage;
TabSheet.tag:=integer(WebBrowser1);
WebBrowser1.OnBeforeNavigate2:=Wb.OnBeforeNavigate2;
WebBrowser1.OnDocumentComplete:=WB.OnDocumentComplete;
WebBrowser1.OnDownloadBegin:=Wb.OnDownloadBegin;
WebBrowser1.OnProgressChange:=Wb.OnProgressChange;
WebBrowser1.OnStatusTextChange:=Wb.OnStatusTextChange;
WebBrowser1.OnTitleChange:=WB.OnTitleChange;
WebBrowser1.Align:=alClient;
if TabUrl <> '' then WebBrowser1.Navigate(TabURL);
end;


Теперь при разрушении:

Код

TWebBrowser(PageControl1.ActivePage.tag).free;
PageControl1.ActivePage.free;

Автор: rsm 30.3.2005, 16:13
Так пробовал?
Код

frmMain.RemoveControl(frmMain.FindChildControl('Your_Control_Name'));

Автор: Borland_Delphi_6 31.3.2005, 00:44
Самое интересное, что доступ к браузеру идет очень легко, просто WebBrowser1. Причем в зависимости от вкладки все нормально передается нужному браузеру... smile

Ну а примеры посмотрю.

Автор: Vit 31.3.2005, 03:28
Цитата(Borland_Delphi_6 @ 30.3.2005, 15:44)
Самое интересное, что доступ к браузеру идет очень легко, просто WebBrowser1. Причем в зависимости от вкладки все нормально передается нужному браузеру... 



Чего-то ты там перемудрил... События то происходят на нужном браузере а всё остальное... сомнительно... Никогда так нельзя делать... Даже если всё кажется что работает - нарвёшься на AV который будет сыпаться часто и густо и непонятно откуда...

Автор: Borland_Delphi_6 31.3.2005, 10:17
Блин, может я конечно чего-то путаю... Хотя скорее всего ты прав smile Если хочешь, могу код выслать, правда там все еще страшнее будет smile

Автор: Borland_Delphi_6 31.3.2005, 16:05
Оба варианта в AV smile

Автор: Vit 31.3.2005, 23:40
Цитата(Borland_Delphi_6 @ 31.3.2005, 07:05)
Оба варианта в AV 



Переменную WebBrowser1 вообще убей... Вместо неё везде используй:

TWebBrowser(PageControl1.ActivePage.tag).
Добавлено @ 23:40
Если не получится, я тебе код простейшего многооконного браузера напишу...

Автор: Borland_Delphi_6 1.4.2005, 16:33
Интересная ситуация наблюдается: код Vit'a в принципе работает, но очень глючно. Допустим: при запуске браузера создается одна вкладка. Мы вручную создаем еще одну. Переходим на первую вкладку и нажмимаем на кнопку "Закрыть". Закрывает. В остальных случаях - AV smile

Автор: Vit 1.4.2005, 18:59
Ответил здесь: http://forum.vingrad.ru/index.php?showtopic=47103

Обрати внимание что в примере НЕТ глобальных переменных для TWebBrowser и т.п.

Автор: Borland_Delphi_6 4.4.2005, 17:21
Ну что сказать - плюсик! И большие спасибо, буду изучать! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)