-
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]