Incrustar otra aplicación

Incrustar otra aplicación

Postby Sebastián Almirón » Tue Mar 01, 2011 5:45 pm

Hola, a ver si alguien me puede ayudar.

Estoy haciendo una aplicación que necesita tener un control exaustivo sobre excel. Cosas como quitar parte de los menús de Excel, añadirles otros nuevos, cargarle un fichero xla con multitud de funciones escritas en VB, etc. Mi aplicación se encarga de todo lo referente a abrir, guardar y cerrar los libros.

El caso es que ya tengo todo hecho y funcionando, pero necesito que excel se abra dentro de la ventana de mi aplicación y no como una ventana independiente.

He intentado con ActiveX pero no lo he conseguido (entre otras cosas necesito un objeto Excel.Application y no un OWC11.Spreadsheet).

Al final he intentado así:

hWndexcel := FindWindow(0,"Microsoft Excel - "+cfilenopath(clibro))
SetParent(hwndexcel,oWnd:hWnd) // Muestra Excel en la ventana de mi aplicación

Con esto excel permanece dentro de la ventana de mi aplicación, pero los dialogos que debería desplegar excel cuando se selecciona alguna opción de su menú, no se muestran y en su lugar la ventana excel se queda parpadeando, la opción del menú de excel seleccionada en naranja y excel deja de responder. Excel lo manejo con OLE.

Mi pregunta es si esto es posible o estoy desvariando.
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Incrustar otra aplicación

Postby Sebastián Almirón » Wed Mar 02, 2011 5:13 pm

Pues nada, ya lo he solucionado:

oexcelsolver :=CreateObject( "Excel.Application" )
oexcelsolver:Workbooks:Open(clibro)
sysrefresh()
oexcelsolver:Visible(.t.)
hWndexcel := FindWindow(0,"Microsoft Excel - "+cfilenopath(clibro))
SetParent(hwndexcel,oWnd:hWnd)

Con CreateOleObject("Excel.Application") no funcionaban las opciones en las que excel abre un dialogo y se quedaba colgado, entre ellas mis funciones.
Así funciona bien y excel no se sale de la ventana de mi aplicación.

Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Incrustar otra aplicación

Postby Sebastián Almirón » Fri Mar 04, 2011 3:00 pm

Por si alguien está interesado, después de repasar todo un poco ha quedado así:

oexcelsolver := CreateObject( "Excel.Application" )
oexcelsolver:WorkBooks:Open(clibro)
sysrefresh()
SetWinLonA(oexcelsolver:hWnd,-16,"L") //Es la función API SetWindowLongA, en este caso quita la barra de titulo de excel
SetForeWin(oexcelsolver:hWnd) //Es la funcion API SetForegroundWindow tiene que ir antes de la llamada a setparent()
SetParent(oexcelsolver:hWnd,oWnd:hWnd) //Incrusta Excel en mi ventana

oWnd:SetText( cverotc + ' - Libro abierto: '+clibro )
oexcelsolver:ActiveWorkBook:Protect('',.f.,.f.) //Para poder manupilar el estado de la venta del libro
oexcelsolver:WindowState(-4137) //Se quitan los botones de maximizar, minimizar y cerrar
oexcelsolver:Windows(1):WindowState(-4137) //Se maximiza Excel en mi ventana
oexcelsolver:Visible(.t.) //Hace Excel visible

Con esto el resultado es el que debería tener con TActiveX, pero con esa clase no he conseguido hacer rular Excel sin errores.
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Incrustar otra aplicación

Postby AIDA » Sat Mar 05, 2011 5:11 pm

Muchas gracias Sebastián se ve muy interesante :mrgreen:

Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

Re: Incrustar otra aplicación

Postby ORibeiro » Fri Apr 15, 2011 1:16 pm

Donde encontro las funciones:
SetWinLonA(oexcelsolver:hWnd,-16,"L") //Es la función API SetWindowLongA, en este caso quita la barra de titulo de excel
SetForeWin(oexcelsolver:hWnd) //Es la funcion API SetForegroundWindow tiene que ir antes de la llamada a setparent()
Gracias,
Oscar Ribeiro
Oscar Ribeiro
OASyS Informática
Fwh18.02 + xHarbour 1.2.3 + Bcc72
User avatar
ORibeiro
 
Posts: 187
Joined: Mon Oct 20, 2008 6:33 pm
Location: Itu, Sao Paulo, Brazil

Re: Incrustar otra aplicación

Postby Patricio Avalos Aguirre » Fri Apr 15, 2011 2:04 pm

Sebastian:

Muy interesante, pero por ahora no he tenido ninguna solicitud en hacer eso, si que se queda guardado el las cosas interensante por aplicar

podrias colocar algunas imagenes para poder ver mejor?
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: Incrustar otra aplicación

Postby ORibeiro » Fri Apr 15, 2011 4:12 pm

¿Cómo puedo hacer que Excel ejecute por completo dentro de la aplicación? Con todas sus funciones. Lo pregunto porque, tal y como está, no puedo imprimir, escribir o modificar una hoja de cálculo.
Gracias.
Oscar Ribeiro
OASyS Informática
Fwh18.02 + xHarbour 1.2.3 + Bcc72
User avatar
ORibeiro
 
Posts: 187
Joined: Mon Oct 20, 2008 6:33 pm
Location: Itu, Sao Paulo, Brazil

Re: Incrustar otra aplicación

Postby Vikthor.Thomas » Thu Jul 10, 2014 9:03 pm

ORibeiro wrote:¿Cómo puedo hacer que Excel ejecute por completo dentro de la aplicación? Con todas sus funciones. Lo pregunto porque, tal y como está, no puedo imprimir, escribir o modificar una hoja de cálculo.
Gracias.



Utilizando FWH64.1311 , Visual Studio 2012 y Ofiice 2013 consigo incrustar la ventana de Excel dentro de una MDIChild, y lo único que NO es posible realizar es la edición de las celdas.

Alguna sugerencia.

Saludos
User avatar
Vikthor.Thomas
 
Posts: 144
Joined: Thu Jan 02, 2014 1:49 pm

Re: Incrustar otra aplicación

Postby joseluisysturiz » Fri Jul 11, 2014 3:01 am

Muy buena informacion para los que manejamos mucho la exportacion a excel, como comentan algunos colegas, ahora la idea es que se ejecute dentro de una MDI y si es posible como un reporte normal, quitando todo lo posible, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Incrustar otra aplicación

Postby Vikthor.Thomas » Tue Jul 22, 2014 8:56 pm

Listo el pollo !!! :-)
User avatar
Vikthor.Thomas
 
Posts: 144
Joined: Thu Jan 02, 2014 1:49 pm

Re: Incrustar otra aplicación

Postby MGA » Sun Aug 28, 2016 8:56 pm

DLL32 FUNCTION SETFOREWIN() AS LONG PASCAL FROM "SetForeWin" LIB "user32.dll"
DLL32 FUNCTION SETWINLONA() AS LONG PASCAL FROM "SetWinLona" LIB "user32.dll"
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Incrustar otra aplicación

Postby Marcelo Roggeri » Tue Oct 04, 2016 9:38 pm

Hola buenas tardes, se puede hacer esto mismo con Word ?
Saludos
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 6 guests