Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pascal: Hiiren liikkeen tunnistus

Wukkopi [20.04.2004 10:42:00]

#

Eli koodin pätkä joka lukee hiiren liikkeen suunnan ja määrän kuinka paljon on liikuttu.

(lisää muuttujat sinne paikallismäärityksiin)

var
  OldX, OldY,
  Suuruus     : Integer;
  Suuntasi    : String;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if X > OldX then Suuntasi := 'oikealle!'
  else if X < OldX then Suuntasi := 'vasemmalle!'
  else if Y > OldY then Suuntasi := 'alaspäin!'
  else if Y < OldY then Suuntasi := 'ylöspäin!';

 if X > OldX then Suuruus := X - OldX
  else if X < OldX then Suuruus := OldX - X
  else if Y > OldY then Suuruus := Y - OldY
  else if Y < OldY then Suuruus := OldY - Y;

 form1.canvas.textout(0,0,'Viimeksi on liikuttu  ' + Suuntasi+ '        ');
 form1.canvas.textout(0,12,'Ja vielä näin paljon viimeksi: ' + Inttostr(Suuruus)+'       ');

 OldX := X;
 OldY := Y;


end;

jouni13 [21.04.2004 15:51:24]

#

honey

arcatan [22.04.2004 16:02:58]

#

Yllä oleva koodi on omasta mielestäni avain hölmö. Tässä oma versioni asiasta:

var
  OldX, OldY: Integer;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
	suunta:		string;
  matka:		Integer;
begin
  // Onko siirrytty X:n suunnassa?
	if X < OldX then suunta := 'vasemmalle '
  else if X > OldX then suunta := 'oikealle ';

  // Onko siirrytty Y:n suunnassa
	if Y < OldY then suunta := suunta + 'ylös'
  else if Y > OldY then suunta := suunta + 'alas';

  matka := Trunc(Sqrt(Sqr(Abs(X - OldX)) + Sqr(Abs(Y - OldY))));

  // Ei jaksa käyttää Canvasta, se kun pitäisi aina pyyhkiä
  Caption := Format('matka: %d, suunta: %s', [matka, suunta]);

  OldX := X;
  OldY := Y;
end;

Koska harvemmin hiirtä liikutetaan vain yhteen suuntaan (siis ylös TAI vasemmalle TAI oikealle TAI alas) kerrallaan, tämä versio havaitsee useamman suunnan kerrallaan ja siirretyn matkan Pythagoraan lauseen perusteella. Tosin tämä havaitsee liikutuksen vain Formin sisäpuolella, koko Windowsissa pitäisi varmaan hookata hiiri.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta