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 TListView - Listenindex überschreitet Maximum(8) (https://www.delphipraxis.net/38056-tlistview-listenindex-ueberschreitet-maximum-8-a.html)

schuetze09 14. Jan 2005 05:59


TListView - Listenindex überschreitet Maximum(8)
 
Hallo,

Was ich nicht verstehe, unter W2K kommt keine Exception, aber unter WinXP.

Hier mal mein Source:
Delphi-Quellcode:
procedure TForm_Main.MovieListCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if ((Item.Index mod 2)= 0)
  then begin
         MovieList.Canvas.Brush.color:=clSkyBlue;
         if Item.SubItems.Strings[8] = '-' then MovieList.Canvas.Brush.color:=clRed; // hier kommt die Exception!!!
       end;
end;
was ist daran falsch?

MfG
schuetze09

rantanplan99 14. Jan 2005 06:50

Re: TListView - Listenindex überschreitet Maximum(8)
 
evtl. weil Item.SubItems.Strings[8] nur von 0-7 geht? und nicht von 1-8? Indizes fangen immer bei 0 an und gehen bis Count - 1.

rantanplan

toms 14. Jan 2005 06:51

Re: TListView - Listenindex überschreitet Maximum(8)
 
Hallo
Mach mal eine Ueberpruefung, ob Strings[8] ueberhaupt existiert

Delphi-Quellcode:
  if ((Item.Index mod 2) = 0) then
  begin
    MovieList.Canvas.Brush.color := clSkyBlue;
    if Item.SubItems.Strings[8] = '-' then
      if Item.SubItems.Count >= 7 then
       MovieList.Canvas.Brush.color := clRed; // hier kommt die Exception!!!
  end;

schuetze09 14. Jan 2005 07:09

Re: TListView - Listenindex überschreitet Maximum(8)
 
@toms:
habe ich mal ausprobiert, geht leider auch nicht. kommt genau die gleiche Fehlermeldung...

meine Listview hat insgesamt 10 Spalten, also 1 item und 9 subitems...

mfg
schuetze09

SirThornberry 14. Jan 2005 07:16

Re: TListView - Listenindex überschreitet Maximum(8)
 
so muss es sein
Delphi-Quellcode:
  if ((Item.Index mod 2) = 0) then
  begin
    if (Item.SubItems.Count > 8) and (Item.SubItems.Strings[8] = '-') then
       MovieList.Canvas.Brush.color := clRed
    else
       MovieList.Canvas.Brush.color := clSkyBlue;
  end;

schuetze09 14. Jan 2005 07:20

Re: TListView - Listenindex überschreitet Maximum(8)
 
@SirThornberry

SUPER so geht es DANKE....

MfG
schuetze09

SirThornberry 14. Jan 2005 07:22

Re: TListView - Listenindex überschreitet Maximum(8)
 
@schuetze: Wenn es so geht heißt das aber auch das vermutlich kein Index 8 vorhanden ist, denn sonst wäre der Fehler nie aufgetaucht, außer du hast paar zeilen die weniger spalten haben und dann wiederum welche die wirklich eine 9te Spalte haben (Index 8)

schuetze09 14. Jan 2005 07:28

Re: TListView - Listenindex überschreitet Maximum(8)
 
@SirThornberry :

heißt das, wenn eine Spalte keinen Wert hat, verringert sich der index?

Bsp:
Zeile 1: 9Spalten und 9 Werte = max Index 8
Zeile 2: 9Spalten und 8 Werte = max Index 7

alcaeus 14. Jan 2005 07:50

Re: TListView - Listenindex überschreitet Maximum(8)
 
Hallo schuetze,

wenn deine ListView insgesamt 9 Spalten hat, und du eine neue Zeile (Items.Add) hinzufügst, so sind die SubItems für die einzelnen Spalten noch nicht belegt. Du musst für jede Zeile nochmals SubItems.Add('...') ausführen, damit diese existieren. Andernfalls bekommst du beim Zugriff wie gehabt eine AV.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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