unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  LCLTranslator, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    EditVorname: TEdit;
    EditName: TEdit;
    EditOrt: TEdit;
    EditStrasse: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ListBox1: TListBox;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;
  Vorname: Array [0..100] of String;
  Nachname: Array [0..100] of String;
  Ort: Array [0..100] of String;
  Strasse: Array [0..100] of String;
  nummer: Integer;
implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);

begin

  // Array vergrößern
  // SetLength(EditVorname, nummer + 1);
  // SetLength(EditName, nummer + 1);
  // SetLength(EditOrt, nummer + 1);
  // SetLength(EditStrasse, nummer + 1);

  Vorname[nummer]:= EditVorname.Text;
  Nachname[nummer]:= EditName.Text;
  Ort[nummer]:= EditOrt.Text;
  Strasse[nummer]:= EditStrasse.Text;
  ListBox1.Items.Add(Nachname[nummer]);

  // ins Memo schreiben
  Memo1.Lines.add(EditVorname.Text);
  Memo1.Lines.add(EditName.Text);
  Memo1.Lines.add(EditOrt.Text);
  Memo1.Lines.add(EditStrasse.Text);

  // Felder leeren
  EditVorname.Text:='';
  EditName.Text:='';
  EditOrt.Text:='';
  EditStrasse.Text:='';
  inc(nummer);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  zaehler: Integer;
begin
  Memo1.Clear;
  for zaehler:= 0 to nummer - 1 do
  begin
    Memo1.Lines.Add(Vorname[zaehler]);
    Memo1.Lines.Add(Nachname[zaehler]);
    Memo1.Lines.Add(Ort[zaehler]);
    Memo1.Lines.Add(Strasse[zaehler]);
  end;
  SaveDialog1.Title:= 'Datei speichern ...';
  if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  zaehler: Integer;
begin
   nummer:= 0;
   zaehler:= 0;
   OpenDialog1.Title:= 'Datei öffnen ...';
   if OpenDialog1.Execute then
   begin
      // Memo/Listbox leeren
      Memo1.Clear;
      ListBox1.Clear;

      // Größe der Arrays erhöhen
      // SetLength(EditVorname, nummer + 1);
      // SetLength(EditName, nummer + 1);
      // SetLength(EditOrt, nummer + 1);
      // SetLength(EditStrasse, nummer + 1);

      // OpenDialog1 aufrufen
      // zeilenweise lesen und in das Memo-Feld übertragen
      Memo1.Lines.LoadFromFile(Opendialog1.FileName);

      // solange lesen, bis letzte Zeile erreicht ist
      while zaehler< Memo1.Lines.Count-1 do
      begin
         // Zeile einem Array zuordnen
         Vorname[nummer]:= Memo1.Lines[zaehler];
         Nachname[nummer]:= Memo1.Lines[zaehler+1];
         Ort[nummer]:= Memo1.Lines[zaehler + 2];
         Strasse[nummer]:= Memo1.Lines[zaehler + 3];

         // Name der Listbox hinzufügen
         ListBox1.Items.Add(Nachname[nummer]);

         // ein Datensatz umfasst 4 Zeilen
         // Datensatz gelesen -> 4 zaehler vor, nächster Datensatz -> nummer um 1 erhöhen
         zaehler:= zaehler + 4;
         inc(nummer);
         // SetLength(EditVorname, nummer + 1);
         // SetLength(EditName, nummer + 1);
         // SetLength(EditOrt, nummer + 1);
         // SetLength(EditStrasse, nummer + 1);
    end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetDefaultLang('de');
end;


procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.add(Vorname[ListBox1.ItemIndex]);
  Memo1.Lines.add(Nachname[ListBox1.ItemIndex]);
  Memo1.Lines.add(Ort[ListBox1.ItemIndex]);
  Memo1.Lines.add(Strasse[ListBox1.ItemIndex]);
end;


end.


