1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
{
Keyboard example for the PTCPas library
This source code is in the public domain
}
program KeyboardExample2;
{$MODE objfpc}
uses
ptc;
var
console: IPTCConsole;
surface: IPTCSurface;
format: IPTCFormat;
color: IPTCColor;
timer: IPTCTimer;
key: IPTCKeyEvent;
x, y, delta: Real;
left, right, up, down: Boolean;
size: Integer;
Done: Boolean;
begin
left := False;
right := False;
up := False;
down := False;
try
try
{ create console }
console := TPTCConsoleFactory.CreateNew;
{ enable key release events }
console.KeyReleaseEnabled := True;
{ create format }
format := TPTCFormatFactory.CreateNew(32, $00FF0000, $0000FF00, $000000FF);
{ open the console }
console.open('Keyboard example 2', format);
{ create timer }
timer := TPTCTimerFactory.CreateNew;
{ create surface matching console dimensions }
surface := TPTCSurfaceFactory.CreateNew(console.width, console.height, format);
{ setup cursor data }
x := surface.width div 2;
y := surface.height div 2;
size := surface.width div 10;
color := TPTCColorFactory.CreateNew(1, 1, 1);
{ start timer }
timer.start;
{ main loop }
Done := False;
repeat
{ check for key press/release }
while console.KeyPressed do
begin
console.ReadKey(key);
case key.code of
PTCKEY_LEFT: left := key.press;
PTCKEY_RIGHT: right := key.press;
PTCKEY_UP: up := key.press;
PTCKEY_DOWN: down := key.press;
PTCKEY_ESCAPE: begin
Done := True;
Break;
end;
end;
end;
{ move square }
delta := timer.delta*100;
if left then
x := x - delta;
if right then
x := x + delta;
if up then
y := y - delta;
if down then
y := y + delta;
{ clear surface }
surface.clear;
{ draw cursor as a quad }
surface.clear(color, TPTCAreaFactory.CreateNew(Trunc(x) - size, Trunc(y) - size, Trunc(x) + size, Trunc(y) + size));
{ copy to console }
surface.copy(console);
{ update console }
console.update;
until Done;
finally
if Assigned(console) then
console.close;
end;
except
on error: TPTCError do
{ report error }
error.report;
end;
end.
|