Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mausbewegung => Bildbewegung... (https://www.delphipraxis.net/3023-mausbewegung-%3D-bildbewegung.html)

NeoDeluxe 18. Feb 2003 19:35


Mausbewegung => Bildbewegung...
 
Moin.
Ich will in meinem Programm so machen, dass wenn man die Maus schneller bewegt das das Bild sich auch schneller bewegt, Wie geht das?

janjan 18. Feb 2003 19:37

:wiejetzt:

Könntest du eventuell deine Frage etwas präziser stellen...

NeoDeluxe 18. Feb 2003 19:44

Also gut. Falsch geschrieben, haste Recht. Also ich glaub ihr alle hab als Kind mit Magneren gespielt. Jeder weist doch das positiven Polen sich gegenseitig abstossen. Genau so einen Effekt will ich realiesieren. Also der Mauszeiger soll ein "Magnet" sein, und das Bild.
Ist es jetzt vieleicht etwas verständlicher? :wink:

nailor 18. Feb 2003 20:09

Was hat das mit der Bewegung zu tun? Meine physikalischen Grundlagen meinen sich zu enstsinnen, dass es nur mit der Entfernung zu tun hat. Teste mit nem Timer alle X ms die Entfernung, und je nach der Enfernung (mit der Wurzel von ihr) bestimmst du den Einfluss, denn der Magnet hat und verschiebst das Bild...

...das ganze dürfte aber ziemlich ruckeln...

NeoDeluxe 19. Feb 2003 05:57

Soooooooooooooooooooooooooooooooooooooong! Sorry, hab nichts kapiert :oops: kannst du bitte etwas genauer erklären.=>Quelltext :?:
Danke.

Grüße NeoDeluxe :hi:

Daniel B 19. Feb 2003 21:39

Hi,

bin mir nicht sicher ob ich Dich verstanden habe, aber, Du kannst im "OnMouseMove" des Formulares, über Zugriff auf die X/Y-Koordinaten der Maus, Top/Left des Image setzen.

Könnte dann etwa so aussehen:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Top := Y;
  Image1.Left := X;
end;
Und das ganze hängt dann natürlich von der Geschwindigkeit der Maus ab! Ich denke das ist es was Du willst, hoff ich. ;)

Grüsse, Daniel :hi:

NeoDeluxe 20. Feb 2003 14:38

Zitat:

Ich denke das ist es was Du willst, hoff ich.
Tja, da ich Außländer bin wird mich hier nicht jeder verstehen. Aber das macht nichts, ich bin daran gewöhnt :mrgreen: . Also dein Effekt "Daniel B" war in der richtigen Richtung. Aber du hast genus das Gegenteil von dem was ich wollte gemacht hast. Also die Maus und das Bild müssen sich nicht "anziehen" sondern wie Magneten abstossen. Hast du bestimmt in Physik gelernt, dass positiven Polen sich gegenseitig abstossen. Und positiven und negativen Polen sich gegenseitig anziehen. Also ich muss sozusagen "positiv geladene" Objekte haben: das Bild und den Mauszeiger!

Sharky 20. Feb 2003 15:31

Hai NeoDeluxe,

mal als Gedankenmodel:

Du ermittelst den Mittelpunkt deines Bildes.
Jetzt ermittelst Du die Position der Maus.
Jetzt berechnest Du den Abstand zwichen den beiden.

Wenn dieser abstand unter einen bestimmten Wert kommt verschiebst Du dein Image von der Maus weg bis der mindestabstand wieder erreicht ist.

NeoDeluxe 20. Feb 2003 16:04

Soooooooooooooooooooooooooooooooooooooong! Sorry, hab nichts kapiert kannst du bitte etwas genauer erklären.=>Quelltext
Danke.

Grüße NeoDeluxe :hi:

Sharky 20. Feb 2003 16:49

Zitat:

Zitat von NeoDeluxe
Soooooooooooooooooooooooooooooooooooooong! Sorry, hab nichts kapiert kannst du bitte etwas genauer erklären.=>Quelltext
Danke.

Grüße NeoDeluxe :hi:


Na gut... hier der Quelltext (ist nur so auf die schnelle geschrieben)

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 bild_mitte        : TPoint;
 min_abstand       : Int64;
 abstand,
  dif_x,
  dif_y            : Extended;
 links,
  oben             : Integer;
begin
 bild_mitte.x := Image1.Left + (Image1.Width div 2);
 bild_mitte.y := Image1.Top + (Image1.Height div 2);
 min_abstand := 300;
 links := 0;
 oben := 0;
 dif_x := bild_mitte.x - x;
 dif_y := bild_mitte.y - y;
 if (dif_x < 0) then
  begin
   dif_x := dif_x * -1;
  end;
 if (dif_y < 0) then
  begin
   dif_y := dif_y * -1;
  end;
 abstand := Round(sqrt((dif_x * dif_x) + (dif_y * dif_y))); //Abstand der Maus zum Bild;
 if (abstand < min_abstand) then
  begin
   if (y <> bild_mitte.y) then
    begin
     if (y < bild_mitte.y) then
      begin
       oben := -1;
      end
     else
      begin
       oben := +1;
      end;
    end;
   if (x <> bild_mitte.x) then
    begin
     if (x < bild_mitte.x) then
      begin
       links := -1;
      end
     else
      begin
       links := +1;
      end;
    end;
   image1.Left := image1.left - links;
   image1.top := image1.top - oben;
  end;
end;
Was ich mache:

Ich ermittele den Mittelpunkt des Bildes.

Delphi-Quellcode:
 bild_mitte.x := Image1.Left + (Image1.Width div 2);
 bild_mitte.y := Image1.Top + (Image1.Height div 2);
Dann berechen ich die entfernung zur maus:
Delphi-Quellcode:
 abstand := Round(sqrt((dif_x * dif_x) + (dif_y * dif_y))); //Abstand der Maus zum Bild;
Satz des Pyt: a² + b² = c²

Und jetz prüfe ich nur noch ob die Maus oberhalb, unterhalb, links oder rechts vom Bild ist und verschiebe es entsprechend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf