Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2003
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
Como hacer que el usuario no mueva la form?

Pues la pmisma pregunta
como hacer que el usuario no mueva la form?
Responder Con Cita
  #2  
Antiguo 16-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 16-11-2003 a las 20:34:08.
Responder Con Cita
  #3  
Antiguo 16-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 16-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
yo me inclino por la 1era de Román con la observación de Marcos. Las otras soluciones.... no me gustan
Responder Con Cita
  #5  
Antiguo 16-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #6  
Antiguo 16-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 16-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 16-11-2003 a las 21:11:06.
Responder Con Cita
  #8  
Antiguo 23-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #9  
Antiguo 23-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #10  
Antiguo 23-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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 )

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.



// Saludos
Responder Con Cita
  #11  
Antiguo 23-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:51:13.


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