Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Problema con SetParent

Hola a todos,

Estoy tratando de "introducir" una aplicación externa dentro de un panel de mi aplicación. Esto supuestamente ya lo había superado en otro ocasión con otra aplicación, concretamente el Google Earth.

Pues bien ahora estoy tratando de hacer lo mismo con la aplicación CompeGPSLand: http://www.compegps.com/?detail=detail&opcion=1〈=1es&grupo=tierra∏=460

Uso el siguiente conjunto de instrucciones:
Código Delphi [-]
Ejecutar('C:\Archivos de programa\CompeGPS\CompeGPSLand.exe',nil,5000);
  PHandle := FindWindow(nil, 'CompeGPS LAND');
  Windows.SetParent(PHandle, PanelCompeGPS.Handle);
  SetWindowPos(PHandle,HWND_TOP,-5,-30-21,TScreen.Create(nil).Width-Panel2.Width+10,PanelCompeGPS.Height+35+16,SWP_SHOWWINDOW);

La función ejecutar es un truco que encontré en el club para ejecutar una aplicación.

¿Alguien tiene idea de por qué puede ocurrir esto? He comprobado que FindWindow devolviese el handle ya que devuelve un valor distinto de 0.

Saludos!

PD: He usado el código expuesto anteriormente porque usando el truco directamente tampoco me funcionaba. Según el ejemplo que vi se usaba para abrir el notepad lo siguiente:
H:= Ejecutar('Notepad.exe',nil,5000);
Windows.SetParent(H,Handle);
__________________
"Patientia et constantia taelecum"

Última edición por vejerf fecha: 13-05-2010 a las 17:19:57. Razón: Se me ha olvidado comentar un detalle
Responder Con Cita
  #2  
Antiguo 21-05-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Solucionado!!!

Para quien le interese le dejo como lo he solucionado.

He averiguado la clase de la aplicación mediante la utilidad WinID que entre otra información te da la clase y el handle de la ventana sobre la que pones el cursor.

Entonces, en el evento OnCreate he ejecutado la aplicación mediante la función ejecutar encontrado en los trucos.

A continuación en el evento OnShow he buscado con FindWindow la clase obtenida anteriormente con el WinID. Con esto obtengo el handle de la ventana y a continuación pues he usado el SetParent y el SetWindowsPos sin ningún problema.

Código Delphi [-]
procedure TPForm.FormCreate(Sender: TObject);
begin

  Ejecutar(NombreAplicacion,nil,5000);    
  Sleep(2000);

end;

procedure TPForm.FormShow(Sender: TObject);
var
  PHandle : THandle;
begin
  ...
  PHandle := FindWindow(ClaseVentanaObtenidaConWinID,nil);
  Windows.SetParent(PHandle, PanelContenedor.Handle);
 SetWindowPos(PHandle,HWND_TOP,Left,Top,Width,Height,SWP_SHOWWINDOW);
  ...
end;

Quizás haya alguna otra forma de hacerlo, pero a mí al menos así me funciona.

Saludos!
__________________
"Patientia et constantia taelecum"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:18:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi