Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Listenindex Überschreitet das Maximum (3) (https://www.delphipraxis.net/152551-listenindex-ueberschreitet-das-maximum-3-a.html)

Demon666 26. Jun 2010 20:14

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:
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 :wink:

stoxx 26. Jun 2010 20:26

AW: Listenindex Überschreitet das Maximum (3)
 
dann schein die liste nur 3 einträge zu haben, und somit gibt es den Index 3 nicht :-)

Demon666 26. Jun 2010 20:31

AW: Listenindex Überschreitet das Maximum (3)
 
Die Liste RGSymbol hat die 3 Einträge und die Liste RGSymbolPosition hat 4. Passt also alles oder?

SirThornberry 26. Jun 2010 20:32

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.

Demon666 26. Jun 2010 20:37

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:
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;
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

Matze 26. Jun 2010 20:41

AW: Listenindex Überschreitet das Maximum (3)
 
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:
Delphi-Quellcode:
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:
Delphi-Quellcode:
save.LoadFromFile(AppPath + 'save.txt');

Demon666 26. Jun 2010 20:55

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:
If Formoptionen.CBleiste.Checked=false then
in der prozedur Darstellunganpassen

Matze 26. Jun 2010 21:02

AW: Listenindex Überschreitet das Maximum (3)
 
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.

Demon666 26. Jun 2010 21:25

AW: Listenindex Überschreitet das Maximum (3)
 
Also beim schließen greif ich nicht dauf zu. Was meinst du mit "freigegeben"? (Bin Delphi neuling)

Matze 26. Jun 2010 21:27

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:24 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