AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte bewegen

Ein Thema von -remit- · begonnen am 7. Okt 2009 · letzter Beitrag vom 7. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
-remit-

Registriert seit: 11. Jan 2008
20 Beiträge
 
Delphi 2005 Personal
 
#1

Objekte bewegen

  Alt 7. Okt 2009, 12:27
Huhu,

ich möchte gerne ein Objekt (zur Zeit ist es ein einfacher Button, später soll es ein Image werden) bewegen. Zuersteinmal geschieht dies nur in x-Richtung. Mehr brauche ich glaube ich nicht sagen, der Quelltext macht deutlich was ich möchte:

Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift = [ssLeft] then
    begin
      if isright(x) then
        Button1.Left:=Button1.Left+1
      else
        Button1.Left:=Button1.Left-1;
    end;
end;
Delphi-Quellcode:
function isright (xvalue: integer): boolean;
begin
  if (lastpx < xvalue) and (xvalue <> lastpx) then
    result:=true
  else
    result:=false;
  lastpx:=xvalue;
end;
Wenn ich jetzt auf das Panel klicke und die Maus bewege saust der Button nach links und verschwindet von der Form. Ich habe schon sehr viel ausprobiert, dies ist jetzt ein letzter Quelltext stand.
Wo ist der Fehler?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:16
Du darfst den Button nicht einfach um 1 verschieben, sondern musst ihn dahin verschieben, wo deine Maus ist (ich denke, dass willst du)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
-remit-

Registriert seit: 11. Jan 2008
20 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:24
Wenn die Maus 1 pixel nach rechts bewegt wird, soll der Button auch 1 pixel nach rechts verschoben werden, genau das gleiche in die linke Richtung. Der Button soll nicht auf der gleichen Position sein wie die Mausposition, sondern davon unabhängig.


PS: Das OnMouseMove Event wird ja jedes mal ausgelöst wenn die Maus bewegt wird. Jedes nach links/rechts Bewegen soll eine links/rechts Bewegung des Buttons nach sich ziehen.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:31
Also ein parallele Bewegung zur Maus (und wahrscheinlich auch, wenn die Maus aus dem Formular heraustritt..), ok.
Dann darfst du nicht um 1 verändern, sondern um die Differenz deiner Mausbewegung.

zu Edit: Aber die Differenz muss nicht 1 sein.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:32
Dann ist das was du da hast doch richtig. Wo ist dein eigentliches Problem?

Am Rande: Wenn (lastpx < xvalue), dann ist es auf jeden Fall auch <> xvalue. Deine 2. Prüfung in isright() kannst du also sparen.

Edit: Achso, das Objekt soll auf selber X-Koordinate wie die Maus sein, aber auf fixer Y-Koordinate? Wenn ja, dann bitte ich künftig um präziesere Fragestellung. Zur Lösung siehe sirius' Post über diesem . Auch wäre es dann möglich gleich die X-Koordinate des Cursors zu nehmen, und nicht um Differenzen zu verschieben - wie schon zuvor vorgeschlagen, aber halt ohne Y zu verändern. Man muss ja nicht immer beide zusammen ändern...
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
-remit-

Registriert seit: 11. Jan 2008
20 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:35
Mein Problem ist, dass das ganze nicht funktioniert Wenn ich jetzt auf das Panel klicke und die Maus nur 1 pixel bewege, egal ob nach links oder nach rechts, saust der Button mit einem hohen Tempo nach links von der Form runter, das gute Stück verschiebt sich nicht um 1 pixel sondern um undendlich viele...

Edit @Medium: In meinem Anfangspost steht doch nur in x-Richtung und auch, dass der Button von der Form verschwindet und dies mein Problem sei...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:37
Button auf Form.
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift = [ssLeft] then
  begin
    Button1.Left:=Button1.Left-(FMouseOld.X-X);
    //Button1.Top:=Button1.Top-(FMouseOld.Y-Y);
  end;

  FMouseOld.X:=X;
  FMouseOld.Y:=Y;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:38
Nein, nicht unendlich viele. MouseMove wird offenbar nicht nur aufgerufen wenn sich die Maus sichtbar bewegt hat, sondern auch im Subpixel-Bereich, entsprechend der Auflösung der Maus. D.h. es könnte durchaus auch mal 100 mal MouseMove auftreten, bevor sie um einen Pixel fortgeschritten ist.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:39
Zitat von -remit-:
Edit @Medium: In meinem Anfangspost steht doch nur in x-Richtung und auch, dass der Button von der Form verschwindet und dies mein Problem sei...
1) Ok, stimmt
2) Das ist ja ein ganz anderes Problem: Du musst abfragen ob sich der Button schon am Rand befindet, wenn ja einfach nicht verschieben.

Edit: Grmpf. Es müsste einen Edit+Quote-Button geben =)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
-remit-

Registriert seit: 11. Jan 2008
20 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Objekte bewegen

  Alt 7. Okt 2009, 13:40
Ah Ok, darin liegt das Problem danke!

Edit: Das ganze lässt sich damit umgehen:

Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  sleep(1);
  if (Shift = [ssLeft]) and (x <> lastpx) then
    begin
      if isright(x) then
        Button1.Left:=Button1.Left+1
      else
        Button1.Left:=Button1.Left-1;
    end;
end;
wichtig die Ergänzung and (x <> lastpx) jetzt funktioniert es so wie ich es möchte...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz