36 FreeBASIC - SetMouse и GetMouse. Практика
Покажем на двух примерах как используются SetMouse и GetMouse.
Нарисуем с помощью SetMouse круг))) Нет, рисовать будет конечо же pset, а SetMouse будет указывать где рисуется точка.
Для рисования окружности воспользуемся параметрическим уравнением
dim as double x, y, t
const as double PI = 3.1415926835
ScreenRes 800,600
for t=0 to 2*PI step 2*PI/300
x = 400 + 200*COS(t)
y = 300 + 200*SIN(t)
SetMouse x,y
pset (x,y),11
sleep 90
next t
sleep
Но более интересно использовать GetMouse. Порисуем мышью - узнаем где находится курсор мыши и там поставим точку.
Dim As Integer x, y, b, r
ScreenRes 800, 600, 8
Do
r = GetMouse (x, y, , b)
If r = 0 Then
If b And 1 Then pset (x,y),11
If b And 2 Then cls
End If
Loop While Inkey = ""
End
Жаль что линия выглядит прерывистой, попробуем это исправить. Будем не точку ставить, а рисовать линию к следующей точке. Только вот первый раз, после нажатия кнопки мыши, точку всё же прийдётся поставить.
Dim As Integer x, y, b, r, lb
ScreenRes 640, 480, 8
lb=0
Do
r = GetMouse (x, y, , b)
If r = 0 Then
If (b And 1) then
if lb=0 then pset (x,y),11: lb=1
if lb=1 then line -(x,y),11
else lb=0
end if
If b And 2 Then cls: lb=0
End If
Loop While Inkey = ""
End
Добавим переменную lb
- она будет устанавливаться в 1 если левая кнопка нажата, и устанавливаться в 0 - если не нажата.
Умный компилятор FreeBASIC))) - разобрался)) куда отнести else lb=0
, к какому из трёх операторов if
if (b and 1) then
if lb=0 then pset (x,y),11: lb=1
if lb=1 then line -(x,y),11
else lb=0
end if
if (b and 1) then
if lb=0 then pset (x,y),11: lb=1
if lb=1 then line -(x,y),11 else lb=0
end if