event.pp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. program event;
  2. {$MODE objfpc}{$H+}
  3. uses
  4. SysUtils, ptc;
  5. function ButtonState2Str(const bs: TPTCMouseButtonState): string;
  6. var
  7. I: TPTCMouseButton;
  8. begin
  9. Result := '';
  10. for I in TPTCMouseButton do
  11. if I in bs then
  12. WriteStr(Result, Result, ',', I);
  13. if Result = '' then
  14. Result := '[]'
  15. else
  16. begin
  17. Result[1] := '[';
  18. Result := Result + ']';
  19. end;
  20. end;
  21. function ModifierKeys2Str(const mk: TPTCModifierKeys): string;
  22. var
  23. I: TPTCModifierKey;
  24. begin
  25. Result := '';
  26. for I in TPTCModifierKey do
  27. if I in mk then
  28. WriteStr(Result, Result, ',', I);
  29. if Result = '' then
  30. Result := '[]'
  31. else
  32. begin
  33. Result[1] := '[';
  34. Result := Result + ']';
  35. end;
  36. end;
  37. var
  38. console: IPTCConsole;
  39. ev: IPTCEvent;
  40. Done: Boolean = False;
  41. RX, RY: Integer;
  42. begin
  43. try
  44. try
  45. console := TPTCConsoleFactory.CreateNew;
  46. console.Option('intercept window close');
  47. // console.Option('resizable window');
  48. console.Open('event test');
  49. repeat
  50. console.NextEvent(ev, True, PTCAnyEvent);
  51. if Supports(ev, IPTCMouseButtonEvent) then
  52. with ev as IPTCMouseButtonEvent do
  53. Writeln('IPTCMouseButtonEvent(X=', X, '; Y=', Y, '; DeltaX=', DeltaX,
  54. '; DeltaY=', DeltaY, '; ButtonState=', ButtonState2Str(ButtonState),
  55. '; Press=', Press, '; Release=', Release, '; Button=', Button, ')')
  56. else if Supports(ev, IPTCMouseEvent) then
  57. with ev as IPTCMouseEvent do
  58. Writeln('IPTCMouseEvent(X=', X, '; Y=', Y, '; DeltaX=', DeltaX,
  59. '; DeltaY=', DeltaY, '; ButtonState=', ButtonState2Str(ButtonState),
  60. ')')
  61. else if Supports(ev, IPTCKeyEvent) then
  62. with ev as IPTCKeyEvent do
  63. Writeln('IPTCKeyEvent(Code=', Code, '; Unicode=', Unicode, '; Press=',
  64. Press, '; Release=', Release, '; Alt=', Alt, '; Shift=', Shift,
  65. '; Control=', Control, '; ModifierKeys=',
  66. ModifierKeys2Str(ModifierKeys), ')')
  67. else if Supports(ev, IPTCResizeEvent) then
  68. with ev as IPTCResizeEvent do
  69. Writeln('IPTCResizeEvent(Width=', Width, '; Height=', Height, ')')
  70. else if Supports(ev, IPTCCloseEvent) then
  71. with ev as IPTCCloseEvent do
  72. Writeln('IPTCCloseEvent()')
  73. else
  74. Writeln('UNKNOWN EVENT TYPE');
  75. if Supports(ev, IPTCKeyEvent) then
  76. with ev as IPTCKeyEvent do
  77. if Press then
  78. begin
  79. case Code of
  80. PTCKEY_G:
  81. console.Option('grab mouse');
  82. PTCKEY_U:
  83. console.Option('ungrab mouse');
  84. PTCKEY_S:
  85. console.Option('show cursor');
  86. PTCKEY_H:
  87. console.Option('hide cursor');
  88. PTCKEY_R:
  89. console.Option('relative mouse on');
  90. PTCKEY_A:
  91. console.Option('relative mouse off');
  92. PTCKEY_M:
  93. begin
  94. RX := Random(console.Width);
  95. RY := Random(console.Height);
  96. Writeln('MoveMouseTo(', RX, ', ', RY, ')');
  97. if not console.MoveMouseTo(RX, RY) then
  98. writeln('MoveMouseTo FAILED (or is not supported by the console)');
  99. end;
  100. PTCKEY_Q:
  101. Done := True;
  102. end;
  103. end;
  104. until Done;
  105. finally
  106. if Assigned(console) then
  107. console.Close;
  108. end;
  109. except
  110. on error: TPTCError do
  111. error.Report;
  112. end;
  113. end.