Autor |
Beitrag |
Tobinator
Hält's aus hier
Beiträge: 4
|
Verfasst: Mo 01.02.10 23:14
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
|
|
Tobinator
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 02.02.10 22:09
|
|
Niko S.
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: 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
|
|
Tobinator
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 02.02.10 22:56
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
elundril
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Tobinator
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 02.02.10 23:10
Ok, ich schreibs in den andern auch mal dazu
|
|
Niko S.
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: 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
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.02.10 19:31
Hier findest du zu dem Thema einiges:
delphi.about.com/lib...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.
|
|