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:
private
{ Private declarations }
//: Definimos el prcedimiento para capturar el mensaje
procedure _InternalNoMove(var Message: TWMChar); message WM_SYSCOMMAND;
En
la implementración colocamos esto:
//: 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.
// 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;
Indice