Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - OOP-Layout für eine Tabellenstruktur
mg80s - Do 06.10.05 00:34
Titel: OOP-Layout für eine Tabellenstruktur
Hallo nochmal.
Wie in einem vorherigen Post schon erwähnt, bastle ich gerade an einer Tabellenstrukur.
Sie soll ähnlich dem HTML-Prizip aufgebaut sein, also:
Quelltext
1: 2: 3: 4: 5: 6:
| <table> <tr> <td> </td> <td> </td> </tr> </table> |
Eine Tabelle besteht also aus Zeilen und in diesen Zeilen gibt es Spalten.
Nur habe ich das ganze noch weitergesponnen und will eine Spalte gleich wieder als neue Tabelle interpretieren.
Zugleich kann jede Spalte, die keine Zeilen beinhaltet, auch ein Element (Text, Bild etc) beinhalten.
Die Klasse, die ich also gebastelt habe ist diese:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TNode = class (TObject) private NextNodeAmount: Integer; isRow, isColoumn: boolean; NextNode: Array[0..10] of TNode; Element: Pointer; end; |
Ich habe also nur Knoten, die auf weitere Knoten zeigen. da muß natürlich noch eine Unterscheidung von Spalte und Zeile rein, mein Hauptproblem ist aber:
Dieses Konstrukt ist ja in diesem Fall auf 10 Unterknoten beschränkt. Das Array an-und-für-sich könnte ich ja dynamisch deklarieren, aber was, wenn ich 5 Knoten erfolgreich "verbunden" habe und der Benutzer überlegt sich einen 6ten einzufügen?
Gibt es ein "voll-dynamisches" Array für diesen Zweck?
Vielen Dank
Christian S. - Do 06.10.05 01:01
Hallo!
Zuerst einmal würde ich die Information, ob es sich um eine Zeile oder eine Spalte oder sonstwas handelt, nicht in isRow oder isColumn speichern, sondern ich würde eine Basisklasse TElement erstellen, welche Eigenschaften wie NextNode, Element, etc. enthält und von denen dann Klassen TRow, TColumn oder TTable ableiten. Dann kannst Du nämlich auch noch spezifische Eigenschaften einfügen.
Nun zu Deiner eigentlich Frage, zu dynamischen Arrays: Dynamische Arrays sind "voll-dynamisch", wie Du das nennst. Du kannst mittels SetLength(aArray, Length(aArray)+1)); immer noch ein Element anhängen. Aber Vorsicht: Wo immer es geht, solltest Du das wiederholte Verlängern eines Arrays um ein Element vermeiden, da das Array immer neu kopiert wird.
Grüße
Christian
mg80s - Do 06.10.05 01:55
Perfekt. Das löst mein Problem wohl voll und ganz. Danke!
Bedeutet das Neu-Kopieren dann "einfach nur" Rechenzeit zum Kopieren oder werden dann wirklich immer neue Kopien angelegt? Ersteres könnte ich in Kauf nehmen, aber Speicherplatz verschwende ich nur ungern..
mg80s - Fr 07.10.05 14:47
Für diejenigen, die's interessiert (:wink:), hat alles super geklappt.
Habe mal ein Screenshot angefügt. Der Sinn des Ganzen war, dass ich gerade einen Homepage-Editor ala Adobe ImageReady (aber natürlich weniger komplex) bastle.
Mithilfe der tabellarischen Aufteilung kann nun der Benutzer die Homepage-Vorlage (also das Bild) in Boxen teilen, die dann mit Texten, Bildern etc gefüllt werden können. Im Screenshot war's einfach mal versuchsweise eine Aufteilung in 3 Reihen, eine wiederum mit 3 Spalten, dann wieder 5 Reihen mit 3 Spalten.
Es steht zwar noch einige Arbeit vor mir, wenn's halbwegs spruchreif ist, stell ich's dann aber mal in den Freeware-Teil, evtl. auch OpenSource, bin noch nicht ganz sicher.
Christian S. - Fr 07.10.05 17:37
mg80s hat folgendes geschrieben: |
Bedeutet das Neu-Kopieren dann "einfach nur" Rechenzeit zum Kopieren oder werden dann wirklich immer neue Kopien angelegt? Ersteres könnte ich in Kauf nehmen, aber Speicherplatz verschwende ich nur ungern.. |
Da kann ich Dir diesen Text empfehlen:
http://www.dsdt.info/insider/sprache/interna/speichermanager.php
Grüße
Christian
mg80s - Fr 07.10.05 19:42
Wow, das klingt nicht sonderlich prickelnd. Zum Glück sollte die Anwendung aber höchstens Längen bis schätzungweise 30 Elemente brauchen und es kann immer nur bei Benutzerwunsch eins anhängen. Damit sollte sich das in Grenzen halten. Bei größeren Sachen sollte ich das allerdings im Hinterkopf behalten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!