Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как связать EmbeddedWB1NewWindow2 с Paramstr(2), событие NewWindow2 + Paramstrp + ppdisp  
V
    Опции темы
Чучмек
Дата 12.10.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Этот код не имеет практического значения. Поскольку требует второго (скрытого) WB.
С дополнительным WB все делается гораздо проще - через OnBeforeNavigate2.
Однако, код показывает, как происходит открытие новой страницы.
Через передаваемый в ppDisp, события OnNewWindow2, интерфес wb.DefaultDispatch, запрашивается ряд интерфейсов.
В том числе ITargetFramePriv/ITargetFramePriv2.
Для перехвата запроса интерфейсов  используем  TMyIC (метод  QueryInterface).
При запросе ITargetFramePriv/ITargetFramePriv2 передаем интерфейс от TTargetFramePriv/TTargetFramePriv2.
При запросе остальных интерфейсов, передаем оригинальные интерфейсы от WB2.
Через ITargetFramePriv/ITargetFramePriv2 происходит передача url в новую страницу.
ITargetFramePriv - в старых версиях IE (метод NavigateHack), ITargetFramePriv2 (метод AggregatedNavigation2) - в новых.
TTargetFramePriv/TTargetFramePriv2 - служат для перехвата передачи url.
В ITargetFramePriv.NavigateHack url передается в виде WideString.  (передаем в CallbackProc, и меняем на about:blank)
В ITargetFramePriv2.AggregatedNavigation2 url передается в виде интерфейса IUri (в CallbackProc передаем строку полученную через pUri.GetAbsoluteUri, а вместо pUri передаем интерфейс от TUri)  

При желании можно написать заглушки для необходимых интерфейсов. Тогда второй WB не понадобиться.  

 


Это сообщение отредактировал(а) Чучмек - 12.10.2012, 12:21


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 12.10.2012, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(Чучмек @  9.10.2012,  20:22 Найти цитируемый пост)
Это тоже легко решается. 

Чтобы не быть голословным...



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  ppppp2.7z 175,09 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 13.10.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



попробовал последний архив, но значки просто так же, как у меня в программе отражаются- без содержимого? а я вроде докуче спрашивал чтобы именно с отражением сылки, так выбрать нужное окно легче. скомпиллировалось без проблем ошибки нет?

Добавлено @ 18:00
коды привидённые в теме желательно поместить в FAQ или DRKB? а то там очень бедно по поводу брузера.

Чучмек? архивы одинаковые....

Это сообщение отредактировал(а) s2004 - 13.10.2012, 18:10
PM MAIL   Вверх
Чучмек
Дата 16.10.2012, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(s2004 @  13.10.2012,  17:56 Найти цитируемый пост)
Чучмек? архивы одинаковые....

Да нет, отличаются настолько, насколько 
Цитата
легко решается
.

Цитата(s2004 @  13.10.2012,  17:56 Найти цитируемый пост)
попробовал последний архив, но значки просто так же, как у меня в программе отражаются- без содержимого? а я вроде докуче спрашивал чтобы именно с отражением сылки, так выбрать нужное окно легче

Это ты в другой теме спрашивал.
...Ну хорошо.
Элементарно Уатсон. smile 

Я дурак, обещаю исправится smile  

Это сообщение отредактировал(а) Чучмек - 17.10.2012, 09:36


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 16.10.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



запустил последний архив. значки, как отражались Form2 так и отражаются как и у меня. выбрать нужный значок нельзя -  не открыв его и содержимое заглавия страницы не отражено. 

Это сообщение отредактировал(а) s2004 - 16.10.2012, 20:57
PM MAIL   Вверх
Чучмек
Дата 16.10.2012, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



user posted image
Разве ни это надо?



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 16.10.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



да надо так, но у меня всё скомпилировалось, а этого нет -только form2 и всё.
хорошо бы, если вместе form 2 отражалась и сылка страницы.


Это сообщение отредактировал(а) s2004 - 16.10.2012, 21:04
PM MAIL   Вверх
Чучмек
Дата 16.10.2012, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Aero в винде включено?


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 16.10.2012, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



у меня виста basic, надо и чтобы в ХР работало.

Это сообщение отредактировал(а) s2004 - 16.10.2012, 21:12
PM MAIL   Вверх
Чучмек
Дата 16.10.2012, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(s2004 @  16.10.2012,  21:07 Найти цитируемый пост)
у меня виста basic, надо и чтобы в ХР работало.

Да не, это семерошный наворот.
Он и так, сам по себе работает. Завтычил.Исправлюсь.Посмотрю,что можно сделать.

Добавлено @ 21:36
Добавь обработчик OnTitleChange
Вот тебе еще вариант.

Это сообщение отредактировал(а) Чучмек - 17.10.2012, 12:07

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ppppp4.7z 176,77 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 17.10.2012, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



вот то, что практически нужно (правда  без миниатюр) Чучмек благодарю smile.
выложу код думаю всем будет интересно

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  form_count:cardinal=0;



function NewForm:Idispatch;
procedure DecFormCount;
implementation

{$R *.dfm}

function NewForm:Idispatch;
begin
 with TForm2.Create(nil)do
  begin
  caption:=FormCaption;
  visible:=true;
  result:=WebBrowser1.DefaultDispatch;
  inc(form_count);
  end;
end;

procedure DecFormCount;
begin
dec(form_count);
if form_count=0 then application.Terminate;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
NewForm;
end;

end.

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
      var Cancel: WordBool);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WebBrowser1TitleChange(Sender: TObject;
      const Text: WideString);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

const FormCaption='Moй браузер';

implementation
 uses unit1;

{$R *.dfm}



procedure TForm2.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate(edit1.Text);
end;

procedure TForm2.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
 ppDisp:=NewForm;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DecFormCount;
end;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
Params.WndParent:=GetDesktopWindow;
end;

procedure TForm2.WebBrowser1TitleChange(Sender: TObject;
  const Text:WideString );
begin
Caption:=FormCaption+':'+Text;

end;

end.






PM MAIL   Вверх
s2004
Дата 17.10.2012, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



у меня код
Код

program net;

uses
  Forms,windows,
  Unit1 in 'Unit1.pas' {Form1},
  adCpuUsage in 'adCpuUsage.pas',
  Unit3 in 'Unit3.pas' {Form3},
  MSHTML_TLB in 'c:\program files\borland\bds\4.0\Imports\MSHTML_TLB.pas',
  Unit16 in 'Unit16.pas' {Form16},
  Unit9 in 'Unit9.pas' {Form9},
  Unit23 in 'Unit23.pas' {Form23},
  Unit20 in 'Unit20.pas' {Form20},
  Unit10 in 'Unit10.pas' {Form10};

{$R *.res}

begin
//  Application.ShowMainForm:=false;
  Application.Initialize;
//  Application.Title := '';
//  Application.ShowMainForm:=false;
  Application.HelpFile := 'D:\2005\help.hlp';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm23, Form23);
  Application.CreateForm(TForm20, Form20);
  Application.CreateForm(TForm9, Form9);
  Application.CreateForm(TForm16, Form16);
  Application.CreateForm(TForm10, Form10);
  ShowWindow(Application.Handle, SW_HIDE);
  Application.Run;
end.



если 

ввожу
Код


Application.ShowMainForm:=false;
ругается на разные типы boolen и integer


поэтому в твоём архиве компиляция без проблем и всё работает, но у меня пока не работает.
PM MAIL   Вверх
Чучмек
Дата 18.10.2012, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Значит у тебя, в каком то модуле, до implementation есть что-нибудь типа
Код

var false:integer;
или
Код

 const false=0;

Если не хочешь исправлять (а НАДО) - напиши
Код

Application.ShowMainForm:=1=0;



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
s2004
Дата 18.10.2012, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



да это я нашёл убирал, подстовлял твой код в свою прогу, так она hidden получается в диспечере висит, а так не видно.

событие formcreate NewForm; сделала скрытым браузер при заремачивание начинает работать, но неполностью правильно. запускается прога- клик на сылку открывается новое окно при этом отображается название каждое своё в каждом окне, но вместо например двух значков проги на панели задач видны 3 значка.

Это сообщение отредактировал(а) s2004 - 18.10.2012, 20:58
PM MAIL   Вверх
Чучмек
Дата 18.10.2012, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



А ты не понял зачем это?
Как в примере?
Основное окно приложения делаем не видимым 
Код

 ShowWindow(Application.Handle, SW_HIDE);

Из панели задач исчезает кнопка "Project1"
Главную форму приложения делаем невидимой / скрытой 
Код

Application.ShowMainForm:=false;

Главная форма у нас ничего не содержит.
В событии главной формы OnCreate, создаем (Через TFormN.Create) видимую форму - окно браузера.
При закрытии окна браузера, завершение приложения НЕ ПРОИСХОДИТ.
Этим решаем проблему, с которой ты начинал эту тему.
 

Это сообщение отредактировал(а) Чучмек - 18.10.2012, 20:55


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.