AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Kleine Adress-Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Kleine Adress-Datenbank

Ein Thema von Luckie · begonnen am 20. Feb 2009 · letzter Beitrag vom 22. Feb 2009
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Ich hatte hier schon mal eine Adress-Datenbank vorgestellt. Dies ist nun die nachfolge Version der Adress-Datenbank. Ich hhabe mich dazu entschlossen sie von Grund auf neu zu programmieren, weil ich mittlerweile meine alten Code schrecklich fand und weil mir die Oberfläche zu groß war. Noch sind nicht alle Features der alten Version implementiert. So fehlt noch der Upload der XML-Datei mit den Kontakten und die Möglichkeit die Kontakte auszudrucken. Sprich es gehen nur die grundlegenden Funktionen einer Adress-Datenbank:
- Kontakt anlegen
- Kontakt löschen
- Kontakt editieren
- Kontakte filtern

Ich habe versucht die Oberfläche möglichst minimalistisch zu halten. Sie besteht nur aus einer Listbox und einer Toolbar mit den nötigen Schaltflächen. In der Listbox direkt werden der Name und die Telefonnumer angezeigt, weil ich denke, dass man die Telefonnumer am häufigsten braucht. Die Details zu einem Kontakt lassen sich entweder durch einen Doppelklick auf den Eintrag anzeigen oder durch betätigen der Return-Taste oder über das Kontexktmenü der Listbox. Über das Kontextmenü der Listbox lässt sich der Kontakt auch löschen, was man auch mit der entsprechenden Schaltfläche in der Toolbar machen kann oder über die Tastenkombination [Strg + Entf]. Das Kontextmenü bietet noch die Möglichkeit eine E-Mail an den Kontokt zu schreiben mit dem Standardemailprogramm, wenn mindestens eine E-Mail Adresse hinterlegt ist.

Die Kontakte lassen sich auch filtern, wobei der Filter nur stupide nach den eingegeben Buchstaben filtert. Wird also "he" eingegeben, werden alle Kontakte angezeigt, in denen die Buchstabenkombination "he" vorkommt.

Die Daten werden in einer XML-Datei im Programmverzeichnis gespeichert. Im Programmverzeichnis deshalb, weil das Programm für meinen USB-Stick gedacht ist. Bis auf das Feld Bemerkung werden alle Daten im Klartext gespeichert. Das Feld Bemerkung wird Base64 codiert, damit man auch Zeilenumbrüche mit speichern kann.

Im Anhang das Programm mit Quellcode und ein Screenshot.
Miniaturansicht angehängter Grafiken
adressdbxml_main_491.jpg   adressdbxml_details_148.jpg  
Angehängte Dateien
Dateityp: zip adressdbxml2_107.zip (483,3 KB, 133x aufgerufen)
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#21
  Alt 20. Feb 2009, 15:03
Ächtz, wenn man Code blind ohne zu testen an eine andere Stelle kopiert. Sollte gefixt sein. Aktuelle Version im ersten Posting.

Die "Speichern"-Schaltfläche habe ich entfernt, weil sie irgendwie überflüssig geworden ist.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#22
  Alt 20. Feb 2009, 15:14
Mal nur so nebenbei ...

wäre es nicht besser, das Modified und NewContact in dem Object TContact zu verwalten?

Delphi-Quellcode:
type
  TMeinObject = class
  private
    FModified : Boolean;
    FIsNew : Boolean;
    FInfo : string;
    procedure SetInfo(const Value : string);
  public
    property IsNew : Boolean read FIsNew;
    property Modified : Boolean read FModified;
    property Info : string read FInfo write SetInfo;
    procedure Load;
    constructor Create;
  end;

implementation

procedure TMeinObject.SetInfo(const Value : string);
begin
  if FInfo <> Value then FModified := True;
  FInfo := Value;
end;

procedure TMeinObject.Load;
begin
  FInfo := 'Daten';
  FIsNew := False;
  FModified := False;
end;

procedure TMeinObject.Create;
begin
  inherited;
  FInfo := '';
  FIsNew := True;
  FModified := False;
end;
das macht die Sache doch irgendwie runder ...

cu

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#23
  Alt 20. Feb 2009, 15:17
Zitat von Luckie:
Ächtz, wenn man Code blind ohne zu testen an eine andere Stelle kopiert. Sollte gefixt sein. Aktuelle Version im ersten Posting.
Nö ... irgendwie nicht ...

aber der source ist verschwunden ... wieso
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#24
  Alt 20. Feb 2009, 15:23
So jetzt sollte es aber funktionieren. Ichhabe es noch mal neu kompiliert und getestet. Der Source ist jetzt auch wieder dabei. Aktuelle Version im ersten Posting.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#25
  Alt 20. Feb 2009, 18:33
Zitat von Luckie:
So jetzt sollte es aber funktionieren. Ichhabe es noch mal neu kompiliert und getestet. Der Source ist jetzt auch wieder dabei. Aktuelle Version im ersten Posting.
Die Neuanlage tut es aber nicht ...
Delphi-Quellcode:
procedure TfrmAdressen.NewContact;
...
    Details.ShowModal;
    if Details.ModalResult = mrOk then // Du hast kein ModalResult mehr!!!
... aber bearbeiten geht ...
Delphi-Quellcode:
procedure TfrmAdressen.ShowContactDetails;
...
      Details.ShowModal;
      //if Details.ModalResult = mrOK then
      if Details.Modified then // aha ... hier geändert
Wundert mich eh, dass du für die Übernahme der Daten aus dem Formular

a) dieses 2x programmiert hast (ist eine typische Fehlerquelle, wie man hier sieht)
b) diese Übergabe nicht im Form frmContacts machst

Ich hätte an das frmContacts einfach nur das Contact-Object übergeben und nachher zurückverlangt.
Dann bleibt der Code für das Anzeigen, bearbeiten und zurückschreiben auch dort wo es passiert, und im Hauptteil reagiere ich einfach nur noch auf das Flag Modified und New.

cu

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#26
  Alt 20. Feb 2009, 19:26
Zitat von Sir Rufo:
Die Neuanlage tut es aber nicht ...
Mist.

Zitat:
Ich hätte an das frmContacts einfach nur das Contact-Object übergeben und nachher zurückverlangt.
Das ist eine gute Idee, werde ich so umsetzen. Ich würde jetzt so spontan die Create-Methode von der Form überschreiben mit einem Kontakt-Objekt als Parameter. Nur, wie bekomme ich es wieder zurück?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#27
  Alt 20. Feb 2009, 19:29
Zitat von Luckie:
Zitat von Sir Rufo:
Die Neuanlage tut es aber nicht ...
Mist.

Zitat:
Ich hätte an das frmContacts einfach nur das Contact-Object übergeben und nachher zurückverlangt.
Das ist eine gute Idee, werde ich so umsetzen. Ich würde jetzt so spontan die Create-Methode von der Form überschreiben mit einem Kontakt-Objekt als Parameter. Nur, wie bekomme ich es wieder zurück?
Du rufst das Fenster ja eh modal auf ... also Objekt übergeben ... wird im Form bearbeitet ... das Form geschlossen.

Die Referenz auf das Object hat sich ja nicht verändert, nur der Inhalt und darauf kannst du nach dem Schließen reagieren.

cu

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#28
  Alt 20. Feb 2009, 20:00
Also ich habe es jetzt so:
Delphi-Quellcode:
procedure TfrmAdressen.ShowContactDetails;
var
  Details : TDetails;
  Contact : TContact;
begin
  if (lbContacts.ItemIndex > -1) then
  begin
    Details := TDetails.Create(nil);
    try
      Details.Contact := TContact(lbContacts.Items.Objects[lbContacts.ItemIndex]);;
      Details.ShowModal;
      if Details.Modified then
      begin
        // hier fehlt was
        ContactCollection.HasBeenModified := True;
        FillListbox;
      end;
    finally
      Details.Release;
    end;
  end;
end;
Nur wie bekomme ich das geänderte Objekt in die ContactCollection? Bisher habe ich ja nur das Objekt geändert, was an der Listbox hängt. Ich müsste die ganze Collection leeren und mit den Objekten der Listbox wieder füllen. Oder gibt es da eine bessere Möglichkeit?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#29
  Alt 20. Feb 2009, 20:13
Hat sich erledigt, war Blödsinn.

Anzeigen sieht jetzt so aus:
Delphi-Quellcode:
procedure TfrmAdressen.ShowContactDetails;
var
  Details : TDetails;
  Contact : TContact;
begin
  if (lbContacts.ItemIndex > -1) then
  begin
    Details := TDetails.Create(nil);
    try
      Details.Contact := TContact(lbContacts.Items.Objects[lbContacts.ItemIndex]);;
      Details.ShowModal;
      if Details.Modified then
      begin
        ContactCollection.HasBeenModified := True;
        FillListbox;
        UpdateStatusbar;
      end;
    finally
      Details.Release;
    end;
  end;
end;
Undneu sieht so aus:
Delphi-Quellcode:
procedure TfrmAdressen.NewContact;
var
  Details : TDetails;
  Contact : TContact;
begin
  Details := TDetails.Create(nil);
  try
    Details.IsNewContact := True;
    Details.Caption := 'Neuer Kontakt';
    Contact := TContact.Create;
    Details.Contact := Contact;
    Details.ShowModal;
    if Details.Modified then
    begin
      ContactCollection.Add(Contact);
      ContactCollection.HasBeenModified := True;
      FillListbox;
      UpdateStatusbar;
    end;
  finally
    Details.Release;
  end;
end;
Hast du dir das so gedacht?

Aktuelle Version (1.0.0.27 im ersten Posting.

PS: Jetzt sollte es aber klappen. Hmpf.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#30
  Alt 20. Feb 2009, 20:37
Ja, jetzt tut es (have a close look at my signature)

Nur ist ein neuer Kontakt ein Sonderform vom Editieren (vieles gleich, weniges anders). Diese Funktion würde ich in einer abhandeln, oder Teile in einer eigenen procedure auslagern, dann ist auch bei einer Erweiterung immer gesichert, dass es funktioniert.

Aber eine fast ähnliche Abfolge mehr als einmal zu Schreiben finde ich immer lästig und pfui
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz