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 4 von 5   « Erste     234 5      
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
 
#31
  Alt 20. Feb 2009, 22:43
Zitat von Sir Rufo:
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,
Kannst du mir da mal eine kurzes Beispiel machen? Mir fällt da jetzt nichts ein, wei man das zusammen abhandeln könnte.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#32
  Alt 21. Feb 2009, 12:11
OK, hier dein Code für einen neuen Kontakt:
Delphi-Quellcode:
procedure TfrmAdressen.NewContact;
var
  Details : TDetails;
  Contact : TContact;
begin
  Details := TDetails.Create(nil); // Edit, New
  try
    Details.IsNewContact := True; // New
    Details.Caption := 'Neuer Kontakt'; // New
    Contact := TContact.Create; // New
    Details.Contact := Contact; // New
    Details.ShowModal; // Edit, New
    if Contact.HasBeenModified then // Edit, New
    begin
      ContactCollection.Add(Contact); // New
      ContactCollection.HasBeenModified := True; // Edit, New
      FillListbox; // Edit, New
      UpdateStatusbar; // Edit, New
    end;
  finally
    Details.Release; // Edit, New
  end;
end;
und hier für das Bearbeiten:
Delphi-Quellcode:
procedure TfrmAdressen.ShowContactDetails;
var
  Details : TDetails;
begin
  if (lbContacts.ItemIndex > -1) then // Edit
  begin
    Details := TDetails.Create(nil); // Edit, New
    try
      Details.Contact := TContact(lbContacts.Items.Objects[lbContacts.ItemIndex]); // Edit
      Details.ShowModal; // Edit, New
      if Details.Contact.HasBeenModified then // Edit, New
      begin
        ContactCollection.HasBeenModified := True; // Edit, New
        FillListbox; // Edit, New
        UpdateStatusbar; // Edit, New
      end;
    finally
      Details.Release; // Edit, New
    end;
  end;
end;
jetzt fassen wir das mal zusammen:
Delphi-Quellcode:
procedure TfrmAdressen.EditContactDetails(const IsNew : Boolean );
var
  Details : TDetails;
  Contact : TContact;
begin
  if
    IsNew or
    (lbContacts.ItemIndex > -1)
  then
    begin
      Details := TDetails.Create(nil);
      try
        if
          IsNew
        then
          begin
            Contact := TContact.Create;
            Details.Caption := 'Neuer Kontakt';
          end
        else
          Contact := TContact(lbContacts.Items.Objects[lbContacts.ItemIndex]);
 
        Details.IsNewContact := IsNew;
        Details.Contact := Contact;

        Details.ShowModal;
        if
     Details.Contact.HasBeenModified
   then
          begin
            if
              IsNew
            then
              ContactCollection.Add(Contact);
            ContactCollection.HasBeenModified := True;
            FillListbox;
            UpdateStatusbar;
          end;
      finally
        Details.Release;
      end;
  end;
end;
Nun ist es eine Funktion

cu

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#33
  Alt 21. Feb 2009, 12:13
Also ich finde da meine Lösung aber etwas übersichtlicher.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#34
  Alt 21. Feb 2009, 12:21
Das kann man auch noch schicker gestalten, wenn man das IsNew-Flag an das Kontakt-Object hängt.

Nur ich betrachte 2 Fälle in einer proc, die sich aber sehr ähnlich sind.

btw, ich habe da ein kleines Speicherleck entdeckt wenn ein neuer Kontakt nicht gespeichert wird.
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 Contact.HasBeenModified then
    begin
      ContactCollection.Add(Contact);
      ContactCollection.HasBeenModified := True;
      FillListbox;
      UpdateStatusbar;
    end
    else
      Contact.Free; // Wenn nichts eingegeben wurde, dann hängt das hier sonst in der Luft
  finally
    Details.Release;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#35
  Alt 21. Feb 2009, 13:14
Hallo Michael,

ich habe gerade mal Deine kleine Adressdatenbank getestet. Die Adressdatenbank ist klein und schnuckelig. Aber ein paar Kritik- und Verbesserungspunktee habe ich trotzdem :
  • Die Eingabe würde ich komplett Ändern, da ich das StringGrid dafür nicht sehr hilfreich finde. Oder Du überwachst die Tasten, wenn dann zum Beispiel Return oder Tab betätigt wird, springt es in die nächste Zeile.
  • Bei der Telefonnummer würde ich nur die Zeichen "+-/()" und die Zahlen zulassen.
  • Ich würde auch gleich die Konvention der Telefonnummer einheitlich machen wie es Sir Rufo in diesem Beitrag geschrieben hat, damit Detail und Übersichtsliste gleich aussehen
  • Bei der Postleitzahl würde ich nur Zahlen zulassen und auf maximal 5 Stellen begrenzen
  • Die Konvention der E-Mail Adresse überpüfen
  • Vielleicht die Anwendung noch als Tray-Icon setzen, für einen schnellen Zugriff.
So das, solls erstmal gewesen sein.
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#36
  Alt 21. Feb 2009, 13:20
Zitat von RWarnecke:
Die Eingabe würde ich komplett Ändern, da ich das StringGrid dafür nicht sehr hilfreich finde. Oder Du überwachst die Tasten, wenn dann zum Beispiel Return oder Tab betätigt wird, springt es in die nächste Zeile.
Ich hatte erst Labels und Editfelder, das war mir einfach zu groß.

Zitat:
Bei der Telefonnummer würde ich nur die Zeichen "+-/()" und die Zahlen zulassen.
Müsste in der aktuellen Version schon geänder sein.

Zitat:
Bei der Postleitzahl würde ich nur Zahlen zulassen und auf maximal 5 Stellen begrenzen
Und wie gibst du dann eine englische Postleitzahl ein?

Zitat:
Die Konvention der E-Mail Adresse überpüfen
Ist das wirklich nötig?

Zitat:
Vielleicht die Anwendung noch als Tray-Icon setzen, für einen schnellen Zugriff.
Ich kann es eigentlich nicht abhaben, wenn so viele Icons in der TNA sind und ausser dem ist sie eiegntlich für den USB-Stick gedacht. Ist da ein TNA-Icon sinnvoll?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#37
  Alt 21. Feb 2009, 13:38
Zitat von Luckie:
Ich hatte erst Labels und Editfelder, das war mir einfach zu groß.
Dann würde ich aber die Return-Taste und TAB-Taste abfangen, so dass man damit in nächste Feld springen kann.

Zitat von Luckie:
Zitat:
Bei der Telefonnummer würde ich nur die Zeichen "+-/()" und die Zahlen zulassen.
Müsste in der aktuellen Version schon geänder sein.
In der Version 1.0.0.27 funktioniert es nicht (siehe Anhang).

Zitat von Luckie:
Zitat:
Bei der Postleitzahl würde ich nur Zahlen zulassen und auf maximal 5 Stellen begrenzen
Und wie gibst du dann eine englische Postleitzahl ein?
Ok, das ist ein Argument. Dann würde ich es vom Land abhängig machen und eine Combobox in die Zelle des StringGrids für das Land setzen, so dass man das Land auswählen kann.

Zitat von Luckie:
Zitat:
Die Konvention der E-Mail Adresse überpüfen
Ist das wirklich nötig?
Habe ja nur daran gedacht, dass Du ja eine Funktion hast zum E-Mail schreiben.

Zitat von Luckie:
Ich kann es eigentlich nicht abhaben, wenn so viele Icons in der TNA sind und ausser dem ist sie eiegntlich für den USB-Stick gedacht. Ist da ein TNA-Icon sinnvoll?
Über sinnvoll oder nicht, kann man ja streiten. Mache es doch konfigurierbar, so das jeder User selber entscheiden kann.

Edit : Anhang hinzugefügt.
Miniaturansicht angehängter Grafiken
zwischenablage01_178.jpg  
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#38
  Alt 21. Feb 2009, 13:43
Ich lasse bisher nur die Anzeige der Telefonnummer in der Listbox formatieren. Gespeichert wird sie wie eingegeben.

Und das mit der TNA konfigurierbar machen, ist mir für die kleine Anwendung zu viel Arbeit.
Michael
  Mit Zitat antworten Zitat
Andreas L.
 
#39
  Alt 21. Feb 2009, 19:34
Die Symbole in der ListBox sehen sehr pixelig aus wenn ein Item markiert ist. Wenn du in der Methode DrawItems dein TIcon weglässt und direkt die Draw-Methode der ImageList verwendest siehts besser aus.

ImgList.Draw(Canvas, Rect.left + 4, Rect.Top + 4, 0, dsTransparent, itImage);
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#40
  Alt 21. Feb 2009, 19:56
Mein Delphi 2006 kennt die Bezeichner dsTransparent und itImage nicht, obwohl die Unit Controls eingebunden ist. Und mit Main.frmAdressen.ImageList1.Draw(Canvas, ARect.left + 4, ARect.Top + 4, 6); sehe ich keinen großen Unterschied.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 16:35 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 by Thomas Breitkreuz