Конференция "WinAPI" » EmbeddedWB1NewWindow2 с Paramstr +ppdisp [D6, WinXP]
 
  • s2004 (04.10.12 19:40) [0]
    в embeddedwb имеется событие  EmbeddedWB1NewWindow2 необходимое для открытия нового окна при кликание сылки при этом подставляется урл открывается новое окно, но при закрытие родительской формы всё тоже закрывается решил о необходимости запускать копию программы с подстановкой урла тут в некоторых форумах были советы с испрользованием  Paramstrp и shellexecute.
    перепрообвал многие, но только получилось так, что запускается копия и плюс ещё iexplorer ...

    Код вначале который был

    procedure TForm1.EmbeddedWB1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
    var Cancel: WordBool);
    var NewWindow:TForm1;
    begin

    NewWindow := TForm1.Create(parent);
    SetWindowLong(NewWindow.Handle, GWL_EXSTYLE, GetWindowLong(NewWindow.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
    NewWindow.Show;
    ppDisp:=NewWindow.EmbeddedWB1.DefaultDispatch;


    коды некоторые которые перепробовал меня смущает, что получается в них я не задействовал
    парметр заданый в событие это var ppDisp: IDispatch;

    procedure TForm1.EmbeddedWB1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
     var Cancel: WordBool);
     var
       url,ts: string;
      NewWindow:TForm1;

    begin
     with TRegistry.Create do
         try
           rootkey := HKEY_CLASSES_ROOT;
           OpenKey('\htmlfile\shell\open\command', False);
           try
             ts := ReadString('');
           except
             ts := '';
           end;
           CloseKey;
         finally
           Free;
         end;
       if ts = '' then Exit;

    //winexec (Pchar('C:\Program Files\Net\net.exe'), SW_SHOWNORMAL);
     
    ts := Copy(ts, Pos('\"', ts) + 1, Length(ts));
       ts := Copy(ts, 1, Pos('\"', ts) - 1);
       ShellExecute(3, 'open', PChar('ppDisp:=NewWindow.EmbeddedWB1.DefaultDispatch'), PChar(url), nil, SW_SHOW);
    //  ShellExecute( handle, 'net', PChar('C:\Program Files\Net\net.exe'), PChar(url), nil, SW_SHOW);
       
    //ppDisp := Self.EmbeddedWB1.Application;
     end;

  • Dimka Maslov © (07.10.12 09:46) [1]
    1. Разбриаемся, где же у нас строка с урлом.
    2. Делаем ShellExecute/CreateProcess/WinExec  на исполняемый файл передавая в качестве параметра урл.
    3. Где-нибудь (например в OnCreate главной формы) проверяем параметры запуска приложения через ParamStr и если там есть что, считаем, что это урл и открываем его.
    4. ????
    5. PROFIT
  • Styx (07.10.12 15:31) [2]
    Проблема будет, если новое окно будет открываться с методом POST. В таком случае без передачи IDispatch вроде не обойтись...
  • s2004 (07.10.12 18:03) [3]
    давайте порассуждаем
    1.

    var    
     newForm:TFormSimpleWB;



    не нужен? ведь с помощью shellexecute мы должны запустить копию программы с диска по умолчанию в c:\program files\net\net.exe пробовал разные варианты
    перечисляю  выше в теме..
    но это запустит только копию программы с установочной папки а, как сотворить подстановку урла?
    Куда прикрутить ppdisp?
    параметру ppDisp присвоить интерфейсную ссылку на этот экземпляр вот эта фраза в моём случае?
    или надо обрабатывать событие onbefore? хотя в этом случае не будет открытие нового окна, а сылка откроется в основном окне...
  • Styx (07.10.12 23:46) [4]

    > Куда прикрутить ppdisp?

    Можно создать новое окно своего браузера и передать его ppDisp. Думаю, IE так и делает. Можно ли запустить другую программу, от неё получить IDispatch и присвоить его... не знаю. Я так не умею, по крайней мере.
  • s2004 (07.10.12 23:52) [5]
 
Конференция "WinAPI" » EmbeddedWB1NewWindow2 с Paramstr +ppdisp [D6, WinXP]
Есть новые Нет новых   [134430   +3][b:0][p:0.001]