Ver Mensaje Individual
  #2  
Antiguo 11-03-2009
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Reputación: 18
Black_Ocean Va por buen camino
Hola,

No se por que lo encuentra tan curioso aquel código, ya que lo que hace es sólo asignarle un padre a la ventana de Mi PC que está actualmente abierta mediante el handle de ella, que en este caso el padre será la ventana del formulario. Además sólo servirá para una ventana que tenga como caption "Mi PC". Si otro programa tiene el mismo texto incluirá esa ventana, por eso usted debe asignarle aparte del texto de la ventana, el nombre de la clase de la ventana, pero aún así, sólo servirá para el lenguaje en español de Windows y no para otros idiomas del SO. También, sólo funcionará para la ventana del explorador de archivos que tenga ese texto y que esté actualmente abierta. Usted si desea incluir ventanas del explorador de archivos, debería crearla mediante las APIS de Windows y nombre de la clase de estas ventanas en tiempo de ejecución.

Pero bueno... aquí le propongo el siguiente ejemplo que le he hecho a la rápida en relación a lo que está arriba en su código, puede contener errores de ejecución, ya que es sólo un ejemplo, usted optimícelo y lea más en la ayuda acerca de estas funciones:

Código Delphi [-]
var
  WHandle: THandle;
  PnlContenedor: TPanel;

procedure IncluirWndHandle;
begin
  WHandle := FindWindow('CabinetWClass', 'Mi PC');
  if WHandle <> 0 then
  begin
    PnlContenedor := TPanel.Create(Form1);
    PnlContenedor.Parent := Form1;
    PnlContenedor.Align := alClient;
    Windows.SetParent(WHandle, PnlContenedor.Handle);
  end;
end;

procedure CerrarHandleWnd;
begin
  SendMessage(WHandle, WM_DESTROY, 0, 0);
  DestroyWindow(PnlContenedor.Handle);
end;

procedure TForm1.BtnCerrarHandleWndClick(Sender: TObject);
begin
  CerrarHandleWnd;
end;

procedure TForm1.BtnIncluirHandleWndClick(Sender: TObject);
begin
  IncluirWndHandle;
  BtnCerrarHandleWnd.BringToFront;
  BtnIncluirHandleWnd.BringToFront;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CerrarHandleWnd;
end;


Cordiales saludos y espero que el ejemplo le sea de utilidad =)

Última edición por Black_Ocean fecha: 11-03-2009 a las 02:01:57.
Responder Con Cita