Delphi-PRAXiS
Seite 3 von 5     123 45      

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 15: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 15: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 15: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 15: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 18: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 19: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 19: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 20: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 20: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 20: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 :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Seite 3 von 5     123 45      

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