Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview-Spalten/Zeilen (https://www.delphipraxis.net/28412-listview-spalten-zeilen.html)

Hansa 24. Aug 2004 13:59


Listview-Spalten/Zeilen
 
Hi,

ich experimentiere momentan mit einem ListView. Style ist vsReport. Mit dem Column-Editor habe ich 4 Spalten hinzugefügt (Column0-Column3). Es sind aber 5 zu sehen. :twisted: In der Hilfe steht irgendwas von Iconspalte, aber ich brauche keine Icons. Wie kriege ich die Spalte weg ? Soll ich sie einfach unsichtbar machen, durch ziehen des Randes ?

Das nächste sind die Zeilen. Ich brauche eine genau definierte Anzahl. RowCount oder so was habe ich noch nicht entdeckt. Wenn jemand noch was wichtiges zu dem ListView weiß, was man nicht auf den ersten Blick sieht, siehe "vsReport" dann her damit.

mytar 24. Aug 2004 14:11

Re: Listview-Spalten/Zeilen
 
Das ist nicht die 5. Spalte. du musst die Breite der anderen 4 Columns bei Width im OI einstellen.

Dynamisches Hinzufügen von ListItems (Zeilen):
Delphi-Quellcode:
CurrentListItem: ListView1.Items.Add;
Dei 1. Zelle jedes ListItems wird mit ListView1.Items[0].Caption angesprochen,
die restlichen 3 Zellen in jedem ListView werden mit SubItems[0] - SubItems[2] angesprochen.

Im OI gibt es auch eine Property, welche im ListView, einen Art Grid anzeigt.
Ist also eine Boolean-Property.

greetz
mytar :-D

alcaeus 24. Aug 2004 14:13

Re: Listview-Spalten/Zeilen
 
Ich empfehle die Breite der Listview-Spalten auf -2 zu setzen. Dies bewirkt, dass die Spaltenbreite automatisch angepasst wird, und zwar auf den breitesten Inhalt. Weiters wird auch die Breite der Spaltenüberschrift berücksichtigt. Wählst du -1, so fällt der letzte Punkt weg.
Und was meinst du mit fixer Zeilenanzahl?

Greetz
alcaeus

Alexander 24. Aug 2004 14:18

Re: Listview-Spalten/Zeilen
 
ListView1.Items.Count bekommst du die Anzahl der Items (oder was meintest du?)

@alcaeus: Ui. Das wusste ich auch noch nicht, ich habe es immer selber gemacht :? Danke!

mytar 24. Aug 2004 14:26

Re: Listview-Spalten/Zeilen
 
Es gibt im OI eine property die die Spaltenbreite automatisch anpasst!

Weiß leider nicht mehr welche?

greetz
mytar :-D

alcaeus 24. Aug 2004 14:27

Re: Listview-Spalten/Zeilen
 
Zitat:

Zitat von alcaeus
Ich empfehle die Breite der Listview-Spalten auf -2 zu setzen. Dies bewirkt, dass die Spaltenbreite automatisch angepasst wird, und zwar auf den breitesten Inhalt. Weiters wird auch die Breite der Spaltenüberschrift berücksichtigt. Wählst du -1, so fällt der letzte Punkt weg.

Wer lesen kann ist klar im Vorteil ;)

Greetz
alcaeus

Hansa 24. Aug 2004 14:29

Re: Listview-Spalten/Zeilen
 
Das mit der -2 war gut. :thumb: Es sieht nur zur Designzeit seltsam aus. Ja, dann das mit den Zeilen. Ich habe das geahnt, daß es da Ärger gibt. Bestücke ich die ListView mit Werten, dann kommt jetzt : "Listenindex überschreitet das Maximum (4)" Was ist das ? :zwinker:

Alexander 24. Aug 2004 14:32

Re: Listview-Spalten/Zeilen
 
Zeig mal etwas Source her ;-)

mytar 24. Aug 2004 14:32

Re: Listview-Spalten/Zeilen
 
Zitat:

Es sieht nur zur Designzeit seltsam aus.
Legt mal im OI alle Boolean-Property um (und dann wieder zurück).
Bei irgendeiner Property wird die Spaltenbreite zur Designtime automatisch ausgeglichen!

greetz
mytar :-D

Hansa 24. Aug 2004 14:41

Re: Listview-Spalten/Zeilen
 
Listenindex ist erledigt, ich hatte die Zeilen und Spalten vertauscht. Es sind 4 Spalten, aber mehr Zeilen.

Wie bestücke ich aber jetzt die weiteren Zeilen ? :shock:

Die Titelzeile geht so :

Delphi-Quellcode:
ListView1.Column[0].Caption := 'Tag';
Wo sind die Zeilen ?? :shock:

mytar 24. Aug 2004 14:43

Re: Listview-Spalten/Zeilen
 
Schau dir die 1. Antwort an!

greetz
mytar :-D

Hansa 24. Aug 2004 14:52

Re: Listview-Spalten/Zeilen
 
Meinst du so ?

Delphi-Quellcode:
        ListView1.Items[0].Caption := '1';
        ListView1.Items[0].SubItems[1] := '2';
Wird zwar compiliert, aber dann kommt eine Zugriffsverletzung.

alcaeus 24. Aug 2004 14:54

Re: Listview-Spalten/Zeilen
 
Die SubItems musst du zuerst hinzufügen:
Delphi-Quellcode:
ListView1.Items[0].SubItems.Add('Foo');
Außerdem beginnen Indizes immer mit 0 ;)

Greetz
alcaeus

mytar 24. Aug 2004 14:58

Re: Listview-Spalten/Zeilen
 
Zitat:

Zitat von Hansa
Meinst du so ?

Delphi-Quellcode:
        ListView1.Items[0].Caption := '1';
        ListView1.Items[0].SubItems[1] := '2';
Wird zwar compiliert, aber dann kommt eine Zugriffsverletzung.

Du musst dir ein ListItem vom Typ TListItem anlegen.

Dann machst du

Delphi-Quellcode:
MyListItem := ListView1.Items.Add;
Und Nun kannst du mit MyListItem.Caption den Text bestimmen.
Für die restlichen Spalten musst du MyListItem.SubItems.Add('Dein Text') verwenden.

Später kannst du dann auch auf die ListItems via ListView1.Items[Index] zugreifen

greetz
mytar :)

Hansa 24. Aug 2004 14:59

Re: Listview-Spalten/Zeilen
 
Delphi-Quellcode:
ListView1.Items[0].SubItems.Add('1');
Kein Unterschied -> Zugriffsverletzung. 8)

mytar 24. Aug 2004 15:03

Re: Listview-Spalten/Zeilen
 
Du musst die Zeilen (Instanzen von TListItem) erst dynamisch erstellen.

Sie dir dazu die Methode Delphi-Referenz durchsuchenAdd von TListItems und den constructor Delphi-Referenz durchsuchenCreate von TListItem
in der OH an.

greetz
mytar :-D

Alexander 24. Aug 2004 15:04

Re: Listview-Spalten/Zeilen
 
Hast du dir den Beitrag von mytar angeschaut?
Desweiteren findest du es sicherlich auch in der OH, unter Delphi-Referenz durchsuchenTListItem oder auch Delphi-Referenz durchsuchenTListView

Hansa 24. Aug 2004 15:51

Re: Listview-Spalten/Zeilen
 
Wisst ihr was ? Die ListView ist ziemlich unbrauchbar. Zumindest für so einen einfachen Zweck. Zumindest ist sie schwer zu handhaben und die OH gibt kaum was her.

Außerdem beschleicht mich das Gefühl, daß sie sehr unlogisch programmiert ist. Handelt es sich dabei vielleicht nicht um ein Borland-Eigengewächs ?

Wie dem auch sei, ich muß noch weg und wenn ich wieder zurück bin, dann weiß ich was zu tun ist. Im Moment sieht es für die ListView sehr nach Tonne aus. :mrgreen:

Alexander 24. Aug 2004 15:56

Re: Listview-Spalten/Zeilen
 
:shock:
Nur wenn man sie nicht versteht, heißt es nicht gleich, dass es mist ist :roll:
Und du weißt doch sicherlich, dass es die Listview auch in der WinAPI gibt? Bzw. sie daher kommt...
Der Desktop ist eine, oder der Teil des Windows Explorer, in denen die Daten stehen ...

Poste uns doch einfach den Sourcecode, den du bisher hast und erklär noch mal dein Problem...

PS: Auch hier in der DP wirst du sicherlich fündig werden...

Hansa 24. Aug 2004 18:46

Re: Listview-Spalten/Zeilen
 
Zitat:

Du musst dir ein ListItem vom Typ TListItem anlegen.

Dann machst du

MyListItem := ListView1.Items.Add;

Und nun kannst du mit MyListItem.Caption den Text bestimmen.
Für die restlichen Spalten musst du MyListItem.SubItems.Add('Dein Text') verwenden.
Da fängts schon an. Wieso Items und SubItems ? 8) Für mich ist eine Spalte eine Spalte, eine Zeile eine Zeile. Dann das mit der -2. Bei 3 Spalten ist der Rest keine Spalte, sondern, wer weiß was ? Wenn ich den Tip mit der -2 nicht bekommen hätte, so wäre ich jetzt noch am suchen, was da zu tun ist.

Die Zeilen sind nun problematisch, weil es Items und SubItems gibt, die vielleicht in einem Tree-View Sinn machen würden, aber doch nicht bei einer zweidimensionalen genau definierten Fläche.

Fazit : für meinen Zweck unbrauchbar, ansonsten sehe ich nur einen Einsatzzweck : wie im Win-Explorer, für die Detail-Anzeige von Dateinamen, der Unterverzeichnisse (Subitems) usw.

mytar 25. Aug 2004 11:06

Re: Listview-Spalten/Zeilen
 
Nochmals:

In einem ListView (TListView) gibt es Spalten (TListColumns) und Zeilen (TListItems).

ListView enthält eine Instanz von TListColumns und eine von TListItems.

TListColumns (Spalten) ist eine Liste, bestehend aus TListColumn (Spalte).
TListItems (Zeilen) inst ein Liste von TListItem-Instanzen (Zeile).

Ein ListItem (Zeile) hat eine 1. Zelle (Caption) und je nach Spaltenanzahl weiter Zellen, die sog. SubItems.

Dazu gibt es in der OH ein gutes Beispiel.

Die Indizes für den einzelnen Zugriff auf existierende ListItems bezw. ListColumns ist genauso wie bei dynamischen Arrays. D.h. Bei 5. Zeilen greift man auf diese mit Items[0] bis Items[4] zu.

greetz
mytar :-D

Hansa 25. Aug 2004 12:37

Re: Listview-Spalten/Zeilen
 
Danke für die Hilfe, aber wie bereits gesagt, meiner Ansicht nach ist die Listview für den geplanten Einsatzzweck nicht das richtige.

Ich könnte auch, an anderer Stelle, statt eines Edits ein Stringgrid verwenden, Spalten und Zeilen auf 1 setzen, die Titelleiste ausblenden usw. :mrgreen:

Erschwerend für das ListView kommt hinzu, daß es sich um ein statisches und kein dynamisches Problem handelt. Informationstechnisch gesehen könnte ich ein array [1..15] of string benutzen. Und so habe ich das auch jetzt gemacht. Jeder string besteht zwar aus 4 Zahlen-Spalten, aber die kann ich auch vorher zusammensetzen/ umwandeln/ formatieren und damit habe ich nur eine 1-dim. Sache. Somit reicht eine Listbox. Da das ganze noch nicht zu 100 % funktioniert bliebe immer noch ein Stringgrid als Ausweg. Einfacher ist die Listview auch nicht zu behandeln.

mytar 25. Aug 2004 19:14

Re: Listview-Spalten/Zeilen
 
OK! Ganz klar deine Entscheidung!

Ich möchte nur noch sagen, das die ListView sehr interessant ist.
Aus gutem Grund ist sie in der VCL.

In vielen P2P-Clients ist eine ListView enthalten, sogar mit Progressbar.
Aber auch in einfachen Verwaltungsprogrammen ist eine ListView zu finden.

Hansa 25. Aug 2004 19:35

Re: Listview-Spalten/Zeilen
 
Eben, die ist sehr interessant, aber es kommt darauf an, wofür man sie überhaupt braucht. 8) Für einfache, statische Sachen wäre es Unfug, sie zu verwenden.

Ich habe mir jedenfalls angewöhnt, eine Problemstellung so weit es geht zu reduzieren und dann die einfachste Lösung einzusetzen. Deshalb habe ich ein zweidimensionales Problem zu einem 1-dim. gemacht und fertig. Wäre dies nicht möglich, so wäre ein Stringgrid denkbar gewesen. Für die ListView sehe ich in dem konkreten Fall deshalb keinen Bedarf. Was allerdings nicht heißt, daß ich es nicht irgendwann brauche. :P

Alexander 25. Aug 2004 19:56

Re: Listview-Spalten/Zeilen
 
Um noch mal auf dein Problem einzugehen, hast du vielleicht einfach vergessen, die Columns/Spalten zu erzeugen? Bspw. im OI oder auch per Code?
Ich hoffe ich hatte das Problem noch richtig im Schädel ;-)

Meiner Meinung ist das Einsatzgebiet einer Listview seeehr breit ;-)

Hansa 25. Aug 2004 20:23

Re: Listview-Spalten/Zeilen
 
Zitat:

Zitat von Alexander
...Meiner Meinung ist das Einsatzgebiet einer Listview seeehr breit ;-)

Ja, es scheint so breit zu sein, daß es für kleinere Sachen unbrauchbar wird. :mrgreen:

Es ging um eine Art Grid, also eine zweidimensionale Darstellung von Zahlen, ohne Editier-Funktion o.Ä. Da nun aber alle Zahlen gleichberechtigt sind, hat mich schon mal das mit den Items und Subitems irritiert. Ist überflüssig und macht die Wartung schwerer, sofern man nicht Tag und Nacht mit ListViews hantiert.

Das nächste waren die Styles. vsReport und die anderen haben nicht viel gemeinsam. Für mich sind das eingebaute Fallen, die im Fehlerfall später schwer zu finden sind.

Für mich gehört es in die Kategorie "Komponenten, die die Welt nicht braucht". 8) Zumindest macht es mehr Ärger, als es Sinn macht. Genauso, wie das DBgrid. Auch das DBChart habe ich eliminiert. Das sind alles eklige Sachen, die einen nur aufhalten.

Lieber einmal selber etwas programmiert, als vorgefertigte unzulängliche Sachen zu benutzen. Von mir aus könnt ihr weiterhin das ListView "verteidigen", aber bei mir ist es vorerst im Trash. :lol:

Leuselator 25. Aug 2004 20:27

Re: Listview-Spalten/Zeilen
 
Hansa, Du bist eenen Querulant :mrgreen:!

Hansa 25. Aug 2004 20:54

Re: Listview-Spalten/Zeilen
 
Zitat:

Zitat von Leuselator
Hansa, Du bist eenen Querulant :mrgreen:!

Nein, ich esse nur keine ungesalzene Suppe, die mir irgendeine dahergelaufene Mickymaus vorsetzt, eher koche ich sie selber. :mrgreen:

Robert_G 25. Aug 2004 21:08

Re: Listview-Spalten/Zeilen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Leuselator
Hansa, Du bist eenen Querulant :mrgreen:!

Nope, eher voreingenommen. :mrgreen:
Kleines Beispiel:
Vor 1/2 Wochen mussten alle paar Tage Daten aus einer total zerfriemelten txt-Datei in unsere DB eingelesen.
Zur Darstellung von Fortschritt und Inhalt (Patienten, Queries,...) wählte ich einen ListView. Denn damit konnte ich mit dem geringsten Aufwand die Wert halbwegs übersichtlich darstellen.
Ich konnte mich also voll darauf konzentrieren die olle Datei meinem DB-Modell anzupassen (und das absolut DAU-sicher :roll: ).
Das Layout hat mich zum Schluss vielleicht 15-20 Minuten gekostet (Wobei wohl 70% auf's Aussuchen der Icons und die Gruppierung fiel ;) ).
Mit einem anderen Control hätte ich wohl eine öde rein tabellarische Ansicht, oder Images und Labels ( :evil: *bäh* ) nehmen müssen.
Auf jeden Fall hätte ich wesentlich mehr Zeit dabei vertrödelt...

Zitat:

Zitat von Hansa
Das nächste waren die Styles. vsReport und die anderen haben nicht viel gemeinsam. Für mich sind das eingebaute Fallen, die im Fehlerfall später schwer zu finden sind.

Sorry, aber da musste ich mir einen :lol: - Anfall verkneifen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz