18/04/12 10:20
gllobal
quali sono le funzioni della unit mouse ho pdi free pascal, in pratica come si usa, io rovato a fare un programma ma non funziona, ho usato sia initmouse che donemouse...
qualcuno mi puo scrivere un mini programma con la unit mouse di free pascal non quella nuova
aaa
19/04/12 7:12
gllobal
ecco il programma che ho fatto
program provamouse;
var
I,getx,gety:integer;
begin
initmouse;
I:=detectmouse;
if(I=0)then
writeln('errore')
else
begin
setmousexy(0,0);
repeat
getx:=getmousex;
gety:=getmousey;
until(getmousebuttons=mouserightbutton);
writeln(getx,' ',gety);
readln;
donemouse;
end;
end.
Ultima modifica effettuata da Phi 19/04/12 12:42
aaa
19/04/12 9:46
Poggi Marco
Il programma non funziona perché non hai dichiarato l' unità mouse nella sezione uses.
Inoltre, lo stream di input/output del mouse interferisce con il buffer da tastiera.
Di conseguenza, l' istruzione readln, devi metterla dopo il comando doneMouse.
aaa
19/04/12 10:53
gllobal
Unit mouse sul programma lo avevo messo, è che qui l'ho riscritto da capo e mi sono dimenticato di mettercelo(non ho fatto copy to windows perchè non avevo il prog. sotto gli occhi), invece come hai detto tu che interferisce con l'input da tastiera avevo letto questa cosa sempre su questo forum e ho fatto una cosa così:
program provamouse;
uses crt,mouse;
var
I,getx,gety:integer;
begin
clrscr;
initmouse;
I:=detectmouse;
if(I=0)then
begin
donemouse;
writeln('errore');
end
else
begin
initmouse;
setmousexy(0,0);
repeat
getx:=getmousex;
gety:=getmousey;
until(getmousebuttons=mouserightbutton);
donemouse;
writeln(getx,' ',gety);
readln;
end;
end.
non funziona uguale.
Ultima modifica effettuata da Phi 19/04/12 12:42
aaa
19/04/12 12:12
Poggi Marco
Non ti funziona perché fai scrivere le coordinate del mouse fuori dal ciclo. Inoltre, getmousebuttons potrebbe non essere "intercettato", col rischio di causare un ciclo infinito.
In questi acsi, utilizza la procedura getMouseEvent ( var e : TMouseEvent ).
TMouseEvent, è un record, definito in questo modo:
TMouseEvent = packed record
buttons : Word;
x : Word;
y : Word;
Action : Word;
end;
Applicato al tue esempio:
program provamouse;
uses crt, mouse;
var I:integer;
eventi:TMouseEvent;
begin
clrscr;
initmouse;
I:=detectmouse;
if(I=0)then
begin
donemouse;
writeln('errore');
end
else
begin
initmouse;
setmousexy(0,0);
repeat
getMouseEvent(eventi);
goToXY(3,7);
writeln('x:-> ',eventi.x:3,' y:-> ',eventi.y:3);
until(eventi.action=mouserightbutton); // il ciclo termina alla pressione del pulsante destro
donemouse;
end;
writeln;
write('Premi invio per continuare... ');
readln;
end.
Ultima modifica effettuata da Poggi Marco 19/04/12 12:17
aaa
26/04/12 11:13
gllobal
ciao, grazie mille l'ho provato e ora ho capito meglio, l'unica cosa che non ho capito è -----> writeln('x:-> ',eventi.x:3,' y:-> ',eventi.y:3);
non ho capito perchè c'è ":3".
aaa
26/04/12 12:46
Poggi Marco
Il :3 serve a formattare la variabile che va in stampa. In questo modo, indica che eventi.x e eventi.y, occuperanno sempre tre caratteri.
Per rendertene conto, prova a togliere il :3.
aaa