Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Kleine Adress-Datenbank (https://www.delphipraxis.net/129517-kleine-adress-datenbank.html)

Luckie 20. Feb 2009 13:25


Kleine Adress-Datenbank
 
Liste der Anhänge anzeigen (Anzahl: 3)
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.

Larsi 20. Feb 2009 13:37

Re: Kleine Adress-Datenbank
 
Verbesserungsvorschläge:

Outlook Import

Tab Möglichkeit bei der Eingabe.

AlexII 20. Feb 2009 13:39

Re: Kleine Adress-Datenbank
 
Das Prog sieht erstmal nicht so schlecht aus.

Aber ich würde an deiner Stelle nen Editieren.Icon irgendwo einbauen. Das ist besser so, der User muss dann nicht lange überlegen wie er nun den Eintrag editieren soll.

Schließen.Icon würde ich irgendwo rechts setzen. Am besten so: Neu, Editieren, Löschen, Suchen, XMLInfo, Info, Schließen. :thumb:

Und XMLInfo ist nicht vollständig wenn noch keine Kontakte abgelegt sind.

Luckie 20. Feb 2009 13:44

Re: Kleine Adress-Datenbank
 
Outlook Import? Ach du meine Güte, was verlangst du da von mir?

"Tab Möglichkeit bei der Eingabe", was meinst du damit? Um bei eienm Stringgrid in die nächste Zelle zu kommen, geht das mit den Pfeiltasten.

@AlexII: Also das Schließen-Icon war bei allen Anwendungen, die ich bisher gesehen habe immer ganz links. Eine Editier-Schaltfläche. Hm, ist das wirklich nötig? Ich könnte die Schaltfläche "OK" im Detaildialog in "Speichern" umbennen.
Zitat:

Zitat von AlexII
Und XMLInfo ist nicht vollständig wenn noch keine Kontakte abgelegt sind.

Wie meinen? Was fehlt?

AlexII 20. Feb 2009 13:52

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Luckie
Also das Schließen-Icon war bei allen Anwendungen, die ich bisher gesehen habe immer ganz links.

Und ich immer rechts... hm.. na ja wie du meinst, war ja nur ein Vorschlag.

Zitat:

Eine Editier-Schaltfläche. Hm, ist das wirklich nötig?
Ich denke schon!

Zitat:

Ich könnte die Schaltfläche "OK" im Detaildialog in "Speichern" umbennen.
Ja gute Idee.


Zitat:

Zitat von AlexII
Und XMLInfo ist nicht vollständig wenn noch keine Kontakte abgelegt sind.
Wie meinen? Was fehlt?

Wenn die XML.Datei noch nicht abgelegt ist, ist XMLInfo, wie gesagt, nicht vollständig. Version-, Benutzer- und Computerinfos fehlen.

Luckie 20. Feb 2009 14:11

Re: Kleine Adress-Datenbank
 
Gespeichert wird immer erst, wenn das Programm geschlossen wird. Dann sollten eiegntlich die Informationen vollständig sein.

AlexII 20. Feb 2009 14:13

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Luckie
Gespeichert wird immer erst, wenn das Programm geschlossen wird. Dann sollten eiegntlich die Informationen vollständig sein.

Ja... aber professional ist es nicht.

Larsi 20. Feb 2009 14:14

Re: Kleine Adress-Datenbank
 
Wie was verlang ich da von dir? Ist doch total einfach:

http://swissdelphicenter.ch/de/showcode.php?id=897

Sir Rufo 20. Feb 2009 14:15

Re: Kleine Adress-Datenbank
 
Hallo Luckie,

1. Beim Filter die ComboBox als csDropDown umstellen (da soll man ja eh nur von den vorhandenen auswählen, und man braucht nicht das kleine Pfeilchen treffen)
2. Bei Eingabe einer Telefonnummer +49 (3333) 123434 wird in der Liste 49(3333)123434 angezeigt, das ist doof ...
3. Bei der Erstellung eines neuen Kontakts ist der Focus auf dem Schließen-Button, der wäre besser auf der Value-Liste
4. Im Erstellungs-Form wäre es nett die ESC-Taste zum Schließen benutzen zu können
5. Sind Daten im Erstellungsform erfasst/geändert worden, so sollte beim Schließen eine Abfrage kommen (Wirklich Schließen?)

Soweit meine Verbesserungsvorschläge.

cu

Oliver

Luckie 20. Feb 2009 14:59

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Sir Rufo
1. Beim Filter die ComboBox als csDropDown umstellen (da soll man ja eh nur von den vorhandenen auswählen, und man braucht nicht das kleine Pfeilchen treffen)

Geändert.

Zitat:

2. Bei Eingabe einer Telefonnummer +49 (3333) 123434 wird in der Liste 49(3333)123434 angezeigt, das ist doof ...
Ich wollte eine einheitliche Darstelliung, deswegen wird alles ausser den Klammern rausgelöscht bei der Anzeige und beim Abspeichern. Ist da snicht so gut?

Zitat:

3. Bei der Erstellung eines neuen Kontakts ist der Focus auf dem Schließen-Button, der wäre besser auf der Value-Liste
Geändert.

Zitat:

4. Im Erstellungs-Form wäre es nett die ESC-Taste zum Schließen benutzen zu können
Was ist die "Erstellungs"-Form? Die hauptform mit der ListBox?

Zitat:

5. Sind Daten im Erstellungsform erfasst/geändert worden, so sollte beim Schließen eine Abfrage kommen (Wirklich Schließen?)
Also wenn man Daten ändert und dann statt auf "OK" (jetzt "Speichern") klickt, dass dann noch eine Sicherheitsabfrage kommt? Gute Idee.

Die Änderungen sind noch nicht hochgeladen. Ich will erstmal etwas sammeln.

mquadrat 20. Feb 2009 15:00

Re: Kleine Adress-Datenbank
 
Wenn du das + in der Telefonnummer nicht mal speicherst, woher weißt du dann das da eins hin muss? :gruebel:

Sir Rufo 20. Feb 2009 15:03

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von mquadrat
Wenn du das + in der Telefonnummer nicht mal speicherst, woher weißt du dann das da eins hin muss? :gruebel:

Die Telefonnummern wird nicht geändert, sondern nur entsprechend formatiert angezeigt ;)

@Luckie: Da wo ich eine Adresse bearbeiten kann, da sollte man mit ESC dieses Form wieder verlassen können (alternativ zu Klick auf Schließen)

cu

Oliver

mquadrat 20. Feb 2009 15:05

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Sir Rufo
Die Telefonnummern wird nicht geändert, sondern nur entsprechend formatiert angezeigt ;)

Sicher?!

Zitat:

Ich wollte eine einheitliche Darstelliung, deswegen wird alles ausser den Klammern rausgelöscht bei der Anzeige und beim Abspeichern. Ist da snicht so gut?
Okok, ich geb's zu, ich hab das Programm noch gar nicht ausprobiert :oops:

Sir Rufo 20. Feb 2009 15:08

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Luckie
Zitat:

2. Bei Eingabe einer Telefonnummer +49 (3333) 123434 wird in der Liste 49(3333)123434 angezeigt, das ist doof ...
Ich wollte eine einheitliche Darstelliung, deswegen wird alles ausser den Klammern rausgelöscht bei der Anzeige und beim Abspeichern. Ist da snicht so gut?

Besser wäre doch alles ausser +-()0123456789 rauszuwerfen und dann vor und nach den Klammern ein Leerzeichen einzufügen " (" und ") ".
Gerade für Durchwahlen wird ja das "-"-Zeichen benutzt, was ja auch die Lesbarkeit erhöht.

Die internationale Schreibweise für eine Telefonnummer ist ja "+<Ländercode> (<Ortsvorwahl>) <Hauptnummer>[-<Durchwahl>]"

cu

Oliver

Luckie 20. Feb 2009 15:24

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Sir Rufo
Besser wäre doch alles ausser +-()0123456789 rauszuwerfen und dann vor und nach den Klammern ein Leerzeichen einzufügen " (" und ") ".

OK, + und - wurden noch aufgenommen. Das mit dem Leerzeichen nach der Klammer ist nicht ganz so schenll zu lösen.

Sir Rufo 20. Feb 2009 15:29

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Sir Rufo
Besser wäre doch alles ausser +-()0123456789 rauszuwerfen und dann vor und nach den Klammern ein Leerzeichen einzufügen " (" und ") ".

OK, + und - wurden noch aufgenommen. Das mit dem Leerzeichen nach der Klammer ist nicht ganz so schenll zu lösen.

Nach deiner Formatierung nur noch ...
Delphi-Quellcode:
TelefonNr := StringReplace( TelefonNr, '(', ' (', [ rfReplaceAll ] );
TelefonNr := StringReplace( TelefonNr, ')', ') ', [ rfReplaceAll ] );

Luckie 20. Feb 2009 15:30

Re: Kleine Adress-Datenbank
 
Ja gut, auf die einfachsten Sachen kommt man nicht. :roll:

Pfoto 20. Feb 2009 15:47

Re: Kleine Adress-Datenbank
 
Hallo Luckie,

ich finde die Eingabe der Daten nicht wirklich flüssig,
als 10-Finger-Schreiber muss ich immer absetzen und die
Pfeiltaste nach unten drücken, um zum nächsten Feld
zu gelangen.
Wenn z.B. nach einem Return der Cursor ins nächste
Eingabefeld der Tabelle springen würde, fände ich das besser.


Was noch ein tolles Feature wäre:
Der User kann sich einmalig eine eigene Struktur der gewünschten
Felder definieren. So könnte man das Teil wirklich ganz individuell
an sein Bedürfnisse anpassen.

Edit: Ich sehe gerade den Code -- die Struktur steckt ja quasi
fest in einer Klasse. Da wird eine automatische Anpassung wohl
so ziemlich unmöglich werden.

Gruß
Jürgen

Luckie 20. Feb 2009 15:54

Re: Kleine Adress-Datenbank
 
Neue Version hochgeladen mit den Änderungswünschen und Verbesserungsvorschlägen.

@Pfoto: Bei einem Stringgrid ist es Standard, dass man mit den Pfeiltasten in die nächste Zelle gelangt. Und da smit der eigenen Struktur: Das sollte eigentlich nur eine kleine Adressdatenbank für mich sein. ;)

Sir Rufo 20. Feb 2009 15:57

Re: Kleine Adress-Datenbank
 
Der Speicher-Button kommt nicht mehr ... und bei "Wollen Sie die Änderungen speichern?" -> Ja wird trotzdem nicht gespeichert

Delphi-Quellcode:
procedure TDetails.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ret: DWORD;
begin
  if Modified then
  begin
    ret := MessageBox(Self.Handle, PChar(rsModifiedQuery), PChar(rsModifiedCaption), MB_ICONQUESTION or MB_YESNOCANCEL);
    case ret of
      ID_YES: Close;
      ID_NO:
      begin
        Modified := False;
        Close;
      end;
      ID_CANCEL: ; // nichts machen
    end;
  end;
end;
Ist irgendwie auch sinnentleert oder ... da passiert ja nix ... ;)

ok, ausser bei ID_YES und ID_NO ein DoppelClose (es soll ja eh schon geschlossen werden)
bei ID_CANCEL wird nichts gemacht -> das Form wird geschlossen ;)

Delphi-Quellcode:
type
  TDetails = class(TForm)
    Bevel1: TBevel;
    btnCancel: TButton; // aber wo ist denn btnSave?
    sgDetails: TStringGrid;
    StatusBar1: TStatusBar;
    memBem: TMemo;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure memBemChange(Sender: TObject);
    procedure sgDetailsSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string);
    procedure FormCreate(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    IsNewContact: Boolean;
    Modified: Boolean; // nicht besser als Property? dann könnte man darüber btnSave.Enabled steuern (gut, den gibts ja nicht mehr)
  end;

Luckie 20. Feb 2009 16:03

Re: Kleine Adress-Datenbank
 
Ä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.

Sir Rufo 20. Feb 2009 16:14

Re: Kleine Adress-Datenbank
 
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

Sir Rufo 20. Feb 2009 16:17

Re: Kleine Adress-Datenbank
 
Zitat:

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 ... :gruebel:

aber der source ist verschwunden ... wieso :mrgreen:

Luckie 20. Feb 2009 16:23

Re: Kleine Adress-Datenbank
 
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.

Sir Rufo 20. Feb 2009 19:33

Re: Kleine Adress-Datenbank
 
Zitat:

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

Luckie 20. Feb 2009 20:26

Re: Kleine Adress-Datenbank
 
Zitat:

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?

Sir Rufo 20. Feb 2009 20:29

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Luckie
Zitat:

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

Luckie 20. Feb 2009 21:00

Re: Kleine Adress-Datenbank
 
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?

Luckie 20. Feb 2009 21:13

Re: Kleine Adress-Datenbank
 
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.

Sir Rufo 20. Feb 2009 21:37

Re: Kleine Adress-Datenbank
 
Ja, jetzt tut es :thumb: (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 :)

Luckie 20. Feb 2009 22:43

Re: Kleine Adress-Datenbank
 
Zitat:

Zitat von Sir Rufo
Ja, jetzt tut es :thumb: (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.

Sir Rufo 21. Feb 2009 12:11

Re: Kleine Adress-Datenbank
 
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

Luckie 21. Feb 2009 12:13

Re: Kleine Adress-Datenbank
 
Also ich finde da meine Lösung aber etwas übersichtlicher.

Sir Rufo 21. Feb 2009 12:21

Re: Kleine Adress-Datenbank
 
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;

RWarnecke 21. Feb 2009 13:14

Re: Kleine Adress-Datenbank
 
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.

Luckie 21. Feb 2009 13:20

Re: Kleine Adress-Datenbank
 
Zitat:

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?

RWarnecke 21. Feb 2009 13:38

Re: Kleine Adress-Datenbank
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

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:

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:

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:

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:

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.

Luckie 21. Feb 2009 13:43

Re: Kleine Adress-Datenbank
 
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.

Andreas L. 21. Feb 2009 19:34

Re: Kleine Adress-Datenbank
 
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.

Delphi-Quellcode:
ImgList.Draw(Canvas, Rect.left + 4, Rect.Top + 4, 0, dsTransparent, itImage);

Luckie 21. Feb 2009 19:56

Re: Kleine Adress-Datenbank
 
Mein Delphi 2006 kennt die Bezeichner dsTransparent und itImage nicht, obwohl die Unit Controls eingebunden ist. Und mit
Delphi-Quellcode:
Main.frmAdressen.ImageList1.Draw(Canvas, ARect.left + 4, ARect.Top + 4, 6);
sehe ich keinen großen Unterschied.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 1 von 2  1 2      

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