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;
honey
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.