WARUM!?! (läßt sich mein image nicht verschieben)

Hallo. Ich möchte eine Image-Komponente zur Laufzeit bei Ereignis OnMouseDown verschieben, wie man das überall im Internet nachlesen kann (z.B. http://members.kr.inter.net/khouse/3kdt/ mit „Move“ und „components“ als Suchbegriff).

Meine Methode ist dabei einfach:

TWincontrol(sender).perform(WM_LBUTTONUP, 0, 0);
TWincontrol(sender).Perform(WM_SysCommand,SC_MOVE+2,2);

(gebunden an eben das Ereignis OnmouseDown der Komponente Image)

Der Benutzer soll also das Image mit der Maus anfassen und zur Laufzeit an einen anderen Ort innerhalb des Formulars verschieben können.

Das Problem: Mit den Komponenten Edit, Label und Button funktionert’s, aber nicht mit Image oder Label.

Warum nicht … und was muss ich tun, damit ich die Image-Grafik verschieben kann?

Ratsuchend, Jens.

Hallo Jens!

Ich möchte eine Image-Komponente zur Laufzeit bei
Ereignis OnMouseDown verschieben

Meine Methode ist dabei einfach:

TWincontrol(sender).perform(WM_LBUTTONUP, 0, 0);
TWincontrol(sender).Perform(WM_SysCommand,SC_MOVE+2,2);

(gebunden an eben das Ereignis OnmouseDown der Komponente
Image)

Der Benutzer soll also das Image mit der Maus anfassen und zur
Laufzeit an einen anderen Ort innerhalb des Formulars
verschieben können.

Das Problem: Mit den Komponenten Edit, Label und Button
funktionert’s, aber nicht mit Image oder Label.

Den Grund dafür erkennst Du sofort, wenn Du Dir den Hierarchiebaum der VCL anguckst (siehe z. B. E. Warken, Delphi 5): Images sind im Gegensatz zu Edits, Labels und Buttons einfach keine WinControls (sie sind damit also auch keine echten Windows-Fenster mit Handles usw.). Die TImage-Klasse sowie auch die TBevel-, TSpeedButton-, TShape-, TPaintBox-Klasse und noch einige andere sind alle von TGraphicControl abgeleitet, und TGraphicControl hat TControl als Vorfahr. TWinControl stammt ebenfalls von TControl ab.

Deine Methode funktioniert nur mit Objekten der Klasse TWinControl.

Ratsuchend, Jens.

Sich auf irgendeine Art von Feedback freuend
Martin