запустить копию проги при кликание на сылку в EmbeddedWB (типа webbrowser)
Вот вопрос возник embeddedwb оnкрываем ссылку открывается новое окно и например, если я закрою первичное окно то закроется и дочернее окно, а возможен вариант, что бы при закрытие родительского окна не происходило закрытие и дочернего. Судя по всему iexplorer запускает вторую копию программы и туда подставляет урл. Как мне сделать, что бы при кликание на ссылку запуск проходил именно второй копии проги, плюс в строку адреса подставлялся урл ссылки?
Код срабатывающий при открытии ссылки внизу.
Код:
procedure TForm1.EmbeddedWB1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
var
NewWindow:TForm1;
begin
cancel := false; // новое значение
NewWindow := TForm1.Create(parent);
try
finally
SetWindowLong(NewWindow.Handle, GWL_EXSTYLE, GetWindowLong(NewWindow.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
NewWindow.Show;
ppDisp:=NewWindow.EmbeddedWB1.ControlInterface;
end;
end;
var Cancel: WordBool);
var
NewWindow:TForm1;
begin
cancel := false; // новое значение
NewWindow := TForm1.Create(parent);
try
finally
SetWindowLong(NewWindow.Handle, GWL_EXSTYLE, GetWindowLong(NewWindow.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
NewWindow.Show;
ppDisp:=NewWindow.EmbeddedWB1.ControlInterface;
end;
end;
Код:
procedure TForm1.EmbeddedWB1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
var
url,ts: string;
NewWindow:TForm1;
// ovURL: OleVariant;
// var doc:IHtmlDocument2;
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;
//if
// assigned(embeddedwb1.ControlInterface.Document)
// then embeddedwb1.ControlInterface.Document.QueryInterface(IHtmlDocument2,doc);
//NewWindow := TForm1.Create(parent);
//SetWindowLong(NewWindow.Handle, GWL_EXSTYLE, GetWindowLong(NewWindow.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
//NewWindow.Show;
//ppDisp:=NewWindow.EmbeddedWB1.DefaultDispatch; //самая правильный, появляется несколько значков браузера возможен их выбор
//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;
var Cancel: WordBool);
var
url,ts: string;
NewWindow:TForm1;
// ovURL: OleVariant;
// var doc:IHtmlDocument2;
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;
//if
// assigned(embeddedwb1.ControlInterface.Document)
// then embeddedwb1.ControlInterface.Document.QueryInterface(IHtmlDocument2,doc);
//NewWindow := TForm1.Create(parent);
//SetWindowLong(NewWindow.Handle, GWL_EXSTYLE, GetWindowLong(NewWindow.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
//NewWindow.Show;
//ppDisp:=NewWindow.EmbeddedWB1.DefaultDispatch; //самая правильный, появляется несколько значков браузера возможен их выбор
//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;
OnNewWindow2
Возникает при попытке открыть документ в новом окне. Если Вы хотите, чтобы документ был открыт в Вашем экземпляре броузера, то Вам нужно создать свой экземпляр броузера и параметру ppDisp присвоить интерфейсную ссылку на этот экземпляр:
Код:
procedure TFormSimpleWB.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
var
newForm:TFormSimpleWB;
begin
newForm := TFormSimpleWB.Create(Application);
newForm.Show;
ppDisp := newForm.WebBrowser1.ControlInterface;
end;
var ppDisp: IDispatch; var Cancel: WordBool);
var
newForm:TFormSimpleWB;
begin
newForm := TFormSimpleWB.Create(Application);
newForm.Show;
ppDisp := newForm.WebBrowser1.ControlInterface;
end;
Код:
var
newForm:TFormSimpleWB;
newForm:TFormSimpleWB;
перечисляю
Код:
но это запустит только копию программы с установочной папки а как сотворить подстановку урла?
Куда прикрутить ppdisp?
ShellExecute(handle,'open','net.exe', Pchar(d), nil, SW_RESTORE);
ShellExecute(handle,'open',PChar(d),PChar(newwindow.EmbeddedWB1.DefaultDispatch),nil, SW_SHOWNORMAL);
ShellExecute(NewWindow.EmbeddedWB1.LoadFrameFromStrings, 'open', PChar(newWindow), nil, nil, SW_NORMAL);
ShellExecute(NewWindow.Handle, 'open', 'www.scip.be', nil, nil, SW_SHOW);
ShellExecute (Form1.Handle, nil, PChar (Application.ExeName), nil, nil, SW_RESTORE);
Куда прикрутить ppdisp?
ShellExecute(handle,'open','net.exe', Pchar(d), nil, SW_RESTORE);
ShellExecute(handle,'open',PChar(d),PChar(newwindow.EmbeddedWB1.DefaultDispatch),nil, SW_SHOWNORMAL);
ShellExecute(NewWindow.EmbeddedWB1.LoadFrameFromStrings, 'open', PChar(newWindow), nil, nil, SW_NORMAL);
ShellExecute(NewWindow.Handle, 'open', 'www.scip.be', nil, nil, SW_SHOW);
ShellExecute (Form1.Handle, nil, PChar (Application.ExeName), nil, nil, SW_RESTORE);