Inicio > Delphi, Programación, Trucos > Ventana que no se pueda mover (teclado y ratón)

Ventana que no se pueda mover (teclado y ratón)

Miércoles, 28 de Noviembre de 2007 Dejar un comentario Ir a comentarios
Share Button

Con este truco se intenta mostrar cómo hacer que un formulario estandard de delphi no se pueda mover utilizando el menú de sistema que aparece en la parte izquierda superior del formulario, ni arrastrandolo utilizando el ratón sobre la ventana de tútilo.
No se impide que el formulario pueda redimensionarse, aunque capturando los mensajes adecuados también sería posible impedirlo.

Para ello definimos un procedimiento privado al formulario e interceptamos los mensajes adecuados (SC_MOVE y HTCAPTION)

Definimos el procedimiento en la parte privada:

1
2
3
private
   //: Definimos el prcedimiento para capturar el mensaje
   procedure _InternalNoMove(var Message: TWMChar); message WM_SYSCOMMAND;

En la implementración colocamos esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//: Definimos el prcedimiento para capturar el mensaje
procedure TForm1._InternalNoMove (var Message: TWMChar);
begin
  // Mensajes que interceptamos...
  if (Message.Charcode = SC_MOVE or HTCAPTION) or
     (Message.Charcode = SC_MOVE) then begin
    // No hacemos nada || Nothing to do
 end
 else begin
   // Se deben procesar el resto de mensajes ||
   // Process messages  normally
   inherited;
 end;
end;

A partir de los sistemas Windows 2000 en adelante se puede utilizar el procedimiento GetLastInputInfo que se encuentra en la Unit Windows.pas y que puede utilizarse para calcular/obtener el tiempo total de inactividad a nivel de sistema (no de aplicación).
Con una simple llamada pueden obtenerse los segundos de inactividad.

1
2
3
4
5
6
7
8
9
10
// Devuelve los segundos de inactividad
// ejemplo vía "DelphiAbout"
function InactivitySystemSeconds(): DWord;
var
   liInfo: TLastInputInfo;
begin
   liInfo.cbSize := SizeOf(TLastInputInfo) ;
   GetLastInputInfo(liInfo) ;
   Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;
Share Button
  1. jose
    Jueves, 10 de Diciembre de 2015 a las 23:53 | #1

    Hola muy buenas tardes excelente post me agrada sigo visitando tus contenidos, buen la siguente pregunta en cuestion es que como bloquear una pantalla como protector de pantalla ni usando ctrl + alt + supr, si antes no se comprobar usuario y pass si son validos, mandando al server la respuesta si es asi dejarlos usar el escritorio de windows y abrir una pequena ventana en la passion no se izquierda o derecha superior y que muestre sus datos asi como sea transparente la ventana, gracias

  2. Neftalí
    Viernes, 11 de Diciembre de 2015 a las 08:50 | #2

    @jose
    Hola.
    Estas preguntas debes hacerlas en los foros (www.clubdelphi.com).
    los comentarios de la entrada son para temas relacionados con a propia entrada.

    Un saludo.

  1. Sin trackbacks aún.
What is 25 + 18 ?
Please leave these two fields as-is:
IMPORTANTE! Para continuar, debes contestar la pregunta anterior (para evitar SPAM) :-)