Vamos a crear una demostración sobre cómo hacer un form sin barra de leyenda que se pueda arrastrar desde cualquier lugar desde el form. Algunas ideas fueron tomadas de este sitio http://delphi.about.com/library/weekly/aa102505a.htm y http://lazplanet.blogspot.com.uy/2013/06/dragging-form-by-its-body .html
Cree un nuevo proyecto en su propio nuevo directorio y llámelo unidad ‘dragcaptionless’.
Agregue un TButton a la parte inferior derecha del formulario recién creado. Cambie la propiedad Caption a ‘Bye!’.
En el Manejador de Eventos OnClick escriba el siguiente código:
procedure TForm1.Button1Click(Sender: TObject); begin Application.Terminate; end;
Agregue las siguientes variables a la parte privada del formulario TForm1. Esto salvará la posición del formulario mientras se mueve.
private { private declarations } //Variables to keep form position inReposition : boolean; oldPos : TPoint; public
En la cláusula uses agregue la biblioteca LCLIntf de la forma siguiente:
uses Classes, ... ..., // Compatibility library gives SetCapture and ReleaseCapture LCLIntf;
Ahora selecciones el Formulario Form1 en la ventana de diseño.
En el Manejador de Eventos de Form1.OnCreate agregue el siguiente código:
procedure TForm1.FormCreate(Sender: TObject); begin self.BorderIcons:=[]; self.BorderStyle:=bsNone; end;
Esto desactiva el borde y el título de nuestro formulario.
En el Manejador de Eventos de Form1.OnMouseDown, agregue el siguiente código:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Sender is TForm) then begin //Get the MouseDown cursor position and keep it oldPos.X:=X; oldPos.Y:=Y; //we are now repositioning the form inReposition:=True; end; end;
Este código establece el comienzo del procedimiento de mover el formulario.
En el Manejador de Eventos de Form1.OnMouseMove, agregue el siguiente código:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var newPos: TPoint; begin // Get actual position from mouse for this event newPos.X:=X; newPos.Y:=Y; //if we are moving if inReposition then begin with TForm(Sender) do begin //Change cursor to grab mode Screen.Cursor := crSize; //Adjust new form position relative to first position SetBounds(Left + (newPos.X - oldPos.X), Top + (newPos.Y - oldPos.Y), Width, Height); end; end; end;
Esto cambiará la posición del formulario mientras se mueve.
En el Manejador de Eventos de Form1.OnMouseUp, agregue el siguiente código:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inReposition then begin //Restore normal cursor Screen.Cursor := crDefault; //We are not moving anymore inReposition := False; end; end;
Esto restaura el cursor y deja de mover el formulario.
Ahora estamos listos para compilar y ejecutar.
Run | Build
y (si no dio errores)
Run | Run
¡Y arrástrelo!
A disfrutar!