![]() |
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. |
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:
das macht die Sache doch irgendwie runder ...
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; cu Oliver |
Re: Kleine Adress-Datenbank
Zitat:
aber der source ist verschwunden ... wieso :mrgreen: |
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.
|
Re: Kleine Adress-Datenbank
Zitat:
Delphi-Quellcode:
... aber bearbeiten geht ...
procedure TfrmAdressen.NewContact;
... Details.ShowModal; if Details.ModalResult = mrOk then // Du hast kein ModalResult mehr!!!
Delphi-Quellcode:
Wundert mich eh, dass du für die Übernahme der Daten aus dem Formular
procedure TfrmAdressen.ShowContactDetails;
... Details.ShowModal; //if Details.ModalResult = mrOK then if Details.Modified then // aha ... hier geändert 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 |
Re: Kleine Adress-Datenbank
Zitat:
Zitat:
|
Re: Kleine Adress-Datenbank
Zitat:
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 |
Re: Kleine Adress-Datenbank
Also ich habe es jetzt so:
Delphi-Quellcode:
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?
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; |
Re: Kleine Adress-Datenbank
Hat sich erledigt, war Blödsinn.
Anzeigen sieht jetzt so aus:
Delphi-Quellcode:
Undneu sieht so aus:
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;
Delphi-Quellcode:
Hast du dir das so gedacht?
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; Aktuelle Version (1.0.0.27 im ersten Posting. PS: Jetzt sollte es aber klappen. Hmpf. |
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 :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 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