Windows - interceptando mensagens

Top  Previous  Next

var

  OldWindowProc : Pointer;

 

type

  WParameter = LongInt;

  LParameter = LongInt;

 

implementation

 

function NewWindowProc(WindowHandle: hWnd;  TheMessage: WParameter; ParamW: WParameter;  ParamL: LParameter): LongInt; stdcall;

begin

  // Verifica se a mensagem é a barra de rolagem sendo mechida...

  if TheMessage = WM_VSCROLL then

  begin

    // Caso queira abortar a mensagem basta retornar ZERO e EXIT...

    Result := 0;

    Exit;

  end;

  // Chama a rotina velha para processar as outras mensagens

  NewWindowProc := CallWindowProc(OldWindowProc, WindowHandle, TheMessage, ParamW, ParamL);

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  OldWindowProc := Pointer(SetWindowLong(DbGrid1.Handle, GWL_WNDPROC, Longint(@NewWindowProc)));

end;

 

procedure TForm1.FormDestroy(Sender: TObject);

begin

  SetWindowLong(DbGrid1.Handle, GWL_WNDPROC, LongInt(OldWindowProc));

end;