mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-24 14:40:31 +01:00
123 lines
3.5 KiB
ObjectPascal
123 lines
3.5 KiB
ObjectPascal
program event;
|
|
|
|
{$MODE objfpc}{$H+}
|
|
|
|
uses
|
|
SysUtils, ptc;
|
|
|
|
function ButtonState2Str(const bs: TPTCMouseButtonState): string;
|
|
var
|
|
I: TPTCMouseButton;
|
|
begin
|
|
Result := '';
|
|
for I in TPTCMouseButton do
|
|
if I in bs then
|
|
WriteStr(Result, Result, ',', I);
|
|
if Result = '' then
|
|
Result := '[]'
|
|
else
|
|
begin
|
|
Result[1] := '[';
|
|
Result := Result + ']';
|
|
end;
|
|
end;
|
|
|
|
function ModifierKeys2Str(const mk: TPTCModifierKeys): string;
|
|
var
|
|
I: TPTCModifierKey;
|
|
begin
|
|
Result := '';
|
|
for I in TPTCModifierKey do
|
|
if I in mk then
|
|
WriteStr(Result, Result, ',', I);
|
|
if Result = '' then
|
|
Result := '[]'
|
|
else
|
|
begin
|
|
Result[1] := '[';
|
|
Result := Result + ']';
|
|
end;
|
|
end;
|
|
|
|
var
|
|
console: IPTCConsole;
|
|
ev: IPTCEvent;
|
|
Done: Boolean = False;
|
|
RX, RY: Integer;
|
|
begin
|
|
try
|
|
try
|
|
console := TPTCConsoleFactory.CreateNew;
|
|
|
|
console.Option('intercept window close');
|
|
// console.Option('resizable window');
|
|
|
|
console.Open('event test');
|
|
|
|
repeat
|
|
console.NextEvent(ev, True, PTCAnyEvent);
|
|
if Supports(ev, IPTCMouseButtonEvent) then
|
|
with ev as IPTCMouseButtonEvent do
|
|
Writeln('IPTCMouseButtonEvent(X=', X, '; Y=', Y, '; DeltaX=', DeltaX,
|
|
'; DeltaY=', DeltaY, '; ButtonState=', ButtonState2Str(ButtonState),
|
|
'; Press=', Press, '; Release=', Release, '; Button=', Button, ')')
|
|
else if Supports(ev, IPTCMouseEvent) then
|
|
with ev as IPTCMouseEvent do
|
|
Writeln('IPTCMouseEvent(X=', X, '; Y=', Y, '; DeltaX=', DeltaX,
|
|
'; DeltaY=', DeltaY, '; ButtonState=', ButtonState2Str(ButtonState),
|
|
')')
|
|
else if Supports(ev, IPTCKeyEvent) then
|
|
with ev as IPTCKeyEvent do
|
|
Writeln('IPTCKeyEvent(Code=', Code, '; Unicode=', Unicode, '; Press=',
|
|
Press, '; Release=', Release, '; Alt=', Alt, '; Shift=', Shift,
|
|
'; Control=', Control, '; ModifierKeys=',
|
|
ModifierKeys2Str(ModifierKeys), ')')
|
|
else if Supports(ev, IPTCResizeEvent) then
|
|
with ev as IPTCResizeEvent do
|
|
Writeln('IPTCResizeEvent(Width=', Width, '; Height=', Height, ')')
|
|
else if Supports(ev, IPTCCloseEvent) then
|
|
with ev as IPTCCloseEvent do
|
|
Writeln('IPTCCloseEvent()')
|
|
else
|
|
Writeln('UNKNOWN EVENT TYPE');
|
|
|
|
if Supports(ev, IPTCKeyEvent) then
|
|
with ev as IPTCKeyEvent do
|
|
if Press then
|
|
begin
|
|
case Code of
|
|
PTCKEY_G:
|
|
console.Option('grab mouse');
|
|
PTCKEY_U:
|
|
console.Option('ungrab mouse');
|
|
PTCKEY_S:
|
|
console.Option('show cursor');
|
|
PTCKEY_H:
|
|
console.Option('hide cursor');
|
|
PTCKEY_R:
|
|
console.Option('relative mouse on');
|
|
PTCKEY_A:
|
|
console.Option('relative mouse off');
|
|
PTCKEY_M:
|
|
begin
|
|
RX := Random(console.Width);
|
|
RY := Random(console.Height);
|
|
Writeln('MoveMouseTo(', RX, ', ', RY, ')');
|
|
if not console.MoveMouseTo(RX, RY) then
|
|
writeln('MoveMouseTo FAILED (or is not supported by the console)');
|
|
end;
|
|
PTCKEY_Q:
|
|
Done := True;
|
|
end;
|
|
end;
|
|
until Done;
|
|
finally
|
|
if Assigned(console) then
|
|
console.Close;
|
|
end;
|
|
except
|
|
on error: TPTCError do
|
|
error.Report;
|
|
end;
|
|
end.
|