Entwickler-Ecke

Multimedia / Grafik - mehrere Objekte mit perform verschieben


Tobinator - Mo 01.02.10 23:14
Titel: mehrere Objekte mit perform verschieben
Hi,

ich hoffe ich bin hier richtig... Ich habe folgendes Problem:

ich möchte mir einen kleinen Reportdesigner bauen, auf dem ich unter anderem mehrere Objekte auswählen und verschieben kann. Ich kann schon mehrere Objekte auswählen und einzelne verschieben. Mit mehreren klappts aber noch nicht. Ich hab mit auf einem Testformular mal zwei Buttons hingepackt und wollte die beide verschieben.

Mein Versuch:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ReleaseCapture;
  if ssleft in Shift then
  begin
    Button1.Perform(WM_SYSCOMMAND,$F012,0);
    Button2.Perform(WM_SYSCOMMAND,$F012,0);
  end;
end;


Da wird aber nur der erste Button verschoben. Kann mir einer helfen??

PS: Ich will am ende nicht nur einfach Button2 um die selbe Differenz wie Button1 verschieben, weil ich ja schon wärend dem Verschieben sehen möchte, wo die Objete landen.

Danke schonmal :D


Tobinator - Di 02.02.10 22:09

keiner eine Idee??


Niko S. - Di 02.02.10 22:18

Setz den Zweiten button doch selbst.
Sprich wenn der 1 Button verschoben ist, setzt die die Position des Zweiten in der relation zum ersten.
Ist genau wie das, was du willst, nur dass se nicht beide gleichzeitig sichtbar verschoben werden ;x

//Edit
Crosspost: Delphipraxis [http://delphipraxis.net/topic172893_mehrere+objekte+mit+perform+verschieben.html]


Tobinator - Di 02.02.10 22:47

sry wegen dem Crosspost, aber ich war ziemlich verzweifelt und es hat ja keiner geantwortet.

Das nachträgliche verschieben wollte ich ja ebend nicht, ich wills ja schon wärend dem Verschieben sehen. Genau das ist ja mein Problem. Und alles selber machen (also left und top nach jedem mousemove neu setzen) wollte ich nach möglichkeit auch nicht. Gibts da keine andere möglichkeit, also von mir auch auch ohne Perform aber nach möglichkeit auhc nicht zu aufwendig.


Xentar - Di 02.02.10 22:56

Und hier auch nochmal..
http://forum.delphi-treff.de/showthread.php?t=28317


elundril - Di 02.02.10 23:07

crossposts sind nix schlimmes aber bitte halt immer dazuschreiben. Dann rätseln nicht jeweils 800 personen untereinander. sonder 2400 miteinander ;) wennst verstehst was ich meine.

lg elundril


Tobinator - Di 02.02.10 23:10

Ok, ich schreibs in den andern auch mal dazu


Niko S. - Di 02.02.10 23:57

Naja der eine sagte ja bereits, es funktioniert nicht mit perform, da es erst los lässt, wenn du los lässt.
Also musst du das wohl selbst programmieren.
Einfach beim "MouseDown" die derzeitigen x/y pos merken und dann beim move die differenz abziehen und die buttons verschieben. Beim mouse up lässt du das ganze dann wieder los.


jaenicke - So 14.02.10 19:31

Hier findest du zu dem Thema einiges:
http://delphi.about.com/library/weekly/aa102505a.htm

Da gehts jetzt nur um einzelne Komponenten, aber das lässt sich ja ausweiten. Idee: Beim Markieren eine Liste der Komponenten erstellen und dann alle in der Liste verschieben, egal welche angefasst wurde beim Verschieben.