![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как реализовать следующее?
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 никак? :)))