Oppure

Loading
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
18/04/12 11:47
Poggi Marco
Ciao!

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

Le funzioni che controllano il mouse, sono qui: freepascal.org/docs-html/rtl/mouse/…, per le applicazioni console.
Per le applicazioni grafiche, usa la unit winmouse.
Per l' utilizzo, vedi questa discussione:
pierotofy.it/pages/extras/forum/71/76272-una_guida_completa_per_usare_il_mouse_/
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