fpc/packages/ptc/tests/event.pp

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.