Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi DelphiProjekt - Erstellen eines Adressbuches (https://www.delphipraxis.net/160098-delphiprojekt-erstellen-eines-adressbuches.html)

Kleine 27. Apr 2011 13:52


DelphiProjekt - Erstellen eines Adressbuches
 
Hallo,
ich bin gerade mit delphi angefangen und mache im Moment ein Projekt und bräuchte wohl Hilfe :)
Ich arbeite mit Delphi2009

Einmal die Main:
Delphi-Quellcode:
unit foMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, foAdresse, uTypen, StdCtrls, foSuche ;

type
  TForm2 = class(TForm)
    MainMenu1: TMainMenu;
    Neu1: TMenuItem;
    Aendern1: TMenuItem;
    Loeschen2: TMenuItem;
    btEnde: TButton;
    Suchen1: TMenuItem;
    AdresseListBox: TListBox;
    KontaktListBox: TListBox;
    procedure Neu1Click(Sender: TObject);
    procedure Aendern1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Loeschen2Click(Sender: TObject);
    procedure btEndeClick(Sender: TObject);
    procedure AdresseListBoxClick(Sender: TObject);
  private
    { Private-Deklarationen }
    fAdresse: tAdresse;
    procedure SetAdresse( const Value: tAdresse);
  public
    { Public-Deklarationen }
    //Adresse : tAdresse;
    Procedure RefreshList ;
    Property Adresse : tAdresse Read fAdresse Write SetAdresse;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.RefreshList;
var
  i: Integer;
begin
  AdresseListBox.Items.BeginUpdate ;
  AdresseListBox.clear ;
  for i := 0 to Adresse.adressen.Count - 1 do
    Begin
      AdresseListBox.Items.AddObject ( tAdresse ( Adresse.Adressen[i] ).toString, Adresse.Adressen[i] ) ;
    End;
  AdresseListBox.Items.EndUpdate ;
end;

procedure TForm2.Aendern1Click(Sender: TObject);
var
   FormAdresse : TFormAdresse ;
begin
  formAdresse := TFormAdresse.Create( Self );

  formAdresse.adresse := Adresse;

  if formadresse.ShowModal = mrOK then
    ShowMessage ( 'Die neuen Werte wurden gespeichert' )
  else
    ShowMessage ( 'Die Aktion wurde abgebrochen') ;

  Adresse.AddAdresse ( formAdresse.edAnrede.Text, formAdresse.edName.Text, formAdresse.edVorname.Text, formAdresse.edStrasse.Text, formAdresse.edOrt.Text ) ;
  RefreshList ;

  formadresse.Release ;
end;

procedure TForm2.btEndeClick(Sender: TObject);
begin
     close;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Adresse := tAdresse.Create ;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Adresse.Free ;
  RefreshList ;
end;

procedure TForm2.AdresseListBoxClick(Sender: TObject);
begin
  Adresse := tAdresse( AdresseListBox.Items.Objects[ Adresselistbox.ItemIndex ] ) ;
  //FormAdresse.edID.Text := Adresse.ID;
  FormAdresse.edanrede.Text := Adresse.Anrede;
  FormAdresse.edName.Text := Adresse.Nachname;
  FormAdresse.edVorname.Text := Adresse.Vorname;
  FormAdresse.edStrasse.Text := Adresse.Strasse;
  //FormAdresse.edPLZ.Text := Adresse.PLZ;
  FormAdresse.edOrt.Text := Adresse.Ort;
end;

procedure TForm2.Loeschen2Click(Sender: TObject);
begin
     Adresse.clear;
     AdresseListBox.Clear;
     ShowMessage ('Die Inhalte wurden gelöscht');
end;

procedure TForm2.Neu1Click(Sender: TObject);
var
  FormAdresse : TFormAdresse ;
begin
  formAdresse := TFormAdresse.Create( Self );
  Adresse.clear ;

  formAdresse.Adresse := Adresse ;

  if formadresse.ShowModal = mrOK then
  begin
    ShowMessage ( 'Die Werte wurden gespeichert' );
  end
  else
    ShowMessage ( 'Die Aktion wurde abgebrochen' ) ;

  Adresse.AddAdresse ( formAdresse.edAnrede.Text, formAdresse.edName.Text, formAdresse.edVorname.Text, formAdresse.edStrasse.Text, formAdresse.edOrt.Text ) ;
  RefreshList ;

  formadresse.Release ;

end;

procedure TForm2.SetAdresse(const Value: tAdresse);
begin
  fAdresse := Value;

  formAdresse.edAnrede.Text := adresse.anrede ;
  formAdresse.edID.Text     := IntToStr(adresse.ID);
  formAdresse.edName.Text   := adresse.Nachname;
  formAdresse.edVorname.Text := adresse.Vorname;
  formAdresse.edStrasse.Text := adresse.Strasse;
  formAdresse.edPLZ.Text    := IntToStr(adresse.PLZ);
  formAdresse.edOrt.Text    := adresse.Ort;


  RefreshList ;
end;

end.
und Adresse/Nebenformular
Delphi-Quellcode:
unit foAdresse;

interface

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

type
  TFormAdresse = class(TForm)
    Label1: TLabel;
    edanrede: TEdit;
    edVorname: TEdit;
    edName: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    btnOK: TButton;
    Button1: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    edID: TEdit;
    edStrasse: TEdit;
    edPLZ: TEdit;
    edOrt: TEdit;
    Button2: TButton;
    KontaktListBox: TListBox;
    cbArt: TComboBox;
    edNummer: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    btnAendern: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure KontaktListBoxClick(Sender: TObject);
    procedure btnAendernClick(Sender: TObject);

  private
    fAdresse: tAdresse;
    procedure SetAdresse(const Value: tAdresse);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

    Procedure RefreshList ;
    Procedure EintragAendern ;

    Property Adresse : tAdresse Read fAdresse Write SetAdresse ;

  end;

var
  FormAdresse: TFormAdresse;

implementation

{$R *.dfm}

procedure TFormAdresse.btnAendernClick(Sender: TObject);
begin
     Adresse.ModKontakt(cbArt.Text, edNummer.Text);
     RefreshList;
end;

procedure TFormAdresse.btnOKClick(Sender: TObject);
begin
  adresse.ID := StrToInt(edID.Text) ;
  adresse.Anrede := edanrede.Text ;
  adresse.Nachname := edName.Text ;
  adresse.Vorname := edVorname.Text ;
  adresse.Strasse := edStrasse.Text ;
  adresse.PLZ := StrToInt(edPLZ.Text) ;
  adresse.Ort := edOrt.Text ;

end;

procedure TFormAdresse.Button2Click(Sender: TObject);
begin
  Adresse.AddKontakt ( cbArt.text, edNummer.text ) ;
  RefreshList ;
end;

procedure TFormAdresse.FormCreate(Sender: TObject);

begin
         edAnrede.Text := '' ;
         edVorname.Text := '' ;
         edName.Text := '' ;
         edID.Text := '' ;
         edStrasse.Text := '' ;
         edPLZ.Text := '' ;
         edOrt.Text := '' ;
end;

procedure TFormAdresse.KontaktListBoxClick(Sender: TObject);
var
  kontaktdaten : tKontaktdaten ;
begin
  KontaktDaten := tKontaktdaten( KontaktListBox.Items.Objects[ Kontaktlistbox.ItemIndex ] ) ;
  cbArt.Itemindex := cbArt.Items.IndexOf( KontaktDaten.Art ) ;
  edNummer.text := KontaktDaten.Nummer ;
end;

procedure TFormAdresse.EintragAendern;
var
 i: Integer;
begin
     for i :=0 to KontaktListBox.Items.Count -1 do
       begin
            if KontaktListBox.Selected[i] then
            KontaktListBox.Items[i];
       end;

end;

procedure TFormAdresse.RefreshList;
var
  i: Integer;
begin
  KontaktListBox.Items.BeginUpdate ;
  KontaktListBox.clear ;
  for i := 0 to Adresse.kontakte.Count - 1 do
    Begin
      KontaktListBox.Items.AddObject ( tKontaktdaten ( Adresse.Kontakte[i] ).toString, Adresse.Kontakte[i] ) ;
    End;
  KontaktListBox.Items.EndUpdate ;
end;

procedure TFormAdresse.SetAdresse(const Value: tAdresse);
begin
  fAdresse := Value;

  edAnrede.Text := adresse.anrede ;
  edID.Text     := IntToStr(adresse.ID);
  edName.Text   := adresse.Nachname;
  edVorname.Text := adresse.Vorname;
  edStrasse.Text := adresse.Strasse;
  edPLZ.Text    := IntToStr(adresse.PLZ);
  edOrt.Text    := adresse.Ort;


  RefreshList ;
end;

end.
und einmal noch eine Unit
Delphi-Quellcode:
unit uTypen;

interface

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

type
  TKontaktdaten = class;
  TAdresse = class
     ID : Integer;
     Anrede : string;
     Nachname : string;
     Vorname : string;
     Strasse : string;
     PLZ : Integer;
     Ort : string;
     Kontakte : tList ;
     Adressen : tList ;
     Function toString : String ;
     Procedure clear ;
     Constructor Create ;
     Destructor Destroy ; Override ;
     Procedure AddKontakt( Const cArt, cNummer : String ) ;
     Procedure ModKontakt( Const cArt, cNummer : String ) ;
     Procedure AddAdresse( Const cAnrede, cNachname, cVorname, cStrasse, cOrt: String);
  end;

  TKontaktdaten = class
      AdresseId : Integer ;
      ID       : Integer;
      Art      : string;
      Nummer   : String;
      Function toString : String ;
  end;


implementation


{ TAdresse }

procedure TAdresse.ModKontakt(Const cArt, cNummer: String);
var
  Kontakt : tKontaktDaten ;
begin
  Kontakt := tKontaktDaten.Create ;
  Kontakt.AdresseId := id ;
//  kontakt.id       := ??? ;
  Kontakt.Art      := cArt ;
  Kontakt.nummer   := cNummer ;
  Kontakte.insert();
end;
procedure TAdresse.AddKontakt(Const cArt, cNummer: String);
var
  Kontakt : tKontaktDaten ;
begin
  Kontakt := tKontaktDaten.Create ;
  Kontakt.AdresseId := id ;
//  kontakt.id       := ??? ;
  Kontakt.Art      := cArt ;
  kontakt.nummer   := cNummer ;
  Kontakte.Add ( Kontakt ) ;
end;

procedure TAdresse.AddAdresse(Const cAnrede, cNachname, cVorname, cStrasse, cOrt: String);
var
  Adresse : tAdresse ;
begin
  Adresse := tAdresse.Create ;
  //Adresse.ID := cID;
  Adresse.Anrede := cAnrede;
  Adresse.Nachname := cNachname;
  Adresse.Vorname := cVorname;
  Adresse.Strasse := cStrasse;
  //Adresse.PLZ := IntToStr(cPLZ);
  Adresse.Ort := cOrt;
  Adressen.Add ( Adresse ) ;
end;

procedure TAdresse.clear;
begin
  anrede := '' ;
  ID := StrToInt('0');
  Nachname := '';
  Vorname := '';
  Strasse := '';
  PLZ := StrToInt('0');
  Ort := '';
end;

constructor TAdresse.Create;
begin
  inherited;
  Kontakte := tList.Create ;
  Adressen := tList.Create ;
end;

destructor TAdresse.Destroy;
begin
  Adressen.Free ;
  Kontakte.Free ;
  inherited;
end;

function TAdresse.toString: String;
begin
  Result := Anrede+' '+Nachname+ ' ' +Vorname+' '+Strasse+' '+Ort ;
end;

{ TKontaktdaten }

function TKontaktdaten.toString: String;
begin
  Result := Art+ ' ' +Nummer ;
end;

end.
Ich weiß das jetzt erstmal ganz schön viel :D
Doch meine Problem sind zu einem :
Wenn ich aus einer der beiden ListBoxen(Einmal in der Main und einmal in Adresse) ein Eintrag auswähle, möchte ich diesen gerne ändern und im gleichen Stack überspeichern. Und in der Main, speichert er es zwar doch löscht die Einträge, die vorher schon drin waren.
Zudem gibt er mir am Anfang eine Fehlermeldung aus und wenn ich in die ListBox in der Main klicke, ich weiß das es an
Delphi-Quellcode:
Adresse := tAdresse.Create ;
liegt.
Wäre echt nett wenn jemand mir schnell helfen könnte und es ausführlicherklärt, da ich da gerade erst mit angefangen bin.
Schonmal danke im voraus :)

DeddyH 27. Apr 2011 14:08

AW: Projekt mit Delphi
 
Häng doch besser die *.pas, *.dfm und *.dpr des Projekts als Zip-Archiv an Deinen Beitrag an, dann kann man das Projekt einmal in Delphi öffnen und selbst im Debugger drüberschauen.

Achja, Willkommen in der DP :dp:

Kleine 27. Apr 2011 14:14

AW: Projekt mit Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
So einmal alles als zip-Datei :)

stahli 27. Apr 2011 14:26

AW: Projekt mit Delphi
 
Hi,

nur mal, was ich auf die Schnelle gesehen habe: In Deinem Constructor fehlt das override.

"tAdresse.Create" ist etwas unüblich. Ich würde hier ein großes "T" nutzen. Das geht leichter ins Auge :wink:

Herzlich willkommen auch von mir noch!

Kleine 27. Apr 2011 14:29

AW: Projekt mit Delphi
 
in welchem Formular den? in der main oder in adressen.
oder sogar beide? :D
in der unit ist das schon drin

DeddyH 27. Apr 2011 14:30

AW: Projekt mit Delphi
 
Ich bin noch nicht durch das System durchgestiegen. Soll TAdresse nun eine einzelne Adresse sein oder eine Auflistung von Adressen? Außerdem wird FormAdresse dynamisch erstellt, aber teilweise darauf zugegriffen, bevor es überhaupt erzeugt wurde. Das muss ich mir heute Abend zu Hause mal in Ruhe anschauen, im Moment fehlt mir leider die Zeit dazu.

Kleine 27. Apr 2011 14:33

AW: Projekt mit Delphi
 
es sollen mehrere Adressen gespeichert werden, mit mehreren Kontakte, wobei Kontakte ja E-Mail, Telefon und sowas sind.
Das wäre wirklich freundlich :)
Danke schonmal

Luckie 27. Apr 2011 15:27

AW: Projekt mit Delphi
 
Bitte gib deinem Thema einen aussagekräftigen Namen. Das meiste hier dürften Projekte mit Delphi sein.

DeddyH 27. Apr 2011 16:57

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Das Löschen der Listbox-Einträge kommt daher, dass Du der Property Adresse etwas zuweist und im Setter von TAdresse RefreshList aufrufst, was zunächst alle Einträge löscht. Nun willst Du die aktuellen Einträge wieder einfügen, greifst dort aber nicht auf die "Unteradressen" der "Hauptadresse" zu, sondern auf die nicht vorhandenen Unteradressen der aktuellen Unteradresse. Du solltest das Konzept noch einmal überdenken.

Kleine 27. Apr 2011 21:00

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Wie gesagt, ich bin blutiger Änfänger :D
Muss ich morgen mal schauen, ob ich das irgentwie alleine hinkriegen :wink:

Kleine 28. Apr 2011 07:32

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Ich hab jetzt eine procedure 'EintragAendern' hinzugefügt, die so aussieht
Delphi-Quellcode:
procedure TFormAdresse.EintragAendern;
var
 i: Integer;
begin
     for i :=0 to KontaktListBox.Items.Count -1 do
       begin
            if KontaktListBox.Selected[i] then
            Adresse.Kontakte.Insert(i,adresse.Kontakte);
            //KontaktListBox.insert(i,Kontakte);
       end;

end;
es funktioniert natürlich nicht. hat jemand ne idee wie man das machen könnte?

DeddyH 28. Apr 2011 07:40

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Was soll denn eigentlich geändert werden?

Kleine 28. Apr 2011 07:43

AW: DelphiProjekt - Erstellen eines Adressbuches
 
in foAdresse, kann man ja e-mail telfeon und so einfügen.
Und wenn man ein Eintrag in der Liste auswählt erscheint er ja auch in der combobox und im editfeld, und das editfeld soll man verändern können, und wenn man dann auf den button ändern klickt soll er den alten eintrag überschreiben.
Also das sogesehen aktualisieren :?

DeddyH 28. Apr 2011 07:50

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Ich schreibe Dir mal eine Minimal-Demo, wie sich so etwas realisieren ließe, kann aber einen Moment dauern.

Kleine 28. Apr 2011 08:45

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bin schon weiter gekommen, mir wurde ausserhalb geholfen.
Im moment siehts so aus..

DeddyH 28. Apr 2011 08:59

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schau ich mir gleich an, hier erstmal meins :)

Kleine 28. Apr 2011 09:15

AW: DelphiProjekt - Erstellen eines Adressbuches
 
danke schön :)

mal ne frage zu meinem neuen Programm..
Irgentwie überschreibt er den Wert in AdresseListBox im foMain. Dabei soll er den neuen ja einfach unten dran fügen :?

Luckie 28. Apr 2011 09:16

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Deutschland ist nicht der Nabel der Welt. Will sagen, es gibt auch Postleitzahlen, die Buchstaben enthalten, zum Beispiel in England:
Delphi-Quellcode:
procedure TAdresse.SetPLZ(const Value: TString5);
var
  dummy: integer;
begin
  if (Value = '') or TryStrToInt(Value, dummy) then
    FPLZ := Value
  else
    raise Exception.CreateFmt('"%s" ist keine gültige Postleitzahl.', [Value]);
end;
;)

DeddyH 28. Apr 2011 09:18

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Das ist mir doch wurscht, mir ging es nur darum, irgendwie zur Demonstration einen Setter einzubauen ;)

DeddyH 28. Apr 2011 09:24

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Zitat:

Zitat von Kleine (Beitrag 1097347)
Irgentwie überschreibt er den Wert in AdresseListBox im foMain. Dabei soll er den neuen ja einfach unten dran fügen :?

Ist das denn auch tatsächlich ein neues Objekt? Ich habe nur kurz über die neue Version drübergeschaut, aber wenn ich das richtig gesehen habe ist das immer noch dieser Kuddelmuddel mit einer Adresse und Unteradressen.

Kleine 28. Apr 2011 09:35

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Zu Anfang hatte das ja funktioniert, jetzt wurde das Programm vereinfacht, weil ich da alles doppelt und dreifach hingeschrieben hatte.
Nur jetzt find ich den fehler nicht :|

DeddyH 28. Apr 2011 09:39

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Bist Du denn einmal schrittweise durchgegangen und hast geschaut, was so alles durchlaufen wird?

Kleine 28. Apr 2011 09:45

AW: DelphiProjekt - Erstellen eines Adressbuches
 
jaa eigentlich schon ..
oh man ich schmeiß das programm an die wand :D

DeddyH 28. Apr 2011 09:55

AW: DelphiProjekt - Erstellen eines Adressbuches
 
Ich verstehe Deine doppelte Datenhaltung nicht. Leg die Adressen entweder in Deiner TList (TObjectlist wäre eigentlich geeigneter) ab oder in den Items der Listbox, alles andere führt nur zu Verwirrung, da ja dann 2 Listen dieselben Objekte beinhalten.

Kleine 28. Apr 2011 09:58

AW: DelphiProjekt - Erstellen eines Adressbuches
 
hab den fehler schon gefunden.

Ich wollte wohl das in der ListBox in foAdressen, keine doppelten Datensätze eingetragen werden.
Also das er erstmal prüft ob beim Zufügen(Button) der Datensatz schon in der Box steht. :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 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