Ver Mensaje Individual
  #2  
Antiguo 08-04-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bien. Pero fíjate que puedes calcular directamente el area cliente sin necesidad de calcular los anchos de borde y de la barra del caption:

Esta sería la modificación en el tratamiento de mensaje de WM_MOVING:
Código Delphi [-]
procedure TForm2.WMMoving(var Message: TWMMOVING);
var
  MainRect: TRect;
begin
  inherited;
  Windows.GetClientRect(Application.MainForm.Handle, MainRect);
  MapWindowPoints(Application.MainForm.Handle, 0, MainRect, 2);
  if Message.DragRect.Left < MainRect.Left then
  begin
    Message.DragRect.Left:= MainRect.Left;
    Message.DragRect.Right:= MainRect.Left + self.Width;
  end;
  if Message.DragRect.Top < MainRect.Top then
  begin
    Message.DragRect.Top:= MainRect.Top;
    Message.DragRect.Bottom:= MainRect.Top + self.Height;
  end;
  if Message.DragRect.Left > MainRect.Right - self.Width then
  begin
    Message.DragRect.Left:= MainRect.Right - self.Width;
    Message.DragRect.Right:= MainRect.Right;
  end;
  if Message.DragRect.Bottom > MainRect.Bottom then
  begin
    Message.DragRect.Top:= MainRect.Bottom - self.Height;
    Message.DragRect.Bottom:= MainRect.Bottom;
  end;
end;

Tratar el mensaje WM_MOVING es mejor que el OnMouseMove pues hace referencia al movimiento de la ventana, no del ratón, sea cual sea el mecanismo del movimiento (ratón o teclado) y se llama durante el movimiento continuo, no tras éste. Además es mas simple y rápido.


Saludos
Responder Con Cita