Abrir navegador dentro de un dialogo

Post Reply
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Abrir navegador dentro de un dialogo

Post by JoseAlvarez »

Hola a todos en el foro, saludos...

Se me presentó la necesidad de hacer en un sistema un botón que me abriera el Google Maps con la direccion y ciudad escritas en un Get.
Buscando en el foro, vi que hay varias maneras de hacerlo. Pero como no soy muy experto que digamos, lo mas sencillo que vi y que pude implementar fue esta funcion de otro usuario llamado lorenzo:

Code: Select all

#include "FiveWin.ch"

*****************************************
function  MAPAS()
 local oDlg
 local pDireccion:='SAO PAULO'
 local ppoblacion:='RUA ROCHA'
 Local cdire, cpobla, cweb:='https://www.google.co.ve/maps/search/'  && importante que sea  "SEARCH" NO "PLACE"
 if empty(pdireccion)
   msgstop('Imposible mostrar un mapa porque no tecleó ninguna dirección.','')
   return .f.
 endif
 if empty(ppoblacion)
   msgalert('Si teclea una población, la búsqueda será más efectiva.','')
 endif
 cdire = upper(pdireccion)
 cdire = StrTran( ALLTRIM(cdire), '-' ,'')
 cdire = StrTran( ALLTRIM(cdire), 'C/','')
 cdire = StrTran( ALLTRIM(cdire), '/' ,'')
 cdire = StrTran( ALLTRIM(cdire), 'Nº','')
 cdire = StrTran( ALLTRIM(cdire), '  ',' ')
 cdire = StrTran( ALLTRIM(cdire), ' ', '+')
 cpobla= upper(ppoblacion)
 cpobla= StrTran( ALLTRIM(ppoblacion), '-', '' )
 cpobla= StrTran( ALLTRIM(ppoblacion), ' ', '+')
 ShellExecute(GetActiveWindow(),Nil,iif(!empty(cdire),cweb+alltrim(cdire)+'+'+alltrim(cpobla),''),",",1)
return .t.
 
Funciona muy bien, pero el problema es que se va al explorador, es decir abandona mi sistema y abre el explorador. Por supuesto, esta hecho para funcionar asi, pero quisiera saber si hay alguna manera de que se vea en un dialogo.
Como dije, vi que hay otras maneras por ejemplo usando un ACTIVEX pero no tengo los conocimientos para llegar hasta alla.

Si alguien puede arrojarme algunan luz o pista que me ayude, le agradeceria altamente,

Un abrazo a todos.
"Los errores en programación, siempre están entre la silla y el teclado..."
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Abrir navegador dentro de un dialogo

Post by mastintin »

mira a ver con esta funcion ...

Code: Select all


VerModalWeb(iif(!empty(cdire),cweb+alltrim(cdire)+'+'+alltrim(cpobla),'') , "Mapas" )

FUNCTION VerModalWeb( cDir, cTitle )
   local oWnd, oActiveX
   local oBtn
   local nWidth, nAXWidth

    nWidth :=  860
    nAXWidth := 410

     DEFINE DIALOG oWnd TITLE cTitle ;
      FROM   0, 0 TO 800, nWidth  PIXEL

      @ 4, 10 ACTIVEX oActiveX PROGID "Shell.Explorer.2"  SIZE nAXWidth, 360  OF oWnd

      @ 380, 200 BUTTON oBtn PROMPT "&Salir" SIZE 40, 12 PIXEL OF oWnd ;
      ACTION ( oWnd:END() )

      ACTIVATE DIALOG oWnd CENTER ;
         ON INIT  (  oActiveX:DO( "Navigate2",  cDir )  )

  
RETURN NIL

 
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Re: Abrir navegador dentro de un dialogo

Post by JoseAlvarez »

Saludos amigo MASTINTIN

Gracias por tu gentil ayuda. Voy a probar y te aviso.
"Los errores en programación, siempre están entre la silla y el teclado..."
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Re: Abrir navegador dentro de un dialogo

Post by JoseAlvarez »

Amigo ya probé tu codigo.

Primeramente me arrojó error de sintaxis en la línea ON INIT ( oActiveX:DO( "Navigate2", cDir ) y recordando lo que lei anoche, el amigo cristóbal navarro recomendaba sustituir ":" por ":" de manera que quedara oActiveX:DO( "Navigate2", cDir ) ) (por lo menos asi lo entendi) pero al hacerlo ahora con lo que me indicaste el programa compilar sin errores pero al ejecutarlo y llegar a ese ON INIT simplemente se aborta. No sale ningun error, ni mensaje, simplemente se aborta y regresa windows. Ni siquiera al menú, a Windows. Tengo win 10 y fw17

Me estará faltando algún include o libreria?
"Los errores en programación, siempre están entre la silla y el teclado..."
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Re: Abrir navegador dentro de un dialogo

Post by JoseAlvarez »

Ah, se me olvidaba, uso xHarbour
"Los errores en programación, siempre están entre la silla y el teclado..."
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Abrir navegador dentro de un dialogo

Post by mastintin »

En efecto tendría que ser oActiveX:DO( "Navigate2", cDir ) lo otro es un "defecto" al copiar y pegar el código en el mensaje . :D
Como "Test" comenta el" on init" a ver si te da error o se queda en la ventana .
Tambien puede funcionar con oActiveX:DO( "Navigate", cDir ) ( sin el "2" ) .

Tu versión de fw es muy antigua ( tendrá como poco 7 años ) y puede que no tenga soporte para ActiveX. mira a ver con este otro codigo :

Code: Select all


FUNCTION VerModalWeb2( cDir, cTitle )
   local oWnd 
   local nWidth
   local oIE

    nWidth :=  860
 
     DEFINE DIALOG oWnd TITLE cTitle ;
      FROM   0, 0 TO 800, nWidth  PIXEL

oIE := CREATEOBJECT( "InternetExplorer.Application" )
WITH OBJECT oIE
:Visible := .t.
:ToolBar := .f.
:StatusBar := .f. 
:MenuBar := .f.
:FullScreen := .t. 
:Invoke( "Navigate", cURL ) 
END WITH

      ACTIVATE DIALOG oWnd CENTER ;
      on init SetParent(oIE:hWnd,oWnd:hWnd)
         
RETURN NIL



 
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Abrir navegador dentro de un dialogo

Post by acuellar »

Estimado Manuel

Se puede abrir un correo outllook .msg en una ventana?

Con tu ejemplo he intentado así

Code: Select all

  DEFINE DIALOG oWnd TITLE cTitle ;
      FROM   0, 0 TO 600, nWidth  PIXEL

      @ 380, 200 BUTTON oBtn PROMPT "&Salir" SIZE 40, 12 PIXEL OF oWnd ;
      ACTION ( oWnd:END() )

      ACTIVATE DIALOG oWnd CENTER ;
         ON INIT ( ShellExecute(GetActiveWindow(),"open", "D:\Sistemas\AcrSoft\correo.msg","D:\Sistemas\AcrSoft", "", 1 ) ) 
 
Abre el correo fuera la ventana.
Saludos,

Adhemar C.
Claudio Leiva
Posts: 12
Joined: Fri Mar 17, 2017 8:46 pm

Re: Abrir navegador dentro de un dialogo

Post by Claudio Leiva »

TENGO ESO APLICADO ASI

#include 'fivewin.ch'

Function MainGoogle(oWnd)
local oDlg, aGet[4], aBtn[2], oActiveX
local cCity := space(100)
local cCountry := "CL"
local cStreet := space(100)
local nNum := 0

If !IsInternet()
MsgInfo("Ud. no posee Conección Activa a <INTERNET>, !!! Favor Verificar ¡¡¡ ")
Return Nil
Endif

Define Dialog oDlg Resource "Google" OF oWnd

REDEFINE ACTIVEX oActiveX ID 100 OF oDlg PROGID "Shell.Explorer"

REDEFINE GET aGet[1] Var cStreet ID 200 OF oDlg Picture "@!"
REDEFINE GET aGet[2] Var nNum ID 500 OF oDlg Picture '999999'
REDEFINE GET aGet[3] Var cCity ID 300 OF oDlg Picture '@!'
REDEFINE GET aGet[4] Var cCountry ID 400 OF oDlg Picture '@!'

REDEFINE BUTTON aBtn[1] ID 4 OF oDlg ACTION ps_Seek( aGet, oActiveX )
REDEFINE BUTTON aBtn[2] ID 3 OF oDlg ACTION oActivex:Do( "ExecWB", 7,1 )

Activate Dialog oDlg Center On Init aBtn[1]:Click()
return Nil



Static Function ps_Seek( aGet, oActiveX )
local i, abEval, cStreet, cNum, cCity, cCountry, cTemp
local cHtml := MemoRead( "google\google.html" )

cStreet := GoogleOk( AllTrim( Eval(aGet[1]:bSetGet) ) )
cNum := GoogleOk( AllTrim( Str( Eval(aGet[2]:bSetGet) ) ) )
cStreet := GoogleOk( cStreet + if( !Empty(cStreet), " "+cNum, "" ) )
cCity := GoogleOk( AllTrim( Eval(aGet[3]:bSetGet) ) )
cCountry := GoogleOk( AllTrim( Eval(aGet[4]:bSetGet) ) )

cHtml = StrTran( cHtml, "<<STREET>>", cStreet ) // la calle y el numero: Formato calle,numero
cHtml = StrTran( cHtml, "<<CITY>>", cCity ) // la poblacion
cHtml = StrTran( cHtml, "<<COUNTRY>>", cCountry ) // el pais vale "CL"

cTemp := cFilePath(GetModuleFilename(GetInstance()))+"google\Temp.html"

MemoWrit( cTemp, cHtml )
oActiveX:Do( "Navigate2", cTemp )

return Nil



func GoogleOk( cDirecc )
cDirecc := Upper(cDirecc)
cDirecc := Trim(StrTran( cDirecc, '.', ''))
cDirecc := Trim(StrTran( cDirecc, ':', ''))
cDirecc := Trim(StrTran( cDirecc, '-', ''))
cDirecc := Trim(StrTran( cDirecc, '/', ''))
cDirecc := Trim(StrTran( cDirecc, '¦', ''))
cDirecc := Trim(StrTran( cDirecc, 'Nº', ''))
cDirecc := Trim(StrTran( cDirecc, 'º', ''))
cDirecc := Trim(StrTran( cDirecc, 'ª', ''))
cDirecc := Trim(StrTran( cDirecc, 'Ñ', 'N'))
cDirecc := Trim(StrTran( cDirecc, 'ñ', 'N'))
cDirecc := Trim(StrTran( cDirecc, 'ü', 'U'))
return cDirecc
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Re: Abrir navegador dentro de un dialogo

Post by JoseAlvarez »

Amigo Manuel.

Una vez más, gracias por tu ayuda.
Mi version de FW es reciente, gracias al apoyo del maestro A. Linares pude sortear los problemas de control de cambio de mi país y adquirir hace pocos días la versión 17.

Haciendo lo que me indicaste, efectivamente el problema no esta en el ON INIT, sino en esta linea:

@ 4, 10 ACTIVEX oActiveX PROGID "Shell.Explorer.2" SIZE nAXWidth, 360 OF oWnd

es alli donde se aborta el programa. No arreja ningún error ni "explota", simplemente vuelve a windows.

Sin embargo, aplicando el segundo código que me enviaste, el diseñado para versiones más viejas, funciona perfecto. Muchísimas gracias amigo.
Leyendo algo sobre los controles activex buscando en google, encontre la información de que no funcionan en el nuevo navegador de windows 10, el EDGE, solo con el EXPLORER de siempre en versiones anteriores a la 10. Yo tengo windows 10. No se si sera eso cierto y si sera la causa de mi problema con los ActiveX. Yo uso el FireFox.
De cualquier manera, ya solucioné gracias a tu ayuda, la necesidad que tenía.

Agradecido contigo y con el foro.
"Los errores en programación, siempre están entre la silla y el teclado..."
User avatar
JoseAlvarez
Posts: 201
Joined: Sun Nov 09, 2014 5:01 pm

Re: Abrir navegador dentro de un dialogo SOLUCIONADO

Post by JoseAlvarez »

Hola Amigo Claudio.

Gracias por tu generosidad con el código que me pones acá.
Voy a ver primero, si entiendo algo de los controles Activex y segundo, la razón por la cual no puedo ejecutarlos en mi máquina. Una vez que haya resulto eso probaré con lo que me indicas.
Aunque ya resolví la urgencia que tenía gracias al amigo manuel (mastintin) me gustaría entender y aplicar el codigo que me envías.
Nunca esta demás aprender cosas nuevas.

Un abrazo.
"Los errores en programación, siempre están entre la silla y el teclado..."
Post Reply