Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Mover varias Ventanas a la Vez (https://www.clubdelphi.com/foros/showthread.php?t=68180)

FENIXadr 29-05-2010 15:37:14

Mover varias Ventanas a la Vez
 
Hola gente.. tengo una consultita sobre mover los Forms..
con este código... (que lo encontré navegando por ahí)
.....
........
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
end;
......
......

se puede hacer que un Form se mueva haciéndole click en cualquier lado.. (funciona espectacularmente) ahora bien.. la pregunta es esta...
Como puedo hacer para que cuando este Form se mueve, otro Form que esta al aldo de éste se mueva a la vez??

desde ya Muchas Gracias...

coso 30-05-2010 23:41:39

Hola,

Código Delphi [-]
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
  dx,dy : integer;
begin
dx := form1.Left - otraform.left;
dy := form1.Top - otraform.Top;

if Button = mbLeft then
begin
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
 
otraform.Left := Form1.Left - dx;
otraform.Top := Form1.top - dy;

end;

seria algo asi: coger la distancia primera entre las forms, y una vez movida la principal, recolocar la segunda la misma distancia. A ver si te sirve, un saludo.

FENIXadr 31-05-2010 00:04:30

Mover Varias Ventanas a la Vez
 
Muchisimas gracias Coso ...

Neftali [Germán.Estévez] 31-05-2010 11:33:38

También puedes revisar un ejemplillo que hay en mi página llamado "simular barras flotantes"; Que muestra como crear dos pequeños formularios con botones (que simulan barras de herramientas) y que se "anexan" o "enganchan" al formulario principal y se mueven a la vez que se mueve este.



Puedes descargar el ejemplo y ver el código.

FENIXadr 31-05-2010 14:46:01

Mover Varias Ventanas a la Vez
 
Muchas Gracias Neftali.. voy a bajar tu ejemplo para verlo... te comento que realice el método que me dijo coso y no es exactamente lo que tenía en mente, o sea, la segunda ventana se mueve a una posicion con respecto a la primera, pero cuando suelto el boton..
de todos modos seguí renegando y encontré algunas cosas que no eran para este fin pero lo pude adaptar y anda perfectamente ...

acá les dejo el código de dos métodos para los que tengan el mismo problema que yo...

Método 1:
Código Delphi [-]
....
....
var  
   XX, YY : Intgeger;
   ButtonPress : Boolean;
   CursorPos : TPoint;
....
...
Procedure TForm1.FormMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  XX := X;
  YY := Y;

  ButtonPress := True;
end;



Procedure TForm2.FormMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonPress then
  begin
    GetCursorPos (CursorPos);
    Top := CursorPos.Y - YY;
    Left := CursorPos.X - XX;

    OtroForm.Top := Top + Height;
    OtroForrm.Left := Left
  end;
end;



Procedure TForm1.FormMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonPress := False;
end;


Método 2: Escrito por Roman en alguna oportunidad.
Código Delphi [-]
interface

type
  TForm1 = class(TForm)
  private
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
  end;

implementation

procedure TForm1.WMMove(var Message: TWMMove);
begin
  inherited;
  if Assigned(Form2) then
  begin
    Form2.Left := Left;
    Form2.Top := Top + Height;
  end;
end;

end.

FENIXadr 31-05-2010 14:55:44

Mover Varias Ventanas a la Vez
 
Vi tu ejemplo Neftalí... esta muy buena la barrita, pero tuve el mismo inconveniente o sea necesito que la segunda ventana se mueva juntamente con la primera, de todos modos los métodos que puse antes asi lo hacen, puedes implementarlos en tu código si así lo deseas...
saludos y muchas gracias a todos por responder.

FENIXadr 31-05-2010 15:15:04

Mover Varias Ventanas a la Vez
 
Volví a mirar tu ejemplo Neftalí y el problema era que tenía una instruccion "exit" en el procedimiento WMWindowPosChanging... te felicito por tu trabajo ahora si veo que está muy pero muy bueno... es más.. la segunda ventana se posiciona no solo cuando se mueve la primera sino tambien cuando se cambia su tamaño.. cosa que los métodos que puse arriba no hacen... muy buen trabajo.. me fue de mucha utilidad.. se reagradece..


La franja horaria es GMT +2. Ahora son las 09:17:47.

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