Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Mittelpunkt von Timage rausfinden (https://www.delphipraxis.net/157788-mittelpunkt-von-timage-rausfinden.html)

xxsasch4xx 25. Jan 2011 08:33

Mittelpunkt von Timage rausfinden
 
Ich habe ein Programm programmiert in dem man die Bilder in den Images verschieben kann.
Ich will es so erweitern, dass wenn man ein Bild über den Mittelpunkt des anderen Bild schiebt, dass dann diese Bilder automatisch getauscht werden.
Die Bilder habe ich in einem Array angelegt, das tauschen wäre also kein Problem.
Die Bilder sollen natürlich auch tauschen, wenn das eine bild den Mittelpunkt vom anderen Bild zum Beispiel nur mit einer ecke berührt!
Es soll nicht nur dann tauschen, wenn das bild komplett darüber liegt.
Wenn der Mittelpunkt nicht berührt wird, wird das Bild wieder zurückgesetz.

Ich brauche also irgentwie die Koordinaten vom Mittelpunkt des Bildes.

Deep-Sea 25. Jan 2011 08:34

AW: Mittelpunkt von Timage rausfinden
 
Die Eigenschaften Left, Top, Width und Height helfen dir :wink:

Blup 25. Jan 2011 09:13

AW: Mittelpunkt von Timage rausfinden
 
Mittelpunkt ist einfach:
Delphi-Quellcode:
x := (Left + Right) div 2;
y := (Top + Bottom) div 2;

xxsasch4xx 25. Jan 2011 09:30

AW: Mittelpunkt von Timage rausfinden
 
Aber ich will das Programm ja so machen, dass die Bilder getauscht werden egal an welcher Stelle das verschobene bild die Mitte vom anderen Bild berührt
sonst muss man das bild ja genau dadrüber halten zum tauschen

DeddyH 25. Jan 2011 09:33

AW: Mittelpunkt von Timage rausfinden
 
Die Mitte kannst Du ja errechnen. Nun ermittelst Du mit IntersectRect das Rechteck der Überlappung und prüfst mit PtInRect, ob der Mittelpunkt in diesem Rechteck enthalten ist. Wenn ja, dann tauschen.

Deep-Sea 25. Jan 2011 09:36

AW: Mittelpunkt von Timage rausfinden
 
Man kann auch gleich mit PtInRect prüfen, ob der Mittelpunkt von Image A im Bereich von Image B liegt. IntersectRect braucht man dafür nicht mal...

DeddyH 25. Jan 2011 09:39

AW: Mittelpunkt von Timage rausfinden
 
Stimmt, da hab ich zu weit gedacht. Allerdings sollte man nach dem Tauschen ein Flag setzen, sonst würde ja gleich wieder getauscht, wenn ich das richtig verstanden habe.

stahli 25. Jan 2011 11:59

AW: Mittelpunkt von Timage rausfinden
 
Ich habe das etwas komplexer gelöst. Falls Dich der Ansatz interessiert, kann ich Dir mal etwas Quellcode zeigen (ist aber recht umfangreich).

Ich habe Panels in einer ScrollBox. Diese sind Align=alNone!
Wenn der User ein Panel verschiebt, wird dieses als DragPanel gemerkt, mit BringToFront in den Vordergrund gesetzt und an die neue Position gesetzt.

In dem Moment werden existierende Panels "virtuell" entsprechend vor oder nach das DragPanel verschoben (nur in einer Soll-Position).
Gleichzeitig wird ein Timer gestartet, der die Panels (außer das DragPanel) von der aktuellen Position schrittweise zur Sollposition schiebt.
Wird das DragPanel weiter geschoben, wiederholt sich der Vorgang.

Wird der DragVorgang beendet, wird auch das DragPanel an die Zielposition verschoben. Der Timer wird beendet, wenn alle Zielpositionen erreicht sind.

Dadurch erhält man sehr fließende Positionsänderungen.

(Kann man im "Olympic" auf meiner Homepage im Formular "Verein bearbeiten" mit dem Verein "Halle 06 e.V." am besten nachvollziehen.)

EDIT: Ich kann heute Abend auf Wunsch mal ein Video zeigen.

stahli 25. Jan 2011 13:11

AW: Mittelpunkt von Timage rausfinden
 
Zitat:

Zitat von xxsasch4xx (Beitrag 1077138)
Aber ich will das Programm ja so machen, dass die Bilder getauscht werden egal an welcher Stelle das verschobene bild die Mitte vom anderen Bild berührt
sonst muss man das bild ja genau dadrüber halten zum tauschen

Grundsätzlich musst Du prüfen, ob das DragImage ursprünglich weiter links ist als das DropImage UND sich die horizontale Mitte das DragImage weiter rechts befindet als die des DropImage. Dann musst Du tauschen.
Analog in die andere Richtung und für die vertikale Ausrichtung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz