Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - unit mouse del free pascal
Forum - Pascal - unit mouse del free pascal

Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 12:20
Mercoledì, 18/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

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:47
Mercoledì, 18/04/2012
Ciao!

Che cosa, esattamente non ti funziona? ( Posta il programma che hai creato. )

Le funzioni che controllano il mouse, sono qui: http://www.freepascal.org/docs-html/rtl/mouse/index-5.html, per le applicazioni console.
Per le applicazioni grafiche, usa la unit winmouse.
Per l' utilizzo, vedi questa discussione:
http://www.pierotofy.it/pages/extras/forum/71/76272-una_gu ...

PM Quote
Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 9:12
Giovedì, 19/04/2012
ecco il programma che ho fatto

Codice sorgente - presumibilmente Delphi

  1. program provamouse;
  2. var
  3.  I,getx,gety:integer;
  4. begin
  5.  initmouse;
  6.  I:=detectmouse;
  7.  if(I=0)then
  8.   writeln('errore')
  9.   else
  10.   begin
  11.   setmousexy(0,0);
  12.   repeat
  13.   getx:=getmousex;
  14.   gety:=getmousey;
  15.   until(getmousebuttons=mouserightbutton);
  16.   writeln(getx,'  ',gety);
  17.   readln;
  18.  donemouse;
  19. end;
  20. end.


Ultima modifica effettuata da Phi il 19/04/2012 alle 14:42
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 11:46
Giovedì, 19/04/2012
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.

PM Quote
Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 12:53
Giovedì, 19/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

  1. program provamouse;
  2. uses crt,mouse;
  3. var
  4. I,getx,gety:integer;
  5. begin
  6. clrscr;
  7. initmouse;
  8. I:=detectmouse;
  9. if(I=0)then
  10. begin
  11.  donemouse;
  12.   writeln('errore');
  13.   end
  14.   else
  15.   begin
  16.   initmouse;
  17.   setmousexy(0,0);
  18.   repeat
  19.   getx:=getmousex;
  20.   gety:=getmousey;
  21.   until(getmousebuttons=mouserightbutton);
  22.   donemouse;
  23.   writeln(getx,'  ',gety);
  24.   readln;
  25. end;
  26. end.



non funziona uguale.

Ultima modifica effettuata da Phi il 19/04/2012 alle 14:42
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:12
Giovedì, 19/04/2012
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

  1. TMouseEvent = packed record
  2.   buttons : Word;
  3.   x : Word;
  4.   y : Word;
  5.   Action : Word;
  6. end;

Applicato al tue esempio:
Codice sorgente - presumibilmente Delphi

  1. program provamouse;
  2. uses crt, mouse;
  3. var I:integer;
  4.     eventi:TMouseEvent;
  5.  
  6. begin
  7.   clrscr;
  8.   initmouse;
  9.   I:=detectmouse;
  10.   if(I=0)then
  11.   begin
  12.     donemouse;
  13.     writeln('errore');
  14.   end
  15.   else
  16.   begin
  17.     initmouse;
  18.     setmousexy(0,0);
  19.   repeat
  20.     getMouseEvent(eventi);
  21.     goToXY(3,7);
  22.     writeln('x:-> ',eventi.x:3,' y:-> ',eventi.y:3);
  23.   until(eventi.action=mouserightbutton); // il ciclo termina alla pressione del pulsante destro
  24.     donemouse;
  25.   end;
  26.   writeln;
  27.   write('Premi invio per continuare... ');
  28.   readln;
  29. end.


Ultima modifica effettuata da Poggi Marco il 19/04/2012 alle 14:17
PM Quote
Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 13:13
Giovedì, 26/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".

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:46
Giovedì, 26/04/2012
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.

PM Quote
Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 14:53
Giovedì, 26/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

PM Quote