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 Fehler beim TListView-OnCompare (https://www.delphipraxis.net/34431-fehler-beim-tlistview-oncompare.html)

Schneewittchen 23. Nov 2004 09:21


Fehler beim TListView-OnCompare
 
Hi,

ich habe eine TListView mit den Methoden OnCompare und OnColumnClick um die Liste zu sortieren. Das funktioniert ja auch, aber wenn ich die bestehende Liste sortiere und dann irgendwann einen neuen Eintrag hinzufüge, erhalte ich folgenden Fehler:

Im Projekt ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (1)'. Prozess wurde angehalten.Mit einzelne Anweisung oder Start fortsetzen

Er versucht nach dem Hinzufügen gleich die Liste neu zu sortieren, aber dann tritt der Fehler auf.
Ich weiß echt nicht mehr was ich ändern soll, hoffe es kann mir jemand helfen!
Danke

Delphi-Quellcode:
procedure Tframe_geburtstag.GeburtstageColumnClick(Sender: TObject;
  Column: TListColumn);
begin  
  ColumnToSort := Column.Index;
  (Sender as TCustomListView).AlphaSort;
end;
Delphi-Quellcode:
procedure Tframe_geburtstag.GeburtstageCompare(Sender: TObject; Item1,
  Item2: TListItem; Data: Integer; var Compare: Integer);
var
  ix: Integer;
begin
  if ColumnToSort = 0 then
    Compare := CompareText(Item1.Caption,Item2.Caption)
  else begin
   ix := ColumnToSort - 1;
   Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
  end;
Auf Button Klick in der ListView einen Eintrag hinzufügen:
Delphi-Quellcode:
    Item := Geburtstage.Items.Add;
    Item.Caption := '' + '11.11.2001'; //Datum
    Item.SubItems.Add('typ'); //Typ
    Item.SubItems.Add(Edt_Nachname.Text);

Luckie 23. Nov 2004 09:38

Re: Fehler beim TListView-OnCompare
 
Ich würde mal so tippen, dass es kein SubItem mit dem Index ix gibt.

alcaeus 23. Nov 2004 09:39

Re: Fehler beim TListView-OnCompare
 
Hi Schneewittchen,

ich gehe mal davon aus dass du nach dem Hinzufügen die ColumnClick-Routine aufrufst. Ich hab jetzt kein Delphi und kann daher nicht ausprobieren, was passiert wenn man eine Liste mit einem Item sortieren will. Führ den ColumnClick nicht immer aus, sondern nur wenn die Anzahl Elemente größer als 1 ist:
Delphi-Quellcode:
if Geburtstage.Items.Count > 1 then
  GeburtstageColumnClick(Geburtstage, Geburtstage.Columns[0]);
Greetz
alcaeus

Schneewittchen 23. Nov 2004 10:14

Re: Fehler beim TListView-OnCompare
 
Die Routine wird ja standardmäßig von Delphi ausgeführt, ich ruf die nicht explizit auf.
Es sind immmer mehrere Elemente vorhanden, das ist nicht das Problem.
Der Fehler tritt mitten in der Liste auf unter dem Sortieren, wenn er Werte vergleicht...

:gruebel:

APriesing 20. Mär 2006 13:46

Re: Fehler beim TListView-OnCompare
 
Hi,

vielleicht hilft das ja noch:

Habe beim portieren von Delphi3-Code nach Delphi5 gemerkt, daß bei TListView_Items im OnCompare-Event die Elemente "Item1.SubItems[i]" bzw. "Item2.SubItems[i]" ab Index 11 (!!) gezählt werden. Kleinere Werte führen unweigerlich zu einer Exception.

Delphi 5 zählt offensichtlich von Null an, und was Delphi 7 macht, keine Ahnung.

Gruß
Achim :wall:

Jens Schumann 20. Mär 2006 14:43

Re: Fehler beim TListView-OnCompare
 
Zitat:

Zitat von APriesing
Delphi 5 zählt offensichtlich von Null an, und was Delphi 7 macht, keine Ahnung.

Alle Delphi Versionen beginnen mit der Zählung bei 0 (Ausgenommen bei Type String das fängt die Zählung bei 1 an)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr.

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