Autor |
Beitrag |
Apollo
      
Beiträge: 125
Windows 7
Delphi 3 Prof., Delphi 2005
|
Verfasst: Fr 02.05.08 20:35
Hallo Delphianer,
ich hab ein ganz blödes Problem: Ich möchte nämlich
in einem Formular während der Laufzeit ein Image verschieben.
Im Mousedown habe ich das probiert:
Delphi-Quelltext 1: 2:
| releasecapture; Perform(wm_syscommand, $f012,0); |
Das ganze Formular wird verschoben, nicht aber das Image im Formular.
Danke im voraus.
|
|
Fabian E.
      
Beiträge: 554
Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
|
Verfasst: Fr 02.05.08 20:43
ähm warum verschiebst du image nicht über die eigenschaften Top und Left?
gruß
|
|
somebody
      
Beiträge: 167
Erhaltene Danke: 2
|
Verfasst: Sa 03.05.08 20:54
ich würde sagen, dass das mit top und left besser geht. Also das hier dann in deine Mousedown Procedure schreiben.
Delphi-Quelltext 1:
| image1.top := image1.top + 1; |
So wird bei jedem MOuseklick das image um ein nach unten vershcoben. Und mit left nach links bzw rechts, jenachdem ob du + oder - verwendest.
Ich hoffe ich konnte helfen.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 03.05.08 23:31
Apollo hat folgendes geschrieben: | Delphi-Quelltext 1: 2:
| releasecapture; Perform(wm_syscommand, $f012,0); |
Das ganze Formular wird verschoben, nicht aber das Image im Formular. |
Das ist klar, du sendest die Move-Message ja auch an das Formular und nicht an das Bild. Dafür bräuchtest du
Delphi-Quelltext 1:
| Image1.Perform(wm_syscommand, $f012,0); |
Jetzt sagt Delphi aber: "Undefinierter Bezeichner: Perform". Und das auch zu Recht - Bilder können keine Messages empfangen. Das liegt daran, dass die von Delphi gezeichnet werden, und Messages eben von Windows gesendet werden. Windows kann keine Message an das Bild senden, weil es das gar nicht kennt. Das gilt übrigens für alle Komponenten, die von TGraphicControl abgeleitet sind.
Natürlich solltest du auch bein WinControls keine Messages versenden, sonder schlicht und einfach, wie bereits erwähnt, Left und Top verändern
Grüße,
Yogu
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 04.05.08 09:50
Du merkst dir einfach beim MouseDown die X und Y-Koordinaten und verschiebst dann bei MouseMove das Bild dann mit Left und Top um die Differenz der alten und der neuen Koordinaten.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 04.05.08 10:04
Siehe z.B. Source in diesem Post dort können die grünen Quadrate mit der Maus verschoben werden. Die Implementation von MouseDown/MouseMove/MouseUp funktioniert für alle TControls, d.h. auch für TImage.
 Mit Left/Top arbeiten, aber zuerst MouseCapture aufs Control.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 04.05.08 12:19
Was bewirkt das MouseCapture denn? Ich werde irgendwie aus der Hilfe nicht schlau... Standardmäßig werden doch Mausereignisse empfangen. 
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 04.05.08 12:55
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 04.05.08 17:18
Xion hat folgendes geschrieben: | Verschieben eines Formulars |
Da hast du dich wohl verlesen. Er will das Image verschieben, und das Formular hat sich stattdessen unerwünscht bewegt.
Warum denn so kompliziert? Einfache Zuweisungen von Left und Top der Bildkomponente reichen doch - was soll das denn alles mit MouseCapture o.Ä.?
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 04.05.08 18:08
Yogu hat folgendes geschrieben: | Xion hat folgendes geschrieben: | Verschieben eines Formulars |
Da hast du dich wohl verlesen. Er will das Image verschieben, und das Formular hat sich stattdessen unerwünscht bewegt. |
ja, das hab ich schon verstanden. Aber ein Image verschieben geht analog. Und meine Methode geht doch mit left und top *sich wundert*
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 04.05.08 18:09
könnte man nicht auch, wenn man auf's image klickt dass die position = mouse position ist??
ich finde so ist es am einfachsten.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 04.05.08 18:17
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 04.05.08 18:49
@j.klugmann: Zunächst müsste man beachten, dass die Mauskoordinaten nicht gleich Positionskoordinaten sind. Du könntest natürlich Left := Left + X schreiben, aber dann passiert das nur bei einem Klick und es geht halt nicht so schön wie bei Delphi oder PowerPoint oder solchen Programmen.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 04.05.08 19:20
Du könntest auch dein Image auf ein Panel ablegen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin ReleaseCapture; Panel1.Perform(wm_syscommand, $f012,0); end; end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 04.05.08 19:53
Da TImage standardmässig csCaptureMouse im ControlStyle hat, ist das mit dem MouseCapture nicht explizit notwendig. Das geschieht in diesem Fall automatisch in TControl.WMLButtonDown.
Sorry, wenn ich Verwirrung gestiftet habe 
|
|