Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Detectar clic del ratón en toda la aplicación (https://www.clubdelphi.com/foros/showthread.php?t=40024)

zurech 05-02-2007 18:29:03

Detectar clic del ratón en toda la aplicación
 
Buenas a todos/as.

Os explico mi problema, necesito poder detectar cuando se hace clic en una animación Flash que por supuesto no tiene el evento OnMouseClic.
Por ello he pensado en detectar simplemente cuando hay un clic de ratón (sea donde sea) y entonces obtener las coordenadas del ratón para calcular si hace clic sobre la animación.

La putada es que no se como detectar que se ha hecho clic con el ratón.
He estado probando con el componente JvWindowHook de la Jedi Library, pero no lo consigo hacer funcionar.
También he visto por hay unos comentarios de roman (me parece) donde hace referencia a unas clases hechas por él sobre hooks, pero el enlace ya no funciona.

A ver si alguno/a sabeis como puedo conseguirlo.

Gracias de antemano y me parece que no he repetido ninguna pregunta ya hecha, si lo he hecho sorry.

ArdiIIa 05-02-2007 18:46:25

Bueno, supongo que la animación Flash, está embebida dentro de tu aplicación, y si es así, supongo que con un simple TApplicationEvents controlando el envento OnMessage y dentro de este procedimiento controlando algo tal como esto, debería ser suficiente.
Código Delphi [-]
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);
begin
if Msg.message = WM_LBUTTONUP  THEN
ShowMessage('Click');
end;

Si no es así, sería cuestión de controlar la ventana donde está el Flash y controlar los mensajes de esta....

He realizado la prueba de insertar una imagen flash en un form mediante un TShockwaveFlash extraído del OCX correspondiente, y el procedimiento descrito anteriormente funciona correctamente

zurech 05-02-2007 18:56:46

Muchas gracias ArdiIIa funciona a la perfección.

Para los que, como yo, no sepan que es eso del TApplicationEvents, deciros que es un componente que encontrareis en la barra de componentes dentro del apartado Additional

ArdiIIa 05-02-2007 19:07:01

Otra alternativa a TApplicationEvents, es desviar en nuestra aplicación el proceso de los mensajes recibidos tal como:

Código Delphi [-]
private
  FClientInstance : TFarProc;
  FPrevClientProc : TFarProc;


procedure TFormMain.FormCreate(Sender: TObject);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));
SetWindowLong(ClientHandle,GWL_WNDPROC, LongInt(FClientInstance));
end;



procedure TFormMain.ClientWndProc(var Message: TMessage);
var
    Dc : hDC;
    Row,col: Integer;
    Bit      : TBitmap;
begin
   with Message do
     case Msg of
     WM_KEYDOWN:
       ProcesarTeclado(Message);
       bla, bla bla....
            Result := 1;
       end;
       else
         Result := CallWindowProc(FPrevClientProc,
                                  ClientHandle,
                                  Msg,
                                  wParam,
                                  lParam);
   end;


 end;


La franja horaria es GMT +2. Ahora son las 14:16:42.

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