Einzelnen Beitrag anzeigen

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