AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag Drop / Brauche Hilfe!

Offene Frage von "Jerry"
Ein Thema von Jerry · begonnen am 13. Apr 2006 · letzter Beitrag vom 13. Apr 2006
Antwort Antwort
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#1

Drag Drop / Brauche Hilfe!

  Alt 13. Apr 2006, 08:02
Guten Morgen allerseits

Ich möchte noch vor den Ostertagen folgende anspruchsvolle Aufgabe lösen:

Ich habe hier im Anhang ein kleines Testprojekt, das ich von einem sehr grossen anderen Projekt vereinfacht habe.

Es geht um Drag und Drop auf Panels.

Auf der Maske liegen 7 Panels. Auf die Panels kommen per Drag und Drop nur Groupboxen.
Wenn Ihr das Projekt startet könnt Ihr die GroupBox1 und GroupBox2 schon beliebig verschieben.

Wenn die GroupBox1 auf den Panel von GroupBox2 verschoben wird, geht die GroupBox2 auf den "alten Panel" von GroupBox1.

Soweit so gut....

Jetzt das Problem: Ich habe eine GroupBox3 die doppelt so lang ist wie die anderen Groupboxen. Um das Problem zu veranschaulichen, drücke man Button1. Sobald die GroupBox3 ins "Spiel kommt" muss das Programm entsprechend reagieren.

Wenn Panel1 und Panel2 von GroupBox1 und 2 belegt sind, und die GroupBox3 auf Panel2 per Drag und Drop verschoben wird, muss das Panel von GroupBox3 wieder klein werden, und die GroupBox1 und 2 müssen auf Panel5 und 6 verschoben werden. Die GroupBox3 muss dann auf Panel1 liegen, obwohl auf Panel2 verschoben wurde. Das Panel1 ist demzufolge grösser geworden und überdeckt Panel2. Mit bringtoFront bringt man das entsprechend hin.

Anderes Beispiel: Der Panel4 ist belegt von GroupBox2 der Panel3 ist leer. Jetzt wird die GroupBox3 auf Panel5 verschoben.

Jetzt muss:

Panel5 klein werden
Die GroupBox2 von Panel4 muss auf Panel6 verschoben werden
die GroupBox3 muss nun auf Panel3 (obwohl auf Panel4 verschoben)
der Panel4 muss gross werden, damit die GroupBox3 Platz hat

Allgemeine Info:
Der Panel7 ist nur für den Start da, wird dann für die eigentliche Funktionalität nicht mehr gebraucht. Also die Funktionalität wird nur für Panel 1 bis 6 gebraucht. Im Projekt habe ich ?????? gemacht, wo die Funktionalität hin muss.

mmm hört sich kompliziert an... ich weiss, aber ich denke es hat sicher ein Guru unter Euch der mir helfen kann... Ich habe gestern bis spät in die Nacht probiert, aber erfolglos...

Frohe Ostern jetzt schon.
Angehängte Dateien
Dateityp: zip testprojekt_366.zip (212,3 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Drag Drop / Brauche Hilfe!

  Alt 13. Apr 2006, 11:19
Hallo Jerry,
sicherlich findest du hier einige, die es dir ohne weiteres Implementieren könnten. Aber einerseits bist du sicherlich nicht wirklich bereit die entsprechend zu bezahlen (oder?) und ausserdem ist der Lerneffekt am Größten wenn man es selber macht (was dann auch total DP-Regel konform ist).

Lass dich nicht dadurch demotivieren, dass du es schon ein Weilchen probiert hast (manchmal kommt man halt nicht gleich auf die richtigen Ideen). An sich ist es gar nicht so schwer. Du musst nur schauen, was hast du und was möchtest du.

Da wären einerseits dein Panel, die in einer gewissen Beziehung zu einander stehen (komme ich gleich drauf zurück) und dann noch deine GroupBoxen (die kleinen und die großen). Wie man etwas verschiebt ist dir ja soweit klar. Wenn ich es richtig sehe, dann weißt du noch nicht, wie du dass mit dem einem großen in den Griff bekommst.

Dazu wäre jetzt mein Ansatz (gibt sicherlich noch andere, Bessere), dass du dir etwas mehr Strukturierung ins Programm holst. Also wie genau deine Panel aussehen, weiß ich nicht da mir ExPanel oder PanelEx unbekannt ist.
Jedenfalls (hier mal auf die Beziehung zurück kommt), bilden je zwei Panel eine Reihe. Das ist nur wichtig, weil sich schließlich die Größe des linke Panel ändert (je nach Groupbox-Typ) und ein Ablegen auf dem Rechten auch Auswirkungen auf das linke Panel haben kann.
Also solltest du dir eine Klasse schaffen, die zwei Panel speichert. Muss natürlich keine Klasse sein, aber ich als Fan der OOP...
Ok, wenn du diese Panel Zeilenweise organisierst, hast du schon das Wichtigste getan. Der Rest (und damit die eigentliche Arbeit) ist nur noch die sinnvolle Verwaltung dieser Zeilen. Für eben diese Verwaltung bietet sich ebenfalls eine Klasse an. Diese merkt sich einfach alle verwendeten Zeilen (z.B. in einer TObjectList).
Jetzt musst du nur auf ein Drag&Drop reagieren.
Beim erfolgreichen ablegen einer GroupBox auf ein Panel wird ja ein DragDrop-Ereignis ausgelöst. In diesem hast du alles was du brauchst: Das zu verschiebende Element, das neue Ziel und natürlich auch das alte "ParentControl".

Was du in diesem Ereignis machen musst ist ganz einfach. Als erstes behandelt du nun das alte ParentControl (dass natürlich als Parent der Groupbox vorhanden ist). War die GroupBox eine große, so kannst du nun die Größe von deinem linken Panel anpassen. Wenn du auch am Rechten Panel arbeiten musst, ist das kein Problem, du hast die Liste aller Reihen und musst nur schauen zu welcher Reihe das linke Panel gehört.
Ok, wenn du die Größe des alten Panel angepasst hast, geht es mit dem neuen Panel weiter. Hier ist erstmal wichtig zu schauen, zu welcher Reihe es gehört. Dazu bemühst du einfach die Klasse die deine Reihen verwaltet. Wichtig ist es hier, dass ich implizit davon ausgehe, dass der Parent eine großen Groupbox immer das linke Panel wird.
Ok, hast du gerade eine große GroupBox verschoben, dann müssen die GroupBoxen (soweit vorhanden) der aktuellen Reihe verschoben werden, dass linke Panel der Reihe vergrößert und die GroupBox auf diesem eingefügt werden.
Wurde hingegen eine kleine GroupBox verschoben, dann gilt es eventuell die größe des Linken Panel anzupassen und ebenfalls vorhandene GroupBoxen zu verschieben.

Wie du siehst ist alles nur ein geschicktes Verwalten und abfragen der einzelnen Reihen. Wenn du zu jeder Reihe speicherst welches Panel links und rechts ist, dann solltest du damit leicht all deine Probleme lösen können.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 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