![]() |
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. |
AW: Mittelpunkt von Timage rausfinden
Die Eigenschaften Left, Top, Width und Height helfen dir :wink:
|
AW: Mittelpunkt von Timage rausfinden
Mittelpunkt ist einfach:
Delphi-Quellcode:
x := (Left + Right) div 2;
y := (Top + Bottom) div 2; |
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 |
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.
|
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...
|
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.
|
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. |
AW: Mittelpunkt von Timage rausfinden
Zitat:
Analog in die andere Richtung und für die vertikale Ausrichtung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz