Delphi-PRAXiS
Seite 1 von 2  1 2      

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 - Fehler: Überschreitet Maximum (https://www.delphipraxis.net/34920-listview-fehler-ueberschreitet-maximum.html)

schuetze09 30. Nov 2004 08:24


Listview - Fehler: Überschreitet Maximum
 
Hallo,

mein Probem ist, das ich bei meinen Listview immer die Fehlermeldung bekomme: Listview überschreitet Maximum (0).
Ich habe schon im Forum gesucht aber keine Lösung gefunden, die mir weiterhilft.

Die Exception wird hier ausgelöst:
Delphi-Quellcode:
procedure TForm_UserAnlegen.ListView1CustomDrawItem(
  Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
 if ListView1.Items.Count = -1
 then exit
 else if StrToInt(Item.SubItems[0]) > 0 then Color := clgreen;
end;
Kann mir bitte jemand weiterhelfen?

MfG
schuetze09

jim_raynor 30. Nov 2004 08:27

Re: Listview - Fehler: Überschreitet Maximum
 
Ganz einfach. Du hast dem Item keine Untereinträge (weiteren Spalten) hinzugefügt. Die erste Spalte ist die Eigenschaft Caption. Die zweite Spalte wäre SubItems[0].

OLLI_T 30. Nov 2004 08:32

Re: Listview - Fehler: Überschreitet Maximum
 
Auch Hallo!

1. Wann wird Count=-1? Das kommt höchstens bei meinem Konto am Monatsende vor. :shock:

2. Viel mehr sollte Dich interessieren, ob das Item auch tatsächlich SubItems hat:
Delphi-Quellcode:
If Item.SubItems.Count=0 Then Exit;
3. Was passiert, wenn die Spalte keine gültige Zahl enthält? Exceptions in Paint Routinen sind höchst unangenehm.

4. Ich bin mal gespannt, was hier so alles grün wird.

Viele Grüsse

Der OLLI

schuetze09 30. Nov 2004 08:40

Re: Listview - Fehler: Überschreitet Maximum
 
@OLLI_T:
wie sollte ich es sonst machen? ich habe in der Spalte nur 1 oder 0 drin.
und wenn ich deins:
Delphi-Quellcode:
 If Item.SubItems.Count=0
 then exit
 else if StrToInt(Item.SubItems[0]) > 0 then ListView1.Canvas.Brush.Color := clgreen;
mit einbaue, bekomme ich die Fehlermeldung: Listenindex überschreitet Maximum (1)

MfG
schuetze09

jim_raynor 30. Nov 2004 08:48

Re: Listview - Fehler: Überschreitet Maximum
 
Irgendwas verheimlichst du uns. Aus dem Stückquellcode kann keine überschreitet Maximum (1) kommen. Du greifst ja nur auf das 0-te Element zu.

[Edit]Wenn du nur auf 0 oder eins prüfen möchtest und du die Werte selber einträgst kannst du dir das StrToInt sparen. Ein Item.SubItems[0] = '1' läuft auf das gleiche hinaus.

schuetze09 30. Nov 2004 08:50

Re: Listview - Fehler: Überschreitet Maximum
 
@jim_raynor: Also verheimlich will ich nix. Was brauchst du alles damit du mit helfen kannst?

MfG
schuetze09

PS: was ich machen will, ist, dass alle SubItems im Listview, die eine 0 als Wert haben, grün dargestellt werden.

jim_raynor 30. Nov 2004 08:52

Re: Listview - Fehler: Überschreitet Maximum
 
Okay. Zeigt doch mal deinen Code, wo ein Eintrag hinzugefügt wird.

schuetze09 30. Nov 2004 08:55

Re: Listview - Fehler: Überschreitet Maximum
 
OK, hier der Code mit dem ich das Listview befülle:
Delphi-Quellcode:
procedure AllUser(Listview: TListView);
var ADODataSet: TADODataSet;
    ListItem : TlistItem;
begin
  ADODataSet:= TADODataSet.Create(nil);
  ADODataSet.Connection:=DataModule_DBConnect.ADOConnection1;
  Listview.Items.BeginUpdate;
  try
    ADODataSet.CommandText:='SELECT * from tbl_username order by username';
    ADODataSet.Open;
    while not ADODataSet.EOF do
      begin
        ListItem:=Listview.Items.Add;
        ListItem.Caption:=ADODataSet.FieldByName('username').AsString;
        ListItem.SubItems.Add(ADODataSet.FieldByName('admin').AsString);
        ADODataSet.Next;
      end;
  except
    on E:Exception do
    begin
      MDialog(E.Message, mtError, [mbOK]);
    end;
  end;
  Listview.Items.EndUpdate;
  ADODataSet.Close;
  ADODataSet.Free;
end;

jim_raynor 30. Nov 2004 09:00

Re: Listview - Fehler: Überschreitet Maximum
 
Das sieht erstmal gut aus. Steht denn bei CustomDraw noch mehr drin? Weil eigentlich müsste es so funktionieren wie Olli_T gepostet hat.

:gruebel:

Gollum 30. Nov 2004 09:04

Re: Listview - Fehler: Überschreitet Maximum
 
Hallo,

Du musst in der OnDraw unbedingt als erstes prüfen ob der Item<>nil ist. In Deinem Fall also:
Delphi-Quellcode:
procedure TForm_UserAnlegen.ListView1CustomDrawItem(
  Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if (Item=nil) then Exit;
  if (Item.SubItems.Count>0) then
  begin
    if (StrToInt(Item.SubItems[0])>0) then Sender.Canvas.Font.Color:=clGreen
      else Sender.Canvas.Font.Color:=clBlack;
  end; // if
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Seite 1 von 2  1 2      

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