Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como hacer que el usuario no mueva la form? (https://www.clubdelphi.com/foros/showthread.php?t=5289)

Waldo 16-11-2003 02:58:46

Como hacer que el usuario no mueva la form?
 
Pues la pmisma pregunta
como hacer que el usuario no mueva la form?

roman 16-11-2003 03:40:05

Dos opciones:
  1. Atándole las manos
  2. Con el siguiente código:

Código:

type
  TForm1 = class(TForm)
  private
    procedure WMSysCommand(var Message: TWMSysCommand);
    message WM_SYSCOMMAND;
  end;

implementation

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MOVE
    then Message.Result := 0
    else inherited;
end;

// Saludos

marcoszorrilla 16-11-2003 09:13:20

Otra posibilidad es capturando y tratando el mensaje

WM_WINDOWPOSCHANGING:

Pon esta linea en la parte private de la declaración de tu form:
Código:

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
             
procedure Quieto(var m: TWMWINDOWPOSCHANGED); message                 
                            WM_WINDOWPOSCHANGING ;


  { Y luego, en la implementation pon este procedimiento: }

procedure Tform1.Quieto(var m : TWMWINDOWPOSCHANGED);
begin
    m.windowpos.x := 200;  {X/posición izquierda}
    m.windowpos.y := 100;  {Y/posoción derecha}
end;

En Cuanto al punto 1º de Román, yo también le ataría los pies, nunca se sabe.

Un Saludo.

__cadetill 16-11-2003 09:34:35

yo me inclino por la 1era de Román con la observación de Marcos. Las otras soluciones.... no me gustan :D :D

roman 16-11-2003 20:33:05

Hay otra forma que en realidad me gusta más. Funcionalmente es lo mismo pero tanto la de marcos como la mía dejan habilitado el menú "Mover" del cuadro de control de la ventana mientras que esta de plano lo quita.

Código:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DeleteMenu(GetSystemMenu(Handle, false), 1, MF_BYPOSITION);
end;

// Saludos

marcoszorrilla 16-11-2003 20:46:43

Hola Román:

Acabo de hacer una prueba y finalmente me quedo con esta última opción, manteniendo como quedó dicho al usuario atado de pies y manos y si usara algún sistema de reconocimiento de voz amordazado.

Un Saludo.

roman 16-11-2003 21:08:25

Claro que en realidad son demasiadas complicaciones para algo que puede resolverse mucho más fácil:

Código:

try
  try
    if User.Action = uaMoveForm then
      User.Remove;
  except
    User.PunishHim;
  end;
finally
  User.Remove;
end;

// Saludos

roman 23-11-2003 06:33:02

Cita:

roman comentó:
Hay otra forma que en realidad me gusta más

[...]

Código:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DeleteMenu(GetSystemMenu(Handle, false), 1, MF_BYPOSITION);
end;


El problema aquí es que el ítem "Mover" no siempre está en la misma posición. Por ejemplo, si el formulario tiene su propiedad BorderStyle en bsDialog, la posición del ítem ya no es 1 sino 0.

Creo que es mejor así:

Código:

DeleteMenu(GetSystemMenu(Handle, false), SC_MOVE, MF_BYCOMMAND);
// Saludos

marcoszorrilla 23-11-2003 10:43:38

Aquí va otra:

Código:

type
  TyourForm = class(TForm)
  private
    { Private declarations }
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  end;

procedure TyourForm.WMNCHitTest(var Message: TWMNCHitTest);
begin
 inherited;

 with Message do
  if Result = HTCAPTION then
    Result := HTNOWHERE;
end;

Un Saludo.

roman 23-11-2003 10:55:18

Cita:

marcoszorrilla comentó:
Aquí va otra:

Código:

Código que inhibe los clicks en la barra de título

¡Ah! Pero esta forma es demasiado inhibitoria ya que de plano inhabilita toda la barra de título incluyendo el menú contextual y además no evita que se mueva el formulario:

Menú sistema->Mover

(Creo que te hace falta tu café matutino :D )

Por cierto, creo que a quien finalmente ataron las manos fue a quien originalmente hizo la pregunta. Eso o salió mal parado en el intento.

:D

// Saludos

marcoszorrilla 23-11-2003 11:00:52

Cierto, me lo tomaré en breve. En cuanto al demandante de la información parece ser que alguien lo dejo en Enabled:=False;

Un Saludo.


La franja horaria es GMT +2. Ahora son las 05:51:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi