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![Blinzeln](https://entwickler-forum.de/core/images/smilies/wink.png)
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!
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
![Blinzeln](https://entwickler-forum.de/core/images/smilies/wink.png)
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!
Comment