PDA

Ver la Versión Completa : Form On Top


vejerf
17-10-2007, 16:13:19
Buenas señores,
Tengo el siguiente problema: uso una aplicación que hace una llamada al Google Earth y la pone "encima" de mi aplicación mediante esta sentencia:
SetWindowPos(Aplicacion.GetMainHwnd,HWND_TOPMOST,220,75,ancho-220,alto-75,SWP_SHOWWINDOW);
Lo importante de esto es que la coloca como "siempre visible" por así decirlo por encima de otros programas q estén corriendo. La cosa es q yo necesito ponerla en primer plano cuando arranque la aplicación, pero cuando accedo a ciertos menús quiero q se me abran encima del Google Earth y no sé como hacerlo...
Alguna idea amigos???

Espero haberme explicado un poco :p... Gracias a todos!!!

gluglu
17-10-2007, 16:51:15
... ciertos menús de tu propio programa ??

Si es así, por qué no detectas cuando se abren esos menus y vuelves a colocar la ventana de tu aplicación por encima de las demás ?

:rolleyes:

vejerf
17-10-2007, 16:55:43
Buena respuesta gluglu... pero ahi esta la cosa que no se como hacerlo... yo lo q pretendo es abrir un form encima del google earth que a su vez este he dicho q esté encima de mi aplicacion :(... Gracias... :(

cHackAll
17-10-2007, 16:58:01
Application.MainForm.FormStyle := fsStayOnTop;

Application.MainForm.FormStyle := fsNormal;
Application.MainForm.SendToBack;

ó


SetWindowPos(Aplicacion.GetMainHwnd,HWND_TOPMOST,220,75,ancho-220,alto-75,SWP_SHOWWINDOW);


y luego:


SetWindowPos(Aplicacion.GetMainHwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE+SWP_NOMOVE);
SetForegroundWindow(FindWindow({clase}, {nombre})); // La clase y/o el nombre de la ventana del Google Earth

Suerte!

vejerf
17-10-2007, 17:13:09
Acabo de probar tu solución cHackAll pero no es exactamente lo que necesito. Intentaré explicarme algo mejor. Estoy realizando una aplicación que interacciona con el Google Earth intentando que ambas aplicaciones sean una sola. Por eso intento situar el GE en la parte de la pantalla que me interesa que ocupe y todo eso. Pues bien si arranco mi aplicación y no le digo que coloque el GE On Top mediante la sentencia:
SetWindowPos(Aplicacion.GetMainHwnd,HWND_TOPMOST,220,75,ancho-220,alto-75,SWP_SHOWWINDOW);
no puedo tener las dos aplicaciones como si fueran una sola xq si pulsara en cualquier parte de mi aplicación se situaría por encima del GE.
La cosa es q cuando yo selecciono algún menú me interesa q sea este el que se sitúe por encima del resto, es decir, la aplicación de fondo, por encima el GE y encima de él, el nuevo menú. Es como si tuviese varias capas y lo q me interesa es poder estas capas a mi antojo en tiempo de ejecución...
¿Es facilito no? :(

cHackAll
17-10-2007, 17:20:52
¿Es facilito no? :(

:D

Windows.SetParent(Handle, FindWindow(nil, 'Mi PC')); // Ventana "Mi PC" abierta ehhh

Lo que se me ocurre es que puedes meter tu aplicacion "dentro" del Google Earth...

Saludos

vejerf
17-10-2007, 17:34:53
Lo que me interesa es el caso contrario... meter dentro de mi aplicación el Google Earth... ¿sería posible?

vejerf
17-10-2007, 19:48:32
Otra cosa q se me ocurre q podría hacer... pero q tampoco se como hacerlo :(:(:(... sería poner la aplicación de Google Earth dentro de un componente de mi form formando así parte ya de mi aplicación... es esto posible??? Sería la mejor solución para mi problema... :p

cHackAll
17-10-2007, 20:01:53
Lo que me interesa es el caso contrario... meter dentro de mi aplicación el Google Earth... ¿sería posible?

Windows.SetParent(FindWindow(nil, 'Mi PC'), Handle);

vejerf
22-10-2007, 17:09:17
Hola,
probé esta solución que me das y a priori marchaba bien. Yo trabajo con el BDS 2006 y cuando ejecuto desde ahi todo marcha bien es decir, el GE "pertenece" a mi aplicación. Sin embargo, una vez realizada la aplicación la ejecute en otro ordenador y mi sorpresa es q ya no pertenecia... volvi a mi ordenador y desde el ejecutable tenia ese mismo comportamiento, sin embargo desde el BDS2006 no... ¿A Alguien se le ocurre el por qué pasa esto?

cHackAll
22-10-2007, 18:35:52
Lo unico que se me ocurre es que la funcion FindWindow esta retornando 0 al no encontrar la ventana o la clase; te recomiendo analizar bien esa parte (el ClassName y el WindowName) de tu aplicacion y del GE

Suerte