Ver Mensaje Individual
  #1  
Antiguo 01-08-2008
santus santus is offline
Miembro
 
Registrado: ene 2006
Posts: 130
Reputación: 19
santus Va por buen camino
Mover dos formularios al mismo tiempo

Hola amigos. Tengo que hacer una aplicacion simple. El tema complejo es que tengo que lograr mover dos formularios al mismo tiempo en tiempo de ejecución.

Los formularios son sismples. Nomas tienen unas cosillas que mostrar pero nada mas. Tengo un formulario principal, y tengo otro formulario al lado, que se abre para mostrar información al hacer click en un botón. Este se muestra al lado del principal.

Ya logré mover el fomulario desde cada de las ventanas. Arrastrando el mouse sobre cada una, me las mueve en forma independiente. Para ello usé esta funcion:

Código Delphi [-]

procedure TfMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    ReleaseCapture;    
    Perform(WM_SYSCOMMAND, SC_DRAGMOVE, Integer(PointToSmallPoint(Point(X,Y))));
end;

Hasta aquí todo bien. Cada una de las ventanas se mueve en forma independiente. Ahora bien. Estoy intentantando que se muevan los dos al mismo tiempo. Osea, cuando arrastro el mouse sobre uno, se mueva tambien el otro.

Se me ocurrió sin muchos resultados, enviar un mensaje personalizado a cada formulario para que se muevan todos juntos. Algo asi como:

Código Delphi [-]
CONST
  WM_MOVERFORM = WM_USER + 0;
  SC_DRAGMOVE = $F012;

procedure TfMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 SendMessage(Handle,WM_MOVERFORM,SC_DRAGMOVE,Integer(PointToSmallPoint(Point(X,Y))));
end;

procedure OnMoverVentana(var Msg: TMessage); message WM_MOVERFORM;

procedure TfMain.OnMoverVentana(var Msg: TMessage);
begin
    ReleaseCapture;
    Perform(WM_SYSCOMMAND, Msg.WParam,Msg.LParam);
end;

Para el segundo formulario hago lo mismo. Le envio el handle del otro fomulario así:

Código Delphi [-]
procedure TfMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    SendMessage(Handle,WM_MOVERFORM,SC_DRAGMOVE,   Integer(PointToSmallPoint(Point(X,Y))));
    SendMessage(form2.handle,WM_MOVERFORM,SC_DRAGMOVE,   Integer(PointToSmallPoint(Point(X,Y))));

end;

Y así. El problema que luego de enviar el primer mensaje la aplicación no envia el próximo mensaje hasta que no termino de soltar el mouse, osea que se mueve sólo el que primero recibe el mensaje.

Estoy perdido. Buscando aqui y en internet no encotré ni siquiera una idea de como seguir. Si alguien tiene alguna idea, siempre va a ser bienvenida porque a esta altura, ya ni se si esta implementación es correcta.

Bien, gracias a todo, y espero no haberlos aburrido con este laaarrggooo post. Gracias.
__________________
"El ordenador nació para resolver problemas que antes no existían." Bill Gates.
Responder Con Cita