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

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

Как реализовать следующее?


ZeFiR ©   (2005-12-25 00:47:00) 

Нужно сделать мультиоконный браузер... как сделать так чтоб при открытии новой страницы открывалась новая вкладка с TWebBrowser?


SergP.   (2006-01-03 14:21:00) [1]

А вообще лучше делать не в Pagecontrol, а более по человечески - MDI
ИМХО конечно....


SergP   (2006-01-02 12:28:00) [2]


> ZeFiR ©   (01.01.06 15:38) [6]
> Че-то не катит... Кучу ошибок вылетает...


Какие ошибки?
Да и я не приводил полный код, а только принцип.
Сделай процедуры методами твоей формы, типа если форма Form1, то не
procedure closepage;
а
procedure TForm1.closepage;

причем все где используются поля этой формы.

И вообще, мыль на sergp5566 [собака] rambler.ru, пришлю рабочий код. (правда старый и некрасивый), но приведешь в порядок сам.


ZeFiR   (2006-01-01 15:38:00) [3]

Че-то не катит... Кучу ошибок вылетает...


SergP   (2005-12-25 16:07:00) [4]

Вот небольшой пример... А как засунуть туда Combobox думай сам.

Значит для начала опишем наш новый класс, типа браузер на вкладке...

type
   TCustomTabSheet = class(TTabSheet)
 public
   WB: TWebBrowser;
   constructor create(AOwner:TComponent); override;
   destructor destroy; override;
end;


А вот это будут конструктор и деструктор.
В конструкторе вызываем унаследованный конструктор, т.е. создаем вкладку, затем создаем браузер и делаем наш объект его родителем.
Затем растягиваем браузер по всей вкладке.


constructor TCustomTabSheet.create(AOwner:TComponent);
begin
 inherited create(AOwner);
 WB:=TWebbrowser.Create(self);
 TOleControl(WB).Parent:=self;
 WB.Align:=alClient;
 // далее делаем другие нужные нам операции по инициализации нашей фигни.
 // например установим обработчик  события OnNewWindow для браузера.
 WB.OnNewWindow2:=NewWindow2;

end;

destructor TCustomTabSheet.destroy;
begin
 FreeAndNil(WB);
 inherited destroy;
end;


Вот как будет выглядеть обработчик события OnNewWindow2 у браузера.


procedure NewWindow2(Sender: TObject;
 var ppDisp: IDispatch; var Cancel: WordBool);
begin
 ppDisp:=newwin.WB.Application;
end;


А вот так буде у нас выглядеть функция, которая создаст новую вкладку, и прицепит ее к имеющемуся pagecontrol'у

function newwin:TCustomTabSheet;
begin
 Result:=TCustomTabSheet.create(self);
 Result.pagecontrol:=pagecontrol1;
end;


А это у нас открытие УРЛа в браузере на активной вкладке:

procedure TForm1.WBnavigate(URL:string);
var
 Sheet:TCustomTabSheet;
begin
 if pagecontrol1.PageCount>0 then
 begin
   Sheet:=pagecontrol1.ActivePage as TCustomTabSheet;
   Sheet.WB.Navigate(Combobox1.Text);
 end;
end;


А это закрытие (уничтожение) активной вкладки.

procedure closepage;
var
 Sheet:TCustomTabSheet;
begin
 if PageControl1.PageCount>0 then
 begin
   Sheet:=pagecontrol1.ActivePage as TCustomTabSheet;
   Sheet.Free;
 end;
end;


Ну ИМХО достаточно. Далее сам думай...


ZeFiR   (2005-12-25 13:28:00) [5]

Мда... и еще вместе с TWebBrowser чтоб создавалась TComboBox...


ZeFiR   (2005-12-25 13:26:00) [6]

У меня не получается в TPageControl динамически создавать TWebBrowser... Пишет, что такой мол уже существует... Примерчик кода киньте плиз


Klim   (2005-12-25 12:09:00) [7]

Создай MDI приложение, каждая вкладка это форма, при нажатии на ссылку добавляй форму, останется только их упорядочить(как опере например)


FrykT   (2005-12-25 02:48:00) [8]

TPageControl никак? :)))


Наверх

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