Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mausklick (https://www.delphipraxis.net/16429-mausklick.html)

Spike2k3 16. Feb 2004 22:21


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:
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;
Mein HAuptprobelm ist, wie setz ich den linken Mausbutton "down" ?
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

neolithos 16. Feb 2004 22:47

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!

dizzy 16. Feb 2004 22:48

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: *)

Spike2k3 16. Feb 2004 23:03

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;

neolithos 16. Feb 2004 23:08

Re: Mausklick
 
Delphi-Quellcode:
// 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;
So ungefähr :gruebel:

Spike2k3 16. Feb 2004 23:17

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:
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;
//edit...ich glaub ich war wieder mal zu blöd, muss nochma was gucken ;) X is ja Mouse.CursorPos.X..dooh...na ma sehn...

Spike2k3 16. Feb 2004 23:21

Re: Mausklick
 
Klappt auch nich wirklich besser deine Vers....da blinkt das Ding auch wie hackedicht und zudem taucht es locker zweima auf... :cry:

neolithos 16. Feb 2004 23:22

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!

Spike2k3 16. Feb 2004 23:25

Re: Mausklick
 
ICh habs so gemacht und hab jetzt zwei flackernde Shapes hier rumfahren...

neolithos 16. Feb 2004 23:26

Re: Mausklick
 
Die klappt die Bewegung jetzt wenigstens einwandfrei?

Spike2k3 16. Feb 2004 23:27

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:

neolithos 16. Feb 2004 23:31

Re: Mausklick
 
Versuch mal

DoubleBuffered := true; in FormCreate


Zitat:

Zitat von Spike2k3
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....

Versteh ich nicht was du da willst? :gruebel:

Spike2k3 16. Feb 2004 23:39

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:
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;
Kein Ruckel, Blinken etc. und das Shape immer am MAuszeiger :) :) :)...
Trotzdem danke für deine Mühe... :spin2:

neolithos 16. Feb 2004 23:42

Re: Mausklick
 
Gern geschehen!

Screen.Width < - Breite des Bildschirms

Screen.WorkAreaWidth < - Breiete des Desktops

ClientWidth breite des Arbeitsbereiches des Fensters

Gute Nacht!

Spike2k3 16. Feb 2004 23:47

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 :)

F.W. 11. Mai 2005 14:22

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;

Muetze1 11. Mai 2005 15:38

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

Khabarakh 11. Mai 2005 15:42

Re: Mausklick
 
Warum nicht einfach die X- und Y-Parameter von MouseMove verwenden :wink: ?

alcaeus 11. Mai 2005 15:44

Re: Mausklick
 
Und warum einen Thread vom Februar 2004 hochholen? :roll:

Greetz
alcaeus

F.W. 11. Mai 2005 17:32

Re: Mausklick
 
Zitat:

Zitat von alcaeus
Und warum einen Thread vom Februar 2004 hochholen? :roll:

Weil ich drüber gestolpert bin und auch mal was produktives posten wollte :angel2:


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