| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
eepel Cdt

Registrado: 28 Abr 2007Mensajes: 18
|
Publicado: Dom 01 Feb, 2009 5:20 am Asunto: CppWebBrowser no abrir internet explorer |
|
|
Hola gente, estoy haciendo un navegador con CppWebBrowser y cuando hago click en un enlace con target="_blank", me abre Internet Explorer, yo quiero que en lugar de abrir Internet Explorer en una nueva ventana, abra nuevamente mi browser con la nueva url.
Desde ya muchas gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 02 Feb, 2009 3:27 am Asunto: |
|
|
Si lo que deseas es que se abra en una nueva instancia del Form, podrías usar algo como lo siguiente en el evento OnNewWindow2 del TCppWebBrowser:
| Código: | TForm1* frm = new TForm1(0);
frm->CppWebBrowser1->RegisterAsBrowser = true;
*ppDisp = frm->CppWebBrowser1->Application;
frm->Show();
// Recuerda liberar la memoria al cerrar el Form,
// por ejemplo en el evento OnClose usando: Action = caFree;
|
O bien, si quieres que la nueva página se abra en la misma ventana que ya estas usando, pondríamos lo siguiente en el evento OnNewWindow2:
(Este mismo código cambiando solo una línea podríamos usarlo para lanzar nuestro ejecutable con la nueva URL como parámetro)
| Código: | // La estructura siguiente crea un TCppWebBrowser oculto,
// que captura la url y la redirecciona al navegador principal
static struct LOCAL {
LOCAL(TCppWebBrowser* w): wbMain(w)
{
wb = new TCppWebBrowser(Application);
wb->OnBeforeNavigate2 = BeforeNavigate2;
}
void __fastcall BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp,
VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName,
VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel)
{
*Cancel = VARIANT_TRUE;
wbMain->Navigate2(URL, Flags, 0, PostData, Headers);
// Aquí como alternativa podríamos llamar a nuestro ejecutable
// y pasarle la URL si queremos que se ejecute como otro proceso
}
TCppWebBrowser *wb, *wbMain;
} local(CppWebBrowser1);
*ppDisp = local.wb->Application; |
|
|
| Volver arriba |
|
 |
eepel Cdt

Registrado: 28 Abr 2007Mensajes: 18
|
Publicado: Mar 03 Feb, 2009 2:33 am Asunto: No se como hacerlo |
|
|
| Hola Leo, mil gracias por tu respuesta, he intentado insertar el codigo pero desconozco como implementarlo en el evento, podrias mostrarnos como se hace?. |
|
| Volver arriba |
|
 |
eepel Cdt

Registrado: 28 Abr 2007Mensajes: 18
|
Publicado: Mar 03 Feb, 2009 3:14 am Asunto: Verguenza me deberia de dar |
|
|
Jeje.. perdon por esa pregunta tonta... no sabia que haciendo doble click al lado del evento me creaba la funcion.
Muchas gracias el codigo funciona de maravilla |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Dom 12 May, 2019 3:47 pm Asunto: |
|
|
hola leo.....puedes poner un ejemplo de como hacer que se abra en la misma ventana del CppWebbrowser las paginas que abre separadamente en internet explorer para RAD STUDIO 10.x ???? es que me da error ese codigo
[bcc32c Error] Unit1.cpp(1): ICE: Internal compiler error: 0 @ 00000000
En RAD Studio 10.3.1 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 12 May, 2019 7:21 pm Asunto: |
|
|
En las versiones actuales es mucho más sencillo, en vez de usar el evento OnNewWindow2, usamos OnNewWindow3 y ponemos las siguientes líneas:
| Código: | *Cancel = VARIANT_TRUE;
static_cast<TCppWebBrowser*>(Sender)->Navigate(bstrUrl);
|
|
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 13 May, 2019 10:06 am Asunto: |
|
|
gracias por estar ahi..... voy a probarlo ahora mismo y te cuento
funcionar parece que funciona "algo" y te cuento...... abro esta direccion:
| Código: |
TVariant ADDRESS = "https://events.secondlife.com/";
CppWebBrowser1->Navigate2(ADDRESS); |
abre la pagina....hasta ahi bien....luego esa pagina...tiene una serie de links de "DONDE" que referencian a un lugar de second life game....si clickeas carga en la misma pagina un box arriba llamado "EVENTO SELECCIONADO" y pone dentro un link..... en 2 horas en LINK AQUI. <--y ese link le doy y no hace nada
es un link similar a este:
| Código: | secondlife:///app/region/Firestorm%20Aerodrome/65/182/24 |
es de suponer que deberia abrir la localizacion en 2nd Life viewer pero no lo hace ni muestra el mapa ni nada quiza por el codigo que me has dado habria que discriminar si es "secondlife://" y no aplicar que abra en la misma ventana cuando sea de este tipo??? |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 13 May, 2019 3:30 pm Asunto: |
|
|
Esto no tiene nada que ver con lo de arriba, incluso sin usar lo de arriba te pasaría igual.
Puedes interceptar los enlaces con "secondlife:///" probando con lo siguiente en OnBeforeNavigate2:
| Código: |
if (VarToStr(*URL).Pos("secondlife:///") == 1)
{
*Cancel = VARIANT_TRUE;
ShellExecute(0, TEXT("open"), *URL, 0, 0, SW_SHOWNORMAL);
}
|
|
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 13 May, 2019 5:52 pm Asunto: |
|
|
vale yo lo hice asi
| Código: | void __fastcall TForm1::CppWebBrowser1NewWindow3(TObject *Sender, LPDISPATCH *ppDisp,
VARIANT_BOOL *Cancel, unsigned_long dwFlags, BSTR bstrUrlContext,
BSTR bstrUrl)
{
if(Browser_Flag == true)
{
*Cancel = VARIANT_TRUE;
static_cast<TCppWebBrowser*>(Sender)->Navigate(bstrUrl);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp,
Variant *URL, Variant *Flags, Variant *TargetFrameName, Variant *PostData,
Variant *Headers, VARIANT_BOOL *Cancel)
{
AnsiString Addr;
Addr = URL->AsType(varString);
wchar_t *str = new wchar_t[Addr.WideCharBufSize()];
if (Addr.Pos("secondlife:") > 0)
{ ShowMessage("ENCONTRADO");
Browser_Flag = false;
//::ShellExecute(NULL, L"open", str, NULL, NULL, SW_SHOWNORMAL);
}
else Browser_Flag = true;
}
//--------------------------------------------------------------------------- |
tu has hecho una version bastante mas optimizada.....crees que el shellexecute es necesario para digamos "lanzar" la url hacia el 2nd Life Viewer?? |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 13 May, 2019 6:10 pm Asunto: |
|
|
| Con ShellExecute dejas que sea el shell quien se encargue de lanzar la aplicación que corresponda, en este caso el visor de 2ndLife habrá registrado el protocolo "secondlife:" y el shell sabrá quien tiene que abrirlo. Eso no impide que si te quieres complicar más la vida y hacer algo para lanzarlo por tu cuenta puedas hacerlo, aunque lo veo innecesario.. |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 13 May, 2019 7:00 pm Asunto: |
|
|
| si, ...si lo lanza el shell esta bien..... lo mirare mas a fondo porque ahora estuve mirando de lanzar esos enlaces "secondlife" y me salio precisamente lo que tu dices, la ventanita de Asociacion al Shell para saber con que programa queria asociarlos...... |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 13 May, 2019 7:14 pm Asunto: |
|
|
| No uso 2ndLife, pero acabo de hacer una prueba con otro protocolo "magnet:" y tanto usando ShellExecute, como incluso sin usarlo, el propio TCppWebBrowser lo lanza si esta registrado el protocolo correspondiente. |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Mar 14 May, 2019 10:35 am Asunto: |
|
|
hola Leo.... perdona que te moleste pero a mi no me funciona esto ultimo que dices.....recorre el codigo pero al llegar al ShellExecute no hace nada
es en mi app porque desde el firefox funciona perfectamente....abre la ventana de destination en el second life |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 15 May, 2019 1:28 pm Asunto: |
|
|
Lo que quería decir arriba es que estamos mezclando problemas, el problema no tiene nada que ver con este código, ni con el TCppWebBrowser en sí, que mandara al Shell cualquier enlace que tenga registrado su asociación de protocolo. No se la razón por la que las aplicaciones de secondlife no lo han registrado globalmente sino dentro del Firefox.
Fíjate dentro de las "Opciones" de Firefox, en la primera página debajo de "Aplicaciones" aparecen las asociaciones registradas en el propio Firefox, busca ahí a donde, a que aplicación envía el enlace, y tienes dos opciones, una registrar tú mismo manualmente el protocolo URL en el registro bajo "HKEY_CLASSES_ROOT\secondlife" o bien una vez que sabes a que aplicación envía el enlace simplemente antes de llamar a ShellExecute recorta la primera parte de la URL "secondlife://" y llama ahí a la aplicación correspondiente y usa la URL con el inicio recortado como parámetro.
Una forma sencilla de probar estos enlaces es usar Ejecutar del sistema (tecla WIN+R) y copia y pega ahí el enlace ese de secondlife, si desde ahí te falla, también te va a fallar desde Internet Explorer o desde ShellExecute, y eso quiere decir que no está registrado. Desconozco la razón por la que los de secondlife no lo registran para todo el sistema, al principio pensé que sería porque tenían su propio navegador dentro de la aplicación, pero si dices que te funciona en Firefox entonces solo se me ocurre que lo hayan registrado dentro de Firefox en el apartado que te decía.
Cualquier cosa si no consigues hacerlo funcionar, pega por aquí lo que veas en el apartado de Firefox que te digo y te pongo el código de cómo usarlo o de como registrar tú el protocolo manualmente. |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Jue 16 May, 2019 10:23 am Asunto: |
|
|
| de acuerdo..... voy a ponerme con ello hoy otra vez y probar eso del EJECUTAR de windows.......creo que en Firefox esta registrado porque lo mire en los protocolos de archivos de las opciones ....pero puede que sea en el IE donde tendria que estar registrado mas bien..... bueno...en unos minutos te cuento..... probare lo de recortar "secondlife:///" |
|
| Volver arriba |
|
 |
|