PDA

Ver la Versión Completa : Como mover una ventana???


cone220
01-06-2004, 22:29:28
Tengo una aplicación en la que definí que el Form principal no tiene bordes. Quiero mover la ventana pinchando en un componente del tipo Panel. He visto algunas aplicaciones que funcionan de esa manera, pero no se como hacerlo.

marcoszorrilla
01-06-2004, 22:40:27
Mira este ejemplo:

unit frSinBorde;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
private
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
if Msg.Result = htClient then Msg.Result := htCaption;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.


Un Saludo.

__cadetill
01-06-2004, 22:42:16
quizás este hilo (http://www.clubdelphi.com/foros/showthread.php?t=10895) de hoy te sirva

roman
01-06-2004, 23:04:09
El método que te mencionan te servirá para arrastrar la ventana tomándola de alguna parte de su área cliente pero un panel no forma parte de ésta.

Una manera de mover la ventana, tomándola de un panel, podría ser manejando los eventos OnMouseDown, OnMouseMove y OnMouseUp del panel.

Comienza declarando dos variables en tu formulario:


type
TFrom1 = class(TForm)
private
DragPoint: TPoint;
Dragging: Boolean;
end;


DragPoint será el punto del panel desde donde arrastres la ventana y Dragging controlará si estás arrastrando o simplemente moviendo el mouse sobre el panel. Conforme desplaces el mouse deberás fijarte en la diferencia de las coordenadas con respecto de DragPoint y sumárselas a las propiedades Left y Top del formulario:


procedure TForm1.Panel1MouseDown(...; X, Y: Integer);
begin
Dragging := true;
DragPoint := Point(X, Y);
end;

procedure TForm1.Panel1MouseMove(...; X, Y: Integer);
begin
if Dragging then
begin
Left := Left + X - DragPoint.X;
Top := Top + Y - DragPoint.Y;
end;
end;

procedure TForm1.Panel2MouseUp(...; Shift: TShiftState; X, Y: Integer);
begin
Dragging := false;
end;


// Saludos