Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Liste exceeds bounds (Schnelle Hilfe bitte)

  Alt 21. Aug 2013, 14:42
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;
  Mit Zitat antworten Zitat