![]() |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Zitat:
[OT] Ich ärger mich seit einer Woche mit einem Problem rum Remobjects/Delphi 2007. Und das Projekt ist von 2006. Der Code ist :roll: [/OT] |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Der Code bezieht sich fast vollständig auf Form1, gehört also auch in diese Klasse.
Bitte rücke den Code ordentlich ein. Verwende Unterfunktionen/Methoden zur Übersichtlichkeit und zum Testen.
Delphi-Quellcode:
procedure TForm2.btnLoadClick(Sender: TObject);
begin Form1.OpenFile; Close; end; type TForm1 = class(TForm) private procedure ReadData; procedure ReadTyp1(var j: Integer); procedure ReadTyp2(var j: Integer); procedure ReadTyp3(var j: Integer); procedure ReadTyp4(var j: Integer); public procedure OpenFile; end; procedure TForm1.OpenFile; begin if OpenDialog1.Execute then begin Zwischenspeicher.Lines.LoadFromFile(OpenDialog1.FileName); ReadData; Zwischenspeicher.Clear; end; end; procedure TForm1.ReadData; var j, iTyp : integer; anztxti, anzlbli, anzmemoi : integer; begin Memo1.Visible:=false; pnlForm1.Destroy; pnlForm1 := nil; pnlForm1 := TPanel.Create(Self); pnlForm1.Parent := Form1; pnlForm1.SetBounds(8, Memo1.Top, Memo1.Width, Memo1.Height-5); pnlForm1.Visible:=true; CloseFormular := TSpeedButton.Create(pnlForm1); CloseFormular.Parent := pnlForm1; CloseFormular.SetBounds(pnlForm1.Width-20,0,20,20); //CloseFormular.Glyph.LoadFromFile('menu_close.bmp'); CloseFormular.Font.Color:=clRed; CloseFormular.Font.Bold:=true; CloseFormular.Font.Name:='Arial'; CloseFormular.Caption:='X'; CloseFormular.OnClick:=@CloseFormularClick; CloseFormular.Caption:='X'; CloseFormular.SetBounds(pnlForm1.Width-16,0,16,16); anztxti := Zwischenspeicher[0]; //position der Anz txt anzlbli := Zwischenspeicher[1]; //position der Anz lbl anzmemoi := Zwischenspeicher[2]; j := 3; while j < zwischenspeicher.Lines.Count do begin iTyp := StrToIntDef(Zwischenspeicher[j], 0); Inc(j); case iTyp of 1: ReadTyp1(j); 2: ReadTyp2(j); 3: ReadTyp3(j); 4: ReadTyp4(j); else raise Exception.CreateFmt('Typ nicht unterstützt Zeile(%d)', [j]); end; end; end; procedure TForm1.ReadTyp1(var j: Integer); var Edit4 : TEdit; begin Edit4 := TEdit.Create(pnlForm1); Edit4.Parent := pnlForm1; Edit4.Name := Zwischenspeicher[j]; Edit4.Enabled := True; Edit4.AutoSize := False; Edit4.Text := Zwischenspeicher[j + 1] Edit4.Setbounds(IntToStr(Zwischenspeicher[j + 2]), IntToStr(Zwischenspeicher[j + 3]), IntToStr(Zwischenspeicher[j + 4]), IntToStr(Zwischenspeicher[j + 5])); Inc(j, 8); // <- so viele Zeilen, wie für diesen Typ erforderlich end; |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Hallo,
Delphi-Quellcode:
Nehmen wir mal 10 Zeilen in der Datei an.
//for j:=3 to Form1.zwischenspeicher.Lines.Count do
for j:=3 to Form1.zwischenspeicher.Lines.Count-1 do begin if Form1.zwischenspeicher.Lines[(j-3)*8+4]='1' then begin end; end; Dann kommt bei der letzten Zeile (j=9) (9-3)*8+4 = 52 raus. Wieso soll der Compiler zur Laufzeit dann nicht meckern ... Heiko |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Wenn man die Prüfung auf Bereichsüberschreitung abschaltet ...
und dann mit die Compileroptionen so einstellt das man nicht debuggen kann... ... fehlt nur noch ein großes "try..except end" damit niemand die Fehlermeldungen sieht. |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Das ist aber schon deluxe.
Wenn man überhaupt erstmal so weit kommt dass er überhaupt kompiliert könnte man eigentlich schon ausrollen. |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Zitat:
Wenn ich das richtig gelesen habe werden so 1..2 Datensätze klaglos verarbeitet und dann macht es bumm. Gruß K-H |
._.
Nein, das war schon vollkommen abseits vom Thema, so halbwitz-weise in Richtung hochqualitativer Softwareentwicklung: "Hurra, er kompiliert! Wir liefern aus!"
Ich hätte besser nichts von mir gegeben, eigentlich gab es ja sowieso nichts mehr zu sagen. |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Zitat:
Gruß, Sven |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
Vielen Dank für die Antworten.
Aber ich verstehe es noch nicht, last uns des mal durch gehen am beispiel: Memo inhalt:
Code:
1
2 0 2 lblFeld1 Labeltext eingeben 135 44 100 16 4 lblFeld2 21.08.2013 137 53 55 16 1 txtFeld1 Name 134 72 50 23 gut, das Programm fängt an mit auslesen:
Delphi-Quellcode:
und in der 4ten Zeile steht eine 2 also geht das Programm nicht in diese if schleife!
for j:=3 to Form1.zwischenspeicher.Lines.Count do //j ist 3
begin if Form1.zwischenspeicher.Lines[(j-3)*8+4]='1' then // 3 (j)-3= 0; 0*8=0; 0+4=4 und das geht doch so weiter und dann am Ende is es halt zu Ende. Oder nicht? |
AW: Liste exceeds bounds (Schnelle Hilfe bitte)
1.
![]() 2. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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