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


Автор: AlanFree 10.1.2007, 12:25
Код

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  Tab:=TTabSheet.create(PageControl1);
  Tab.PageControl:=PageControl1;
  Tab.Caption:='New';
  PageControl1.ActivePageIndex:=PageControl1.PageCount-1;
  wb:=twebbrowser.create(self);
  wb.ParentWindow:=Tab.Handle;
  ppDisp:=wb.DefaultDispatch;
end;


Вот код который я использую, но на новой вклаке webbrowser не растянут на всю вкладку как на первой, и на второй вкладке нету CoolBar  и ToolBar как на первой, как их поместить на новую вкладку?

Автор: aktuba 10.1.2007, 14:40
Код

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  Tab:=TTabSheet.create(PageControl1);
  Tab.PageControl:=PageControl1;
  Tab.Caption:='New';
  PageControl1.ActivePageIndex:=PageControl1.PageCount-1;
  wb:=twebbrowser.create(self);
  wb.ParentWindow:=Tab.Handle;
  wb.Align := alClient;
  CoolBar.Parent := Tab;
  ToolBar.Parent := Tab;
  ppDisp:=wb.DefaultDispatch;
end;


Только я бы так не делал... Я бы использовал TabControl, а все данные хранил бы в TList и загружал по мере необходимости...

Автор: MetalFan 10.1.2007, 14:42
parent поменяй

Автор: AlanFree 10.1.2007, 15:54
Цитата(aktuba @  10.1.2007,  14:40 Найти цитируемый пост)
код Pascal/Delphi1:2:3:4:5:6:7:8:9:10:11:12:13:14:procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;  var ppDisp: IDispatch; var Cancel: WordBool);begin  Tab:=TTabSheet.create(PageControl1);  Tab.PageControl:=PageControl1;  Tab.Caption:='New';  PageControl1.ActivePageIndex:=PageControl1.PageCount-1;  wb:=twebbrowser.create(self);  wb.ParentWindow:=Tab.Handle;  wb.Align := alClient;  CoolBar.Parent := Tab;  ToolBar.Parent := Tab;  ppDisp:=wb.DefaultDispatch;end;highlightSyntax('delphi_zMzOWJ','delphi');highlightSyntax('delphi_zMzOWJ','delphi');Только я бы так не делал... Я бы использовал TabControl, а все данные хранил бы в TList и загружал по мере необходимости...


wb не разворачивается на всю закладку smile , на рервой закладке у меня еще ProgressBar и StatusBar на вторую закладку я их пермещаю
Код

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  Tab:=TTabSheet.create(self);
  Tab.PageControl:=PageControl1;
  Tab.Align:=alClient;
  Tab.Caption:='New';
  PageControl1.ActivePageIndex:=PageControl1.PageCount-1;
  wb:=TWebBrowser.Create(self);
  wb.ParentWindow:=Tab.Handle;
  wb.Align:=alClient;
  ppDisp:=wb.DefaultDispatch;
  wb.Width:=Tab.Width;
  wb.Height:=Tab.Height;
  wb.OnProgressChange := WebBrowser1ProgressChange;
  wb.OnStatusTextChange := WebBrowser1StatusTextChange;
  prb:=TProgressBar.create(self);
  prb.Parent:=Tab;
  prb.Align:=alClient;
  stb:=TStatusBar.create(self);
  stb.Parent:=Tab;
  stb.Align:=alClient;
end;


но в итоге wb не разворачивается на всю закладку, и ProgressBar находится вверху и не растянутый, и еще как мне сделать что бы на каждой вкладке в этих новых ProgressBar и StatusBar отображлся статус именно той закладке на которой они находятся!???

Автор: AlanFree 11.1.2007, 16:37
aktuba,  спасибо, хотел поставить Вам плюсик, но у меня меньше чем 100 постов, и я не могу ставить плюстки smile

Автор: aktuba 11.1.2007, 16:53
=))) да ничего... я тебе лишь направление дал, развивай сам. но учти, идешь не в ту сторону. после 10-15 закладок программа в памяти будет места занимать больше чем вся система.

Лучше создай список (TList) и в нем храни данные, вместо TPageControl используй TTabControl и подгружай данные автоматически при переключении закладок. Так дополнительные расходы памяти будут намного меньше, но и это не самый лучший вариант...

Автор: Ibragim 12.1.2007, 14:42
Цитата(aktuba @  11.1.2007,  16:53 Найти цитируемый пост)
 я тебе лишь направление дал, развивай сам. но учти, идешь не в ту сторону.


Не согласен. Так тоже думал, качал через TIdHttp, потом показывал. Оказался в ситуации когда с браузерами гораздо удобнее (браузер сам рисунки подгружает, скрипты выполняет). Провел експеримент. Пока сам браузер как объект не ОТОБРАЖАЕТСЯ на экране (Browser.Hide), все нормально. 

Пример. Celeron 1.7 / 256 ОЗУ. 400 браузеров все нормально работает, выделение памяти на процесс 40 Kb , общее 321 Kb. Показываю ОДИН браузер в каждый момент времени. (Цикл с проверкой Browser.ReadyState)

Автор: aktuba 12.1.2007, 17:03
Ibragim, ты не понял. Про браузер я ничего не говорил. Я говорил про постоянно создаваемые закладки, постоянно создаваемый новый браузер и т.д. Т.е. при 10 открытых закладках у него в памяти 10 WebBrowser, 10 TCoolbar, 20 TToolBar, 100 TToolButton и т.д. Это неправильно, когда все это можно оставить в единственном экземпляре и обрабатывать динамически.

Автор: Ibragim 12.1.2007, 21:33
Ыыыы, тада согласен. Создавать и удалять нельзя ни в коем разе. Мало того что это долго (в приведенной конфигурации 400 браузеров создаются секунд пять, но хоть один раз smile ), так еще и динамическое создание/удаление приводит к утечке памяти. 99 процентов что сами браузеры. Хотя есть 1% что я у себя не все выловил smile 

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