gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
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
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
|
|
gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
ecco il programma che ho fatto
Codice sorgente - presumibilmente Delphi |
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 il 19/04/2012 alle 14:42 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|
gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
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ì:
Codice sorgente - presumibilmente Delphi |
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 il 19/04/2012 alle 14:42 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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:
Codice sorgente - presumibilmente Pascal |
TMouseEvent = packed record buttons : Word; x : Word; y : Word; Action : Word; end;
|
Applicato al tue esempio:
Codice sorgente - presumibilmente Delphi |
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 il 19/04/2012 alle 14:17 |
|
gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
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".
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|
gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
aah, si ho capito, come con i numeri con la virgola, che bisogna mettere tipo :3:4
per dire quanti numeri prima della virgola e quanti dopo, giusto? grazie mille
|
|