2012-06-06 42 views
8

¿cómo muevo un formulario sin bordes? Intenté buscar en Internet, pero nada. Muchas gracias.Mover formulario sin estilo de borde

+0

puede haber aquí: http://delphi.about.com/od/windowsshellapi/a/dragnocaption.htm – philnext

+0

duplicados de [C++ Builder: Crear un TForm con EstiloDeLosBordes bsNone que es, sin embargo, móvil y redimensionable ] (http://stackoverflow.com/questions/7178030/cbuilder-create-a-tform-with-borderstyle-bsnone-that-is-nemy-movable-movable) - ese código es para C++ Builder, pero sigue siendo el mismo VCL! Debería ser trivial cambiar a Delphi. –

Respuesta

16

puede arrastrar un formulario utilizando cualquier contenían control, incluyendo en sí.

Utilizando el siguiente ejemplo, puede mover un formulario haciendo clic en su lienzo y arrastrándolo. Podría hacer lo mismo con un panel en el formulario colocando el mismo código en el evento MouseDown del panel, lo que le permitiría crear su propia barra de pseudo subtítulos.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
const 
    SC_DRAGMOVE = $F012; 
begin 
    if Button = mbLeft then 
    begin 
    ReleaseCapture; 
    Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); 
    end; 
end; 
+0

¡Gracias, este código es mejor! –

13

Si quiere decir arrastrar la ventana con el mouse, puede anular el manejo de mensajes WM_NCHITTEST y devolver HTCAPTION para la región de arrastre. La continuación se arrastre la ventana dentro de los superiores 30 píxeles para insance:

type 
    TForm1 = class(TForm) 
    private 
    protected 
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; 
    end; 

.. 

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest); 
var 
    Pt: TPoint; 
begin 
    Pt := ScreenToClient(SmallPointToPoint(Message.Pos)); 
    if Pt.Y < 30 then 
    Message.Result := HTCAPTION 
    else 
    inherited; 
end; 
+4

+1 esta es la forma de hacerlo –

+0

@David: Últimamente, he sido un poco escéptico con este enfoque, porque, básicamente, le está diciendo al sistema operativo que * todo el formulario es el título de la ventana *, que en realidad podría no serlo ser semánticamente cierto. (Bueno, en el código de Sertac, tal vez los primeros 30 píxeles * son * de hecho el título, pero en general, esto podría no ser cierto.) –

+0

@andreas ¿Tiene alguna razón concreta para rechazar esto? ¿Cuáles son los inconvenientes? Este es el enfoque estándar. –

Cuestiones relacionadas