Autor Beitrag
Apollo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Windows 7
Delphi 3 Prof., Delphi 2005
BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Fr 02.05.08 20:43 
ähm warum verschiebst du image nicht über die eigenschaften Top und Left?

gruß
somebody
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167
Erhaltene Danke: 2



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 03.05.08 23:31 
user profile iconApollo hat folgendes geschrieben:
ausblenden 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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.
:arrow: Mit Left/Top arbeiten, aber zuerst MouseCapture aufs Control.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: So 04.05.08 12:55 
Verschieben eines Formulars:
www.delphi-forum.de/...t=verschieben+bsnone

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 04.05.08 17:18 
user profile iconXion 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: So 04.05.08 18:08 
user profile iconYogu hat folgendes geschrieben:
user profile iconXion 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 04.05.08 18:17 
user profile iconXion hat folgendes geschrieben:
ja, das hab ich schon verstanden. Aber ein Image verschieben geht analog.

Stimmt. :)

user profile iconXion hat folgendes geschrieben:
Und meine Methode geht doch mit left und top *sich wundert*

Das ist wohl nicht ganz richtig rübergekommen. Ich meinte mit MouseCapture user profile icondelfiphan:

user profile icondelfiphan hat folgendes geschrieben:
Mit Left/Top arbeiten, aber zuerst MouseCapture aufs Control.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: So 04.05.08 19:20 
Du könntest auch dein Image auf ein Panel ablegen.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



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