![]() |
Mausklick
hi,
ICh möchte gern ein Shape bewegen, indem ich es anklicke und es dann dem Mauszeigerfolgt...(nur auffer X-achse) ICh hab mir sowas hier gedacht:
Delphi-Quellcode:
Mein HAuptprobelm ist, wie setz ich den linken Mausbutton "down" ?
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if TMouseButton(mbleft)= ???? then Shape1.left:=Mouse.CursorPos.X - (Shape1.Width div 2); end; also, wenn er gedrückt ist und man die MAus bewegt, bewegt sich auch das Shape :) ICh hoffe ihr könnt mir wie schon so oft helfen :)... Is wahrscheinlich wieder ganz simple und ich habs übersehn :) Greetz Spike |
Re: Mausklick
Führe eine weitere Variable ein
sagen wie lMouseDown die setzt du in MouseDown auf true und in MouseUp auf false in MouseMove prüfst du ob lMouseDown true ist und führst deine Bewegung aus! |
Re: Mausklick
Nimm ein boolean daher, und setze ihn bei onMouseDown true, und bei onMouseUp false. Nun kannst du onMouseMove diesen abfragen, und gegebenen Falls das Shape bewegen.
gruss, dizzy (*gnnnnnn - zu spät... :roll: *) |
Re: Mausklick
klappt :)...
Nur leider verrutsch mein Shape dann immer... also ich klick es an und kann es mit 5 cm Abstand verschieben.... Wie kann ich das verändern???
Delphi-Quellcode:
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if I=true then Shape1.left:=Mouse.CursorPos.X - shape1.width div 2; //??? end; |
Re: Mausklick
Delphi-Quellcode:
So ungefähr :gruebel:
// in Klasse
lMouseDown : Boolean; iMouseDownX : Integer; in ShapeMouseDown begin lMouseDown := true; iMouseDownX := X; end; in ShapeMouseUp begin lMouseDown := false; end; in ShapeMouseMove begin if lMouseDown then begin shape1.Left := shape1.Left + x - iMouseDownX; // das + oder kann auch ein - sein ??? iMouseDownX := x; end; end; |
Re: Mausklick
Check ich irgendwie nicht...
ich will ja den Integerwert nicht angeben, der ändert sich doch ständig... So, klappt das irgendwie ansatzweise...nur blinkt dann das Ding wie blöde und taucht auch rechts wieder auf:
Delphi-Quellcode:
//edit...ich glaub ich war wieder mal zu blöd, muss nochma was gucken ;) X is ja Mouse.CursorPos.X..dooh...na ma sehn...
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if I=true then Shape1.left:=Mouse.CursorPos.X - (Shape1.left-Mouse.CursorPos.X); end; |
Re: Mausklick
Klappt auch nich wirklich besser deine Vers....da blinkt das Ding auch wie hackedicht und zudem taucht es locker zweima auf... :cry:
|
Re: Mausklick
Mit dieser Operation "x - iMouseDownX" rechne ich die Relative Bewegung der Maus aus.
Die brauch ich damit ich weis um wieviel sich das Shape bewegen soll. Das Flackern kommt daher, weil das Shape andauernt neu gezeichnet wird. Das wäre aber ein Neues Thema. Erstmal sollte eins komplett funktionieren. -> Mach es Bitte mal so wie ich es beschrieben habe, vielleicht verstehst du es dann! |
Re: Mausklick
ICh habs so gemacht und hab jetzt zwei flackernde Shapes hier rumfahren...
|
Re: Mausklick
Die klappt die Bewegung jetzt wenigstens einwandfrei?
|
Re: Mausklick
das hinundherfahren?????
Das hat ja auch vorher schon geklappt, nur wenn das Shape sich dann in 2 teilt und zudem noch hinterherhängt, hilft das nicht unbedingt weiter.... :cry: |
Re: Mausklick
Versuch mal
DoubleBuffered := true; in FormCreate Zitat:
|
Re: Mausklick
^^ hab ich schon...
DAnke fürs Gespräch Buddy, bin selbst drauf gekommen... Der MAuszeiger wird fürs gesamte Bild berechnet...
Delphi-Quellcode:
Kein Ruckel, Blinken etc. und das Shape immer am MAuszeiger :) :) :)...
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin I:=false; end; procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin I:=true; end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if I=true then shape1.Left := Mouse.CursorPos.X - (1024-CLientwidth+(shape1.Width div 2)) //1024 is die Desktopauflösung in der Breite, gibts ne Eigenschaft die die Desktopauflösung behandelt?...weil man sonst pro Auflösung neu compilieren muss... end; Trotzdem danke für deine Mühe... :spin2: |
Re: Mausklick
Gern geschehen!
Screen.Width < - Breite des Bildschirms Screen.WorkAreaWidth < - Breiete des Desktops ClientWidth breite des Arbeitsbereiches des Fensters Gute Nacht! |
Re: Mausklick
Danke nochmal...hmm komisch...die Breite brauch ich ganich...obwohls ichs mir so gedacht hab...irgendwie ist die Höhe entscheidend...naja, is dann klar...ok, gute NAcht :)
|
Re: Mausklick
Warum nehmt ihr eine Variable zum Speichern ob die linke Maustaste gedrückt ist?
Folgendes sollte doch auch funtionieren:
Delphi-Quellcode:
//Ins MouseMove
if ssLeft in Shift then begin { ... } end; |
Re: Mausklick
Moin!
Anstatt fest mit einer Bildschirmbreite zu rechnen würde ich euch dringend mal ClientToScreen() bzw. ScreenToClient() der Form an's Herz legen... MfG Muetze1 |
Re: Mausklick
Warum nicht einfach die X- und Y-Parameter von MouseMove verwenden :wink: ?
|
Re: Mausklick
Und warum einen Thread vom Februar 2004 hochholen? :roll:
Greetz alcaeus |
Re: Mausklick
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz