Announcement

Collapse
No announcement yet.

Dynamisch erweiterbare mehrdimensionale Liste(?)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamisch erweiterbare mehrdimensionale Liste(?)

    Servus!

    Eine riesige Einleitung, ich weiß, aber ich bin völlig am Ende mit meinen Kenntnissen und bitte dringend um Hilfestellung.

    Kurzbeschreibung:
    Das Programm soll eine dynamisch erweiterbare Liste (ListView) erzeugen - (Klappt soweit).
    Die aktuell zu zeichnende Zeile der Liste soll pro Spalte mit je einer dynamisch erweiterbaren Liste von Strings verglichen werden. Entspricht der String der aktuellen Zelle einem String der Liste für diese Spalte, soll ein Ereignis ausgelöst werden, hier das farbige Hinterlegen der gesamten Zeile.

    Problem:
    Wie kann ich folgendes Beispiel am sinnvollsten umsetzten? Wie speichert man solche Daten am besten ab un wie läd man sie; es gibt soweit ich weiß keine dynamisch erweiterbare, mehrdimensionale StringListen. Dazu später mehr...

    Funktion:
    In einer ListView sollen Daten aus einer Datei tabellarisch dargestellt werden. Die Überschriften (Collumns) der ListView sind in der gleichnamigen ListBox aufgelistet. Nun sollen alle Einträge (Items/SubItems) in der ListView, die mit einem Item in der jeweiligen ListBox ('Compare Strings') übereinstimmen, in der Farbe, die in der ListBox ('Property') ausgewählt wurde, markiert werden.

    Info:
    Folgende primitive Darstellung zeigt die drei ListBoxes mit ihren Inhalten und der dazugehörigen ListView. Die drei rot umrandeten ListBoxes sollen nur verdeutlichen, dass je Item in der ListBox 'Collumns' eine eigene Liste vorhanden ist, die natürlich andere 'Compare Strimgs'-Items enthalten kann.

    ( Darstellung: )

    ENTFERNT,DA AUTHENTIFIZIERUNG ERFORDERLICH IST Christian

    Erklärung:
    Die Einstellungen besagen, dass alle Zeilen der ListView blau hinterlegt werden sollen, in denen in der ListView spalte 'Collumn 2' der 'Compare String' "Sub String 11" vorhanden ist. Des Weiteren sollen die Zeilen der ListView ebenfalls blau hinterlegt werden, die in der dritten Spalte der Listview ('Collumn 3') den 'Compare String' "Sub String 32" enthalten.
    Ich habe probiert, die einzelnen Elemente, die die Darstellung beeinflussen, mit blauen, gelben, roten und grünen Punkten stärker hervorzuheben, um es besser nachvollziehen zu können.


    Überlegung:
    Das Programm kann z.Z. die Daten aus einer Datei lesen und darstellen.
    Die einzelnen Bedingungen kann ich auch bereits einbinden und in der ListView ausgeben, allerdings sind die Bedingungen maßgeschneidert auf die aktuellen Testdaten.
    Ich habe in der ersten Zeile einer Datei die Collumns für die ListView bzw. Items für die ListBox stehen, die durch Pipes "|" getrennt sind. In der zweiten Zeile habe ich die Collumnswidth der einzelnen Collumns der ListView stehen, auch durch Pipes getrennt, damit die vom Benutzer zurechtgezogenen Collumnswidth beim nächsten Programmstart wieder, wie eingestellt, dargestellt werden können (spielt aber hier keine größere Rolle). Darunter, also ab der dritten Zeile, stehen untereinander die Items und Subitems, durch Pipes getrennt, die dann in der Listview die einzelnen Zeilen ergeben. Während diese Zeilen aus der Datei eingelesen werden und in die ListView eingefügt werden, soll die Lösung meines Problems mit der OnDrawItem-Methode der ListView aufgerufen werden.
    Irgendwo und irgendwie muss ich nun die jeweiligen 'Compare Strings' und 'Properties' die für jede Spalte der ListView unterschiedlich sein können abspeichern und natürlich laden können, aber wie? Genau das ist mein Problem.

    ( Darstellung: )
    ENTFERNT,DA AUTHENTIFIZIERUNG ERFORDERLICH IST Christian

    Weitere Überlegungen:
    Die Collumns der ListView, bzw. Items der ListBox 'Collumns', lade ich in eine TStringList. Nun müsste, pro Collumn in der ListView, bzw. der Items in der ListBox 'Collumns', eine weitere TStringList erstellt werden (vergleiche ListBoxes 'Compare Strings'), die wiederum zwei oder drei weitere Auswahlmöglichkeiten beinhalten wird.
    Bezogen auf mein Beispiel habe ich:
    - eine TStringList für die fünf Collumns
    - fünf TStringLists für die Compare Strings, je eine für die fünf Collumns
    - ein zwei-dimensionales int-Array[5][2] für die jeweiligen Properties

    Allerdings soll das dann dynamisch sein, also:
    - beliebig viele Columns - Kein Problem (TStringList)
    - mir ein unbekannter Datentyp, der je nach Anzahl der Items in der TStringList für die Collumns eine weitere Liste erzeugt, die die Compare Strings beinhaltet
    - das Array, sollte mit ein weinig Überlegung auch nicht das Problem sein, es so groß wie man es braucht zu bekommen. Für Lösungen bin ich allerdings sehr offen

    Hilfe!!!
    Wie kann man das realisieren; abspeichern, lesen. Gibt es eine bessere Art, als meine Überlegung und wenn ja wie sieht die aus?
    Ich bin mit meinen Kenntnissen völlig am Ende! Bitte daher um Hilfestellung!
    Zuletzt editiert von Christian Marquardt; 25.10.2009, 13:31. Reason: #1 Titeländerung, #2 Kurzbeschreibung, #3 Bildquellenänderung
    Ants aren't dead

  • #2
    Habe das nur bis Problem gelesen:

    Je Box eine Liste und zu dem
    keine dynamisch erweiterbare, mehrdimensionale StringListen. Dazu später mehr...
    ist die TStringList dynamisch erweiterbar.....allerdings nicht mehrdimensional.

    Da ich das nicht alles gelesen habe wurde ich ggf. zu extra Klassen raten die die ensprechenden Informationen enthalten. Hinsicht der Erfassung der Klassen in Listen einen Blich in die STL werfen. Dort kannst du diese dynamisch halten. Ist das erledigt, würde ich mir Gedanken ums speichern machen. ggf. speichert sich jede Klasse selbst u.a.

    http://www.sgi.com/tech/stl/table_of_contents.html
    Christian

    Comment


    • #3
      Das eine Liste so lang sein kann wie ich möchte ist mir durchaus bewusst. Allerdings suche ich nach einen System, dass das Ganze mehrdimensional kann, oder halt Vorschläge das anders zu machen.
      Ants aren't dead

      Comment


      • #4
        siehe STL

        Speichere ggf. in einer eindimensionalen Liste mehrdimensionale Objekte
        Christian

        Comment


        • #5
          Das klingt ja schon mal gut, aber so auf den ersten Blick sagt mir das alles noch garnichts. Gibt es auch eine deutsche Kurzanleitung dafür? Sicher will ich das auch lernen, so ist des ja nicht, aber ich muss zunächst erstmal eine Anleitung finden, die mir klar verständlich den Kram vermittelt, ohne dass ich jedes dritte Wort nachschlagen muss
          Ants aren't dead

          Comment


          • #6
            musst du selbst mal nach STL deutsch googlen

            Im C++Builder gibt es noch u.a. TList, TObjectList u.a. die ähnliche Aufgaben übernehmen
            Christian

            Comment


            • #7
              Gut werde ich machen. Aber STL kreiert ja nicht die benötigten Objekte (Listen), sondern fasst diese nur zusammen wenn ich das richtig überflogen habe. Dann bleibt immernoch die Frage offen stehen, wie ich soviele Listen erzeugen kann, wie benötigt werden.
              Ants aren't dead

              Comment


              • #8
                Mach dir doch ne ObjectList über die Listen die Deine Werte enthalten. Dann hast Du schon mal eine Liste über Listen. Diese Listen über Listen können wieder in eine ObjectList gepackt werden.
                Ich denke Du siehst wie der Hase läuft

                Comment


                • #9
                  Ah, ja... Klar Objektlisten das ist das was ich brauche richtig, aber wie soll ich es schaffen dass wenn ich als Beispiel 5 Listen erstellen muss, oder 6...ist ja variabel, wie kann ich dann diese 5 oder mehr Listen erstellen? Ich glaub ich habe da meinen Hänger...
                  Ants aren't dead

                  Comment


                  • #10
                    Code:
                    ObjectList *listen = new ObjectList();
                    
                    StringList * liste;
                    
                    liste = new StringList();
                    listen.Add(liste);
                    
                    liste = new StringList();
                    listen.Add(liste);
                    
                    liste = new StringList();
                    listen.Add(liste);
                    
                    liste = new StringList();
                    listen.Add(liste);
                    So in etwa sollte das dann aussehen Bitte nagelt mich jetzt nicht darauf fest... schon lang kein C++-Builder mehr programmiert
                    Dort kannst Du z.B. später auch jederzeit listen rausnehmen oder einfügen.

                    Comment


                    • #11
                      Ah, ja... Klar Objektlisten das ist das was ich brauche richtig, aber wie soll ich es schaffen dass wenn ich als Beispiel 5 Listen erstellen muss, oder 6...ist ja variabel, wie kann ich dann diese 5 oder mehr Listen erstellen? Ich glaub ich habe da meinen Hänger...
                      Siehe Beitrag 2 und 6.
                      Christian

                      Comment

                      Working...
                      X