Incrustar otra aplicación

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

Incrustar otra aplicación

Post by Sebastián Almirón »

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: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Incrustar otra aplicación

Post by Sebastián Almirón »

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: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Incrustar otra aplicación

Post by Sebastián Almirón »

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
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Re: Incrustar otra aplicación

Post by AIDA »

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
ORibeiro
Posts: 174
Joined: Mon Oct 20, 2008 6:33 pm
Location: Itu, Sao Paulo, Brazil

Re: Incrustar otra aplicación

Post by ORibeiro »

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,
_ Ribeiro
_ Ribeiro
OASyS Informática
Fwh18.02 + xHarbour 1.2.3 + Bcc72
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: Incrustar otra aplicación

Post by Patricio Avalos Aguirre »

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
ORibeiro
Posts: 174
Joined: Mon Oct 20, 2008 6:33 pm
Location: Itu, Sao Paulo, Brazil

Re: Incrustar otra aplicación

Post by ORibeiro »

¿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.
_ Ribeiro
OASyS Informática
Fwh18.02 + xHarbour 1.2.3 + Bcc72
User avatar
Vikthor.Thomas
Posts: 144
Joined: Thu Jan 02, 2014 1:49 pm

Re: Incrustar otra aplicación

Post by Vikthor.Thomas »

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
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Incrustar otra aplicación

Post by joseluisysturiz »

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
Vikthor.Thomas
Posts: 144
Joined: Thu Jan 02, 2014 1:49 pm

Re: Incrustar otra aplicación

Post by Vikthor.Thomas »

Listo el pollo !!! :-)
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Incrustar otra aplicación

Post by MGA »

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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
Marcelo Roggeri
Posts: 275
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina
Contact:

Re: Incrustar otra aplicación

Post by Marcelo Roggeri »

Hola buenas tardes, se puede hacer esto mismo con Word ?
Saludos
FWH - Harbour - BCC7 - PellesC - FivEdit (Cristobal Navarro)
Post Reply