![]() |
Delphi-Version: 2005
Listenindex Überschreitet das Maximum (3)
Hi leute
Ich hab ein Problem. Wenn ich mein Programm starte bekomme ich die Meldung "Listenindex Überschreitet sein Maximum (3)". Ich poste mal einfach den Teil meines Quellcodes den ich geschrieben hab bevor der Fehler aufgetreten ist.
Delphi-Quellcode:
Dnake schonmal im Vorraus :wink:
Case FormOptionen.RGSymbol.ItemIndex of
0: begin BtOeffnen.Glyph.loadfromfile('Bilder\Öffnen.bmp'); BtOeffnen.Caption:='Öffnen'; BtSpeichern.Glyph.loadfromfile('Bilder\Speichern.bmp'); BtSpeichern.Caption:='Speichern'; BtDrucken.Glyph.loadfromfile('Bilder\Drucken.bmp'); BtDrucken.Caption:='Drucken'; FormOptionen.RGSymbolPosition.enabled:=true; case FormOptionen.RGSymbolPosition.ItemIndex of 0: begin BtOeffnen.layout:=blGlyphTop; BtSpeichern.layout:=blGlyphTop; BtDrucken.layout:=blGlyphtop; end;//von 0 1: begin BTOeffnen.layout:=blGlyphBottom; BtSpeichern.layout:=blGlyphBottom; BtDrucken.layout:=blGlyphBottom; end;//von 1 2: begin BTOeffnen.layout:=blGlyphRight; BtSpeichern.layout:=blGlyphRight; BtDrucken.layout:=blGlyphRight; end;//von 2 3: begin BtOeffnen.layout:=blGlyphLeft; BtSpeichern.layout:=blGlyphLeft; BtDrucken.layout:=blGlyphLeft; end;//von 3 end;//von case (Symbol-Position) end; //von 0 1:Begin Btoeffnen.Glyph:=nil; BtOeffnen.Caption:='Öffnen'; BtSpeichern.Glyph:=nil; BtSpeichern.Caption:='Speichern'; BtDrucken.Glyph:=nil; BtDrucken.Caption:='Drucken'; FormOptionen.RGSymbolPosition.Enabled:=false; end; //von 1 2:begin BtOeffnen.Glyph.LoadFromFile('Bilder\Öffnen.bmp'); BtOeffnen.Caption:=''; BtSpeichern.Glyph.loadfromfile('Bilder\Speichern.bmp'); BtSpeichern.Caption:=''; BtDrucken.glyph.loadfromfile('Bilder\Drucken.bmp'); BtDrucken.Caption:=''; end; //von 2 end; //von case |
AW: Listenindex Überschreitet das Maximum (3)
dann schein die liste nur 3 einträge zu haben, und somit gibt es den Index 3 nicht :-)
|
AW: Listenindex Überschreitet das Maximum (3)
Die Liste RGSymbol hat die 3 Einträge und die Liste RGSymbolPosition hat 4. Passt also alles oder?
|
AW: Listenindex Überschreitet das Maximum (3)
In dem geposteten Teil steckt der Fehler nicht (oder ich hab ihn übersehen). Die Fehlermeldung sagt allerdings ganz klar aus das du auf das 4te Element versuchst zu zugreifen (also Index3) aber es weniger als 4 Elemente gibt.
|
AW: Listenindex Überschreitet das Maximum (3)
ok aber es muss in der onshow procedure von Form1 liegen oder? dann poste ich die mal komplett:
Delphi-Quellcode:
und Die procedure Darstellunganpassen ist:
procedure TForm1.FormShow(Sender: TObject);
var save:tstringlist; begin save:=tstringlist.create; save.LoadFromFile('save.txt'); if save[0]='f' then formoptionen.CBLeiste.Checked:=false else formoptionen.CBLeiste.Checked:=true; formoptionen.EdBtHoehe.value:=strtoint(save[1]); formoptionen.EdBtBreite.value:=strtoint(save[2]); formoptionen.RGSymbol.ItemIndex:=strtoint(save[3]); formoptionen.RGSymbolPosition.ItemIndex:=strtoint(save[4]); Darstellunganpassen end;
Delphi-Quellcode:
procedure TForm1.DarstellungAnpassen;
var Breite, hoehe:integer; begin if Formoptionen.edbtbreite.text<>'' then begin Breite:=FormOptionen.EdBtBreite.Value; BtOeffnen.Width:=Breite; BtSpeichern.Width:=Breite; BtDrucken.Width:=Breite; BtRechtschreibung.Width:=Breite; BtSpeichern.Left:=BtOeffnen.Left+Breite+7; BtDrucken.Left:=BtSpeichern.Left+breite+7; BtRechtschreibung.Left:=BtDrucken.Left+Breite+7; end; //Button breite wurde angepasst if FormOptionen.edbthoehe.text<>'' then begin hoehe:=FormOptionen.EdBtHoehe.Value; BtOeffnen.Height:=Hoehe; //die 3 ersten zeilenändern die höhe der buttons BtSpeichern.Height:=Hoehe; BtDrucken.Height:=Hoehe; Btrechtschreibung.Height:=hoehe; Panel1.Height:=hoehe+16; end; If Formoptionen.CBleiste.Checked=false then panel1.Height:=0; If Formoptionen.Edbtbreite.text='' then panel1.Height:=0; If Formoptionen.EdBthoehe.text='' then Panel1.Height:=0; Case FormOptionen.RGSymbol.ItemIndex of 0: begin //Symbol & Text BtOeffnen.Glyph.loadfromfile('Bilder\Öffnen.bmp'); BtOeffnen.Caption:='Öffnen'; BtSpeichern.Glyph.loadfromfile('Bilder\Speichern.bmp'); BtSpeichern.Caption:='Speichern'; BtDrucken.Glyph.loadfromfile('Bilder\Drucken.bmp'); BtDrucken.Caption:='Drucken'; FormOptionen.RGSymbolPosition.enabled:=true; case FormOptionen.RGSymbolPosition.ItemIndex of 0: begin //Symbol OBEN BtOeffnen.layout:=blGlyphTop; BtSpeichern.layout:=blGlyphTop; BtDrucken.layout:=blGlyphtop; end;//von 0 1: begin //Symbol UNTEN BTOeffnen.layout:=blGlyphBottom; BtSpeichern.layout:=blGlyphBottom; BtDrucken.layout:=blGlyphBottom; end;//von 1 2: begin // Symbol RECHTS BTOeffnen.layout:=blGlyphRight; BtSpeichern.layout:=blGlyphRight; BtDrucken.layout:=blGlyphRight; end;//von 2 3: begin //Symbol LINKS BtOeffnen.layout:=blGlyphLeft; BtSpeichern.layout:=blGlyphLeft; BtDrucken.layout:=blGlyphLeft; end;//von 3 end;//von case (Symbol-Position) end; //von 0 1:Begin // nur Text Btoeffnen.Glyph:=nil; BtOeffnen.Caption:='Öffnen'; BtSpeichern.Glyph:=nil; BtSpeichern.Caption:='Speichern'; BtDrucken.Glyph:=nil; BtDrucken.Caption:='Drucken'; FormOptionen.RGSymbolPosition.Enabled:=false; end; //von 1 2:begin //nur symbol BtOeffnen.Glyph.LoadFromFile('Bilder\Öffnen.bmp'); BtOeffnen.Caption:=''; BtSpeichern.Glyph.loadfromfile('Bilder\Speichern.bmp'); BtSpeichern.Caption:=''; BtDrucken.glyph.loadfromfile('Bilder\Drucken.bmp'); BtDrucken.Caption:=''; end; //von 2 end; //von case Memo.Height:=ClientHeight-Panel1.Height; Panel1.Width:=Clientwidth; Memo.Width:=Clientwidth; end;//von procedure |
AW: Listenindex Überschreitet das Maximum (3)
Kann es an der save.txt liegen?
Delphi-Quellcode:
Nachtrag: Du verwendest ausschließlich relative Pfade. Das ist sehr riskant, denn relative Pfade beziehen sich nicht auf dein Programmverzeichnis, sondern auf das aktuelle Arbeitsverzeichnis. Dieses ist häufig das Programmverzeichnis, aber nicht immer.
formoptionen.RGSymbol.ItemIndex:=strtoint(save[3]);
formoptionen.RGSymbolPosition.ItemIndex:=strtoint(save[4]); Wenn du aus deinem Programmverzeichnis Dateien öffnet möchtest, mache es so:
Delphi-Quellcode:
Das gleiche gilt für die Bitmaps.
save.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'save.txt');
Oder schreibe dir eine Funktion:
Delphi-Quellcode:
und ermittle die absoluten Pfade wie folgt:
function AppPath: string;
begin Result := ExtractFilePath(ParamStr(0)); end;
Delphi-Quellcode:
save.LoadFromFile(AppPath + 'save.txt');
|
AW: Listenindex Überschreitet das Maximum (3)
Ok danke der fehler ist jetzt behoben... und ein neuer ist aufgetreten.
Beim Schließen des Programms bekomme ich die Meldung ..."Zugriffsverletzung bei Adresse 00460985"... mit verweis auf die zeile
Delphi-Quellcode:
in der prozedur Darstellunganpassen
If Formoptionen.CBleiste.Checked=false then
|
AW: Listenindex Überschreitet das Maximum (3)
Vergleiche auf "true" und "false" sollten auch vermieden werden, speziell der auf "true" (
![]() Rufst du die Prozedur "DarstellungAnpassen" denn beim Beenden auf (OnClose o.ä.)? Ich vermute, du greifst auf "Formoptionen" zu, was bereits freigegeben wurde. |
AW: Listenindex Überschreitet das Maximum (3)
Also beim schließen greif ich nicht dauf zu. Was meinst du mit "freigegeben"? (Bin Delphi neuling)
|
AW: Listenindex Überschreitet das Maximum (3)
Beim Beenden gibt das Programm den reservierten Speicher frei, den es beansprucht hat. Dazu zählen auch Unterformulare.
Daher vermute ich, dass das Unterformular nicht mehr existiert, du aber beim Beenden darauf zugreifst. Hast du denn etwas im OnClose oder OnCloseQuery stehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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