AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listenindex Überschreitet das Maximum (3)

Ein Thema von Demon666 · begonnen am 26. Jun 2010 · letzter Beitrag vom 27. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#1

Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:14
Delphi-Version: 2005
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:
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
Dnake schonmal im Vorraus
Simon
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#2

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:26
dann schein die liste nur 3 einträge zu haben, und somit gibt es den Index 3 nicht
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#3

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:31
Die Liste RGSymbol hat die 3 Einträge und die Liste RGSymbolPosition hat 4. Passt also alles oder?
Simon
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:32
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#5

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:37
ok aber es muss in der onshow procedure von Form1 liegen oder? dann poste ich die mal komplett:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var save:tstringlist;
begin
  save:=tstringlist.create;
  save.LoadFromFile('save.txt');

  if save[0]='fthen
    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;
und Die procedure Darstellunganpassen ist:
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
Simon
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:41
Kann es an der save.txt liegen?
Delphi-Quellcode:
formoptionen.RGSymbol.ItemIndex:=strtoint(save[3]);
formoptionen.RGSymbolPosition.ItemIndex:=strtoint(save[4]);
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.

Wenn du aus deinem Programmverzeichnis Dateien öffnet möchtest, mache es so:
save.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'save.txt'); Das gleiche gilt für die Bitmaps.

Oder schreibe dir eine Funktion:
Delphi-Quellcode:
function AppPath: string;
begin
  Result := ExtractFilePath(ParamStr(0));
end;
und ermittle die absoluten Pfade wie folgt:
save.LoadFromFile(AppPath + 'save.txt');

Geändert von Matze (26. Jun 2010 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#7

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 21:55
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 If Formoptionen.CBleiste.Checked=false then in der prozedur Darstellunganpassen
Simon
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 22:02
Vergleiche auf "true" und "false" sollten auch vermieden werden, speziell der auf "true" (s. hier).

Rufst du die Prozedur "DarstellungAnpassen" denn beim Beenden auf (OnClose o.ä.)?
Ich vermute, du greifst auf "Formoptionen" zu, was bereits freigegeben wurde.
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#9

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 22:25
Also beim schließen greif ich nicht dauf zu. Was meinst du mit "freigegeben"? (Bin Delphi neuling)
Simon
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Listenindex Überschreitet das Maximum (3)

  Alt 26. Jun 2010, 22:27
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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