Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturar Evento (https://www.clubdelphi.com/foros/showthread.php?t=26544)

piccolo2101 26-10-2005 14:37:21

Capturar Evento
 
Hola, Me gustaría saber si hay algún evento que pueda capturar cuando una ventana de un formulario es arrastrada por la pantalla y en su defecto saber que solución podrían darme.

Un saludo y gracias

delphi.com.ar 26-10-2005 14:43:00

No se si es precisamente lo que buscas:
Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
  public
  end;

...

procedure TForm1.WMMove(var Message: TWMMove);
begin
  inherited;
  Caption := Format('X: %d,  Y: %d', [Message.XPos, Message.YPos]);
end;

roman 26-10-2005 21:25:30

Aunque WM_MOVE se genera después del movimiento. Quizá te interese también WM_MOVING.

// Saludos

piccolo2101 27-10-2005 09:29:28

Gracias
 
Hola, gracias por la respuesta. Exactamente lo que buscaba era WMMoving ya que estaba haciendo un componente que al añadirlo a un formulario comprobrara la cercanía de las otras ventanas, según un valor del campo magnético en pixels, y si era menor que pegara las ventanas. Hasta ahora lo hacía con timer pero esa no era la forma correcta ya que sólo me interesa comprobar si se va a pegar a otra ventana cuando se mueve.
Por cierto, sabrías como cambiar la posición de la ventana porque yo ahora lo hago con Form1.left y Form1.top pero cuando libero el ratón o sigo moviendo se recuperan las posiciones antes de pegarse.

Un saludo y gracias.

roman 27-10-2005 16:56:35

Por lo que dices creo, en efecto, que WM_MOVING, es el mensaje correcto. A reserva de que leas la documentación te comento que este mensaje, en cierto sentido, más que detectar el movimiento de la ventana- que me parece también podrías hacerlo con WM_WINDOWPOSCHANGING - detecta el arrastre del recuadro o silueta de la ventana.

Me explico: en el panel de control, en propiedades de la pantalla, puedes ajustar la opción "Mostrar el contenido de la ventana mientras se arrastra". Actualmente esa opción casi siempre está activada y por ello la ventana se mueve. Sin embargo, si la opción está desactivada, la ventana no se mueve y en su lugar sólo ves el contorno.

De cualquier forma, este mensaje está hecho precisamente para indicar al usuario la posición que va a tomar la ventana. En principio lo único que tienes que hacer es ajustar el campo DragRect del mensaje (que has de declarar como TWMMoving) al la posición que desees tome la ventana. Con esto ya no hace falta mover la ventna al final del movimiento.

// Saludos


La franja horaria es GMT +2. Ahora son las 11:10:40.

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