Thema: Delphi Adressbuch, aber...

Einzelnen Beitrag anzeigen

Wessiiii

Registriert seit: 3. Apr 2009
Ort: Nalbach
14 Beiträge
 
Delphi 6 Personal
 
#1

Adressbuch, aber...

  Alt 3. Apr 2009, 17:55
Hallo,

ich muss für eine Bewerbung ein Adressbuch entwickeln.
Soweit auch ganz ok, nur hab ich ein Problem:

Er gibt mir immer den Fehler EStackOverflow zurück.
Das passiert immer, wenn

- Er in die auskommentierte for Schleife in Unit1 geht und dort auf den ersten Befehl trifft
- oder wenn halt die for schleife auskommentiert bleibt, beim end; von TForm1.Create

Warum?
Hab schon versucht den Stack größer zu stellen, aber nix.

Außerdem würde ich gerne, wenn man im SG eine Zelle auswählt, dass etwas passiert (siehe TForm1.SG_KONTAKTESelectCell). Dazu möchte ich den Inhalt den Arrays "Kontakte[i]" mit dem der Zelle vergleichen, wie geht das?

Hiermal der Code:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Unit2;

type
  TForm1 = class(TForm)
    GB_KONTAKTE: TGroupBox;
    LB_SUCHEN: TLabel;
    ED_SUCHEN: TEdit;
    SG_KONTAKTE: TStringGrid;
    GB_DETAILS: TGroupBox;
    LB_VORNAME: TLabel;
    LB_NACHNAME: TLabel;
    LB_GEB: TLabel;
    LB_TELE_PRIV: TLabel;
    LB_TELE_DIENST: TLabel;
    LB_HANDY: TLabel;
    LB_EMAIL: TLabel;
    ED_VORNAME: TEdit;
    ED_NACHNAME: TEdit;
    ED_GEB: TEdit;
    ED_TELE_PRIV: TEdit;
    ED_TELE_DIENST: TEdit;
    ED_HANDY: TEdit;
    ED_EMAIL: TEdit;
    GB_BEARBEITEN: TGroupBox;
    BT_NEU: TButton;
    BT_BEARBEITEN: TButton;
    BT_LOESCHEN: TButton;
    BT_EXTRA: TButton;
    procedure FormCreate(Sender: TObject);
    procedure BT_NEUClick(Sender: TObject);
    procedure SG_KONTAKTESelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  datei: file of TKontakt;
  zz: string;
  Kontakte: array of TKontakt;
  i: integer;
  pfad: textfile;
  pfad_string: string;

implementation

uses Unit3;


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
        i := 0;

        SG_KONTAKTE.Cells[0, 0] := 'Nachname';
        SG_KONTAKTE.Cells[1, 0] := 'Vorname';

        if (SG_KONTAKTE.Cells[0, 1] = '') AND (SG_KONTAKTE.Cells[1, 1] = '') then
                begin
                LB_SUCHEN.Enabled := false;
                ED_SUCHEN.Enabled := false;
                end;

     try
        AssignFile(pfad, 'C:\pfad.txt');
        Reset(pfad);
        ReadLn(pfad, pfad_string);
        CloseFile(pfad);

        AssignFile(datei, pfad_string);
        Reset(datei);
        While (eof(datei)=false) do
                begin
                i := i + 1;
                SetLength(Kontakte, i);
                Read(datei, Kontakte[i]);
                end;
        {for i:=0 to High(kontakte) do
                begin
                SG_KONTAKTE.Cells[0, i+1] := Kontakte[i].Nachname;
                SG_KONTAKTE.Cells[1, i+1] := Kontakte[i].Vorname;
                end;}
        CloseFile(datei);
     except
        MessageDlg('Keine Kontakte gefunden', mtError, [mbOK], 0);
     end;
end;


procedure TForm1.BT_NEUClick(Sender: TObject);
begin
        Form3.Visible := True;
end;

procedure TForm1.SG_KONTAKTESelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
        for i:=0 to High(Kontakte) do
                begin
                if Kontakte[i].Vorname OR Kontakte[i].Nachname =
end;

end.
Code:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
        TKontakt = record
                Vorname: String[50];
                Nachname: String[50];
                Geb_datum: String[10];
                Telefon_p: String[20];
                Telefon_d: String[20];
                Mobil: String[15];
                EMail: String[50];
        end;


implementation

end.
Code:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit1, Unit2;

type
  TForm3 = class(TForm)
    GB_DETAILS: TGroupBox;
    LB_VORNAME: TLabel;
    LB_NACHNAME: TLabel;
    LB_GEB: TLabel;
    LB_TELE_PRIV: TLabel;
    LB_TELE_DIENST: TLabel;
    LB_HANDY: TLabel;
    LB_EMAIL: TLabel;
    ED_VORNAME_NEU: TEdit;
    ED_NACHNAME_NEU: TEdit;
    ED_GEB_NEU: TEdit;
    ED_TELE_PRIV_NEU: TEdit;
    ED_TELE_DIENST_NEU: TEdit;
    ED_HANDY_NEU: TEdit;
    ED_EMAIL_NEU: TEdit;
    BT_SPEICHERN_NEU: TButton;
    BT_SCHLIESSEN_NEU: TButton;
    SD_SPEICHERN: TSaveDialog;
    procedure BT_SCHLIESSEN_NEUClick(Sender: TObject);
    procedure BT_SPEICHERN_NEUClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation


{$R *.dfm}

procedure TForm3.BT_SCHLIESSEN_NEUClick(Sender: TObject);
begin
        Close;
end;

procedure TForm3.BT_SPEICHERN_NEUClick(Sender: TObject);
var    i: integer;
begin
        if SD_SPEICHERN.Execute then
                begin
                  SetLength(Kontakte, (length(kontakte)+1));
                  Kontakte[High(Kontakte)].Vorname := ED_VORNAME_NEU.Text;
                  Kontakte[High(Kontakte)].Nachname := ED_NACHNAME_NEU.Text;
                  Kontakte[High(Kontakte)].Geb_datum := ED_GEB_NEU.Text;
                  Kontakte[High(Kontakte)].Telefon_p := ED_TELE_PRIV_NEU.Text;
                  Kontakte[High(Kontakte)].Telefon_d := ED_TELE_DIENST_NEU.Text;
                  Kontakte[High(Kontakte)].Mobil := ED_HANDY_NEU.Text;
                  Kontakte[High(Kontakte)].EMail := ED_EMAIL_NEU.Text;
                  try
                        AssignFile(datei, SD_SPEICHERN.FileName);
                        ReWrite(datei);
                        for i:=0 to High(Kontakte) do
                                begin
                                Write(datei, Kontakte[i]);
                                end;
                        AssignFile(pfad,'C:\pfad.txt' );
                        ReWrite(pfad);
                        WriteLn(pfad, SD_SPEICHERN.FileName);
                        CloseFile(pfad);
                  except
                        MessageDlg('Fehler beim schreiben der Datei', mtError, [mbOK], 0);
                  end;
                  end;


end;

end.
Vielen Dank schonmal
Marius Kleber
  Mit Zitat antworten Zitat