Ir al contenido


Foto

Capturar el movimiento del Mouse ayuda...


  • Por favor identifícate para responder
27 respuestas en este tema

#21 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 14 julio 2015 - 10:07

* Porque cuando utilizo un showmessage se queda como colgado el programita.

No puedes usar ShowMessage en el evento del hook porque no responderá el mouse hasta salir del ShowMessage. Si quieres hacerlo, envía un mensaje definido por usuario al Form y hazlo desde allí.
 

* Porque cuando el mouse toca el borde derecho o abajo el valor es el total-1 (es decir si el total es 1500, el mouse marca 1499).
Las coordenadas empiezan en cero y no en uno, por lo que la resolución de la pantalla, la ves restada en una unidad. Si quieres otro comportamiento, añade 1 a cada par de coordenadas.


* Como haría para saber cuando tocas las esquinas de la pantalla.


Con un condicional doble, if (X=MaxresoluciónX) and (y= MaxResoluciónY) then esquina...


Saludos.


  • 0

#22 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 14 julio 2015 - 01:04

Gracias amigo escafandra eres un Genio.  :) 


  • 0

#23 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 21 julio 2015 - 08:42

Amigo Escafandra una consultita, con respecto al showmessage en el hook, será fácil implementarlo para que no cuelgue el form. :)


  • 0

#24 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 23 julio 2015 - 08:09

Amigo Escafandra una consultita, con respecto al showmessage en el hook, será fácil implementarlo para que no cuelgue el form. :)

No se puede. Debes hacerlo en un thread a parte o enviar un mensage a tu formulario para que este lo procese.

No puedo ponerte un ejemplo, estoy de vacaciones sin PC. :(

Saludos.
  • 0

#25 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.459 mensajes
  • LocationMéxico

Escrito 23 julio 2015 - 08:17

No se puede. Debes hacerlo en un thread a parte o enviar un mensage a tu formulario para que este lo procese.

No puedo ponerte un ejemplo, estoy de vacaciones sin PC. :(

Saludos.

 

 

Ah que bien amigo escafandra, que la pases espectacular. Esperamos fotos del recuerdo :)

 

Un abrazo


  • 0

#26 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 23 julio 2015 - 09:55

Gracias egostar. Con el calor que estamos pasando ya hacen falta vacaciones.


Saludos.
  • 0

#27 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 23 julio 2015 - 05:20

Gracias por su respuesta amigo Escafandra, usted siempre un caballero :),  que la pase bonito en sus vacaciones, yo aquí seguiré intentando y subiré mis avances esperando su pronta ayuda.


  • 0

#28 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 05 agosto 2015 - 05:31

Un ejemplo de manejo de MessageBox en un MouseHook:

delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5.  
  6. interface
  7.  
  8. uses
  9. windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
  10.  
  11. const
  12. WH_MOUSE_LL =14;
  13. WM_MOUSEHOOK = WM_USER + 1; // definimos nuestro mensaje de usuario
  14.  
  15.  
  16. type
  17.  
  18. { TForm1 }
  19.  
  20. TForm1 = class(TForm)
  21. GroupBox1: TGroupBox;
  22. GroupBox2: TGroupBox;
  23. Label1: TLabel;
  24. Label2: TLabel;
  25. Label3: TLabel;
  26. Label4: TLabel;
  27. Label5: TLabel;
  28. Label6: TLabel;
  29. procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  30. procedure FormCreate(Sender: TObject);
  31. private
  32. Message: boolean;
  33. procedure OnMouseHook(var Msg: TMessage); message WM_MOUSEHOOK;
  34. public
  35. { public declarations }
  36. end;
  37.  
  38. var
  39. Form1: TForm1;
  40. hMouseHook: HHOOK;
  41.  
  42. function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar; uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall; external user32 name 'MessageBoxTimeoutA';
  43.  
  44. implementation
  45.  
  46. {$R *.lfm}
  47.  
  48. { TForm1 }
  49.  
  50. function MouseEvent(nCode, wParam, lParam: Integer): Integer; stdcall;
  51. var
  52. Point: TPoint;
  53. begin
  54. if nCode>=0 then
  55. begin
  56. GetCursorPos(Point);
  57. Form1.Label1.Caption:= '(Horizontal X: ' + IntToStr(Point.X) + ', Vertical Y: ' + IntToStr(Point.Y) + ')';
  58. PostMessage(Form1.Handle, WM_MOUSEHOOK, Point.X, Point.Y); // Enviamos el mensaje sin esperar respuesta y pasando coordenadas del mouse
  59. if Point.Y=0 then form1.Label3.Caption:='pegado arriba' else form1.Label3.Caption:='normal';
  60. if Point.X=0 then form1.Label4.Caption:='pegado izquierda' else form1.Label4.Caption:='normal';
  61. if Point.X=screen.Width-1 then form1.Label5.Caption:='pegado derecha' else form1.Label5.Caption:='normal';
  62. if Point.Y=screen.height-1 then form1.Label6.Caption:='pegado abajo' else form1.Label6.Caption:='normal';
  63. end;
  64. Result:= CallNextHookEx(hMouseHook, nCode, wParam, lParam);
  65. end;
  66.  
  67. procedure TForm1.OnMouseHook(var Msg: TMessage);
  68. begin
  69. if not Message then
  70. begin
  71. // Un semáforo para evitar la sobrecarga de mensajes, enviará uno por cada movimiento del Mouse...
  72. Message:= true;
  73. // Uso MessageBoxTimeOut para evitar problemas en el cierre de la aplicación
  74. // Maneja esto como te venga bien.
  75. MessageBoxTimeOut(0, PCHAR('Mouse (' + IntToStr(Msg.lParam) + ', ' + IntToStr(Msg.wParam)+')'),'MouseHook', MB_SYSTEMMODAL or MB_TOPMOST or MB_ICONINFORMATION, 0, 2000);
  76. Message:= false;
  77. end;
  78. end;
  79.  
  80. procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  81. begin
  82. // Paramos el Hook
  83. UnhookWindowsHookEx(hMouseHook);
  84. end;
  85.  
  86. procedure TForm1.FormCreate(Sender: TObject);
  87. begin
  88. Message:= false;
  89. form1.Label2.Caption:='El Ancho es: '+inttostr(Screen.Width)+' El alto es: '+inttostr(Screen.Height)+' Y el Pixel es: '+inttostr(Screen.PixelsPerInch); // Obtener las dimensiones de la pantalla
  90.  
  91. // Ponemos en marcha el Hook
  92. hMouseHook:= SetWindowsHookEx(WH_MOUSE_LL, @MouseEvent, HInstance, 0);
  93. end;
  94.  
  95. end.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.