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 Index angeblich außerhalb Wertebereich (ComboBox) (https://www.delphipraxis.net/117299-index-angeblich-ausserhalb-wertebereich-combobox.html)

himitsu 15. Jul 2008 15:34


Index angeblich außerhalb Wertebereich (ComboBox)
 
Index überschreitet angeblich maximum (ComboBox)

als Erstes hab ich mal dieses Stückchen Code,
womit ich einfach nur den zusätzliche Wert (in Object) des nachfolgenden Items auslesen möchte,
aber er bringt mich langsam zum Ausrasten, da hier ständig eine Exception auftritt (also da wo Objects ausgelesen wird)
Zitat:

Listenindex überschreitet das Maximum (1)
MessageBox mein "1 2", also sind folgende Werte vorgegeben;
ComboBox2.ItemIndex = 0
ComboBox2.Items.Count = 2 (da 2 Einträge vorhanden sind)
Delphi-Quellcode:
// des war nur zur Kontrolle, ob der Debuger
// mir auch wirklich die Richtigen Werte anzeigte
Application.MessageBox(PChar(Format('%d %d', [ComboBox2.ItemIndex + 1, ComboBox2.Items.Count])), '');

If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count Then
  i3 := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex + 1]) - 1
Else i3 := High(_ComboBox2_Messages);
also eigentlich sollte es doch keinen Fehler geben, da 0+1=1 und 1 < 2 ... heißt Index 0 und vorallem 1 sollte es doch geben? :gruebel:

ach ja, Objects ist einfach nur ein gecasteter Integer ... des sollte doch kein Problem sein?
Delphi-Quellcode:
ComboBox2.Items.AddObject(s, TObject(i));
wie gesagt, Index liegt definitiv im gültigen Wertebereich
> Delphi 7


aufgerufen wird der Code derzeit über Form.OnCreate, in der ComboBox2.OnChange
(ich versuch aktuell mal den Code erst später ausführen zu lassen)



ja und ich hab schon gesucht, aber noch nichts dazu gefunden :?

wär also schön, wenn sich dieser Fehler beheben ließe.

MbB dat himi



[add]
OK, es liegt schonmal nicht am OnCreate und daß die ComboBox eventull noch nicht komplett initialisiert ist ... auch später tritt der Fehler auf.

hathor 15. Jul 2008 15:38

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Delphi-Quellcode:
If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count -1 Then...

RavenIV 15. Jul 2008 16:09

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Zitat:

Zitat von hathor
Delphi-Quellcode:
If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count -1 Then...

Die Items laufen von 0 bis Count - 1.
Da fall ich aber auch immer wieder drauf rein :oops:

himitsu 15. Jul 2008 17:24

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
jupp, drum das <
oder mit -1: Index <= Count - 1

also: Index < Count
0 <= Index < Count
0 <= Index <= Count - 1


kleiner als Null kann es nicht gehn, da ItemIndex im Minimum -1 ist und -1 + 1 = 0.

im Prinzip sieht es so aus (die +1 ist ja egal, da es auf das Ergebnis ankommt)
Code:
[b]If[/b] [color=#ff0000]GewünschterIndex[/color] < ComboBox2.Items.Count [b]Then[/b]
  i3 := Integer(ComboBox2.Items.Objects[[color=#ff0000]GewünschterIndex[/color]]) [color=silver]- 1[/color]
[b]Else[/b] [color=silver]i3 := High(_ComboBox2_Messages)[/color];

wenn ich richtig liege, dann dürfte diese Fehlermeldung also nicht auftauchen :wall:

alzaimar 15. Jul 2008 17:58

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
himitsu, da Du einen unmöglichen Fehler in einem trivialen Objekt hast, muss der Fehler woanders liegen. Vielleicht überschreibst Du einfach 'aus Versehen' Teile der Combobox.

Versuche das Problem durch sukzessives Auskommentieren einzelner Codeteile einzugrenzen. Entweder das Problem verschwindet (Fehler gefunden), oder du hast ein kleines Stückerl Code übrig, das du uns zeigen kannst.

Nebenbei: Bei Problemen mit der VCL hilft ein 'Compile mit Debug DCU' und schrittweises Ausführen: Das muss ein :wall: Fehler sein.

Christian Seehase 15. Jul 2008 19:29

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Moin Himitsu,

probier's mal so:

Delphi-Quellcode:
If (ComboBox2.ItemIndex + 1) < ComboBox2.Items.Count Then

Medium 15. Jul 2008 20:12

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Vergleichsoperatoren haben den niedrigsten Rang, und arithmetische den zweit niedrigsten. Daher sollte das keine Änderung hervorrufen.

Das Klammern ist bei der Kombination von boolschen Operatoren und Vergleichen oft aber sinnvoll, weil die boolschen ebenfalls höherrangig als die Vergleiche sind, was in vielen Statements nicht intuitiv erscheint.
"a+b=0 and a+c=0" würde zu "(a+b)=((0 and a)+c)=0", man möchte aber meist etwas der art "(a+b=0) and (a+c=0)" haben. Die Rangfolge der Operatoren in den Klammern ist in diesem Fall okay, da Rechnen stärker als Vergleichen bindet.

Das aber nur am Rande, hat mit dem Problem eigentlich nichts zu tun.

himitsu 17. Jul 2008 12:58

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
so, also der Inhalt der ComboBox ist OK und wurde auch nicht verändert ... wie gesagt, die MessageBox zeigt die richtigen Werte/Zustände an
un nach der Excepion ist auch der Richtige Inhalt in der ComboBox zu sehn.

Delphi-Quellcode:
s := ComboBox2.Items[ComboBox2.ItemIndex + 1];
i := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex + 1]);
hab grad mal versucht den ItemText auszulesen ... das geht, aber beim Object kommt immernoch die Exception.

ich versuch damm mal zu prüfen, ob es am Object(inhalt als Integer) liegt,
der Inhalt(im Object) des gewünschten/letzen Items ist zufällig -1
Delphi-Quellcode:
i := -1;
ComboBox2.Items.AddObject(S, TObject(i));

Assertor 17. Jul 2008 13:14

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Hi himitsu,

Zitat:

Zitat von himitsu
ach ja, Objects ist einfach nur ein gecasteter Integer ... des sollte doch kein Problem sein?

Also nach Gefühl finde ich das mit dem harten Cast auf den Integer nicht schön, wobei natürlich schon klar ist, warum Du das machst...

Kannst Du nicht eine eigene ObjectList erstellen, die mit instanzierten Werten parallel zur ComboBox mitläuft und diese als echte Objekte dann übergeben? Entsprechend die Freigabe dann entweder der ObjectList überlassen (OwnsObjects) oder halt selber machen.

Gruß Assertor

himitsu 18. Jul 2008 10:08

Re: Index angeblich außerhalb Wertebereich (ComboBox)
 
Klar wäre das möglich.
Ich könnte auch ein IntegerAray parallel zur ComboBox laufen lassen,
aber eigentlich wollte ich gern die Werte direkt in der ComboBox und das möglichst ohne großen Overhead :stupid:


nja, im Grunde scheint es wohl (zumindest im Delphi 7) irgendwelche Probleme zu geben,
denn der Index stimmt ja ... zumindestens in Verbindung mit dem Itemtext.


wie gesagt, ich versuch jetzt erstal rauszufinden, ob's an der -1 liegt
und schau mir im Moment die QuellCodes an, ob nicht doch irgendwo etwas mit dem Objekt innerhalb der ComboBox gemacht wird.
[edit] nee, es wird nichts in TComboBox/TStringList/TStrings geänder, oder irgendwie auf den Wert/Inhalt von Object eingegangen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 2  1 2      

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