Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Änderung einer Eigenschaft registrieren (https://www.delphipraxis.net/48377-aenderung-einer-eigenschaft-registrieren.html)

meierotto 24. Jun 2005 09:16


Änderung einer Eigenschaft registrieren
 
Hallo :hi: ,

ich habe ein wahrscheinlich eher simples Problem, Denkfehler oder so. Ich möchte gern ein Dirty-Flag setzen, wenn in meiner Klasse an einer Eigenschaft etwas geändert wurde. Es handelt sich dabei um ein Array von Records. Ich werd am besten mal Teile des Codes anzeigen:

Delphi-Quellcode:
TTskKommentare = class(TObject)
  private
    _savestat:smallint; //Besagt, ob und wie gespeichert werden muss
    PKommentare:TKommentarListe; //Array von TKommentar-Records
    procedure PKommentarChange(KL:TKommentarListe);
  public
    ...
    property Kommentare:TKommentarListe read PKommentare write PKommentarChange;
  end;
Delphi-Quellcode:
procedure TTskKommentare.PKommentarChange(KL: TKommentarListe);
begin
  if _savestat<2 then _savestat:=2; //muss komplett gespeichert werden
  PKommentare:=KL;
end;
Wird nun Ein Kommentar geändert, soll Savestat auf 2 gesetzt werden.
Könnt ihr mir vielleicht auf die Sprünge helfen? :freak:

marabu 24. Jun 2005 09:43

Re: Änderung einer Eigenschaft registrieren
 
Die VCL macht es dir vor - mach aus deinen Kommentaren eine array property, dann hast du zwangsläufig einen read / write accessor. Dann implementiere noch ein Ereignis OnChange für deine Kommentare. In der Methode SetKommentar(index, kommentar) prüfst du dann ab:

Delphi-Quellcode:
procedure TKommentare.SetKommentar(index: integer; kommentar: string);
begin
  if FKommentare[index] <> kommentar then begin
    FKommentare[index] := kommentar;
    if Assigned(FOnChange) then
      OnChange();
  end;
end;
Grüße vom marabu

meierotto 24. Jun 2005 09:50

Re: Änderung einer Eigenschaft registrieren
 
Danke Marabu,

leider bin ich heut etwas begriffstutzig :roll: . Kannst du das mit der Array-Property und dem Ereignis nochmal etwas genauer erläutern? :oops:

marabu 24. Jun 2005 10:15

Re: Änderung einer Eigenschaft registrieren
 
Vielleicht hilft dir etwas Code?

Delphi-Quellcode:
type
  TKommentare = class
  private
    FList: TStringList;
    FOnChange: TNotifyEvent;
    function GetKommentar(index: integer): string;
    procedure SetKommentar(index: integer; kommentar: string);
  public
    constructor Create;
    destructor Destroy; override;
    property Kommentar[index: integer]: string read GetKommentar write SetKommentar;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

constructor TKommentare.Create;
begin
  inherited Create;
  FList := TStringList.Create;
end;

destructor TKommentare.Destroy;
begin
  FList.Free;
  inherited;
end;

function TKommentare.GetKommentar(index: integer): string;
begin
  if index < FList.Count
    then Result := FList[index]
    else raise Exception.CreateFmt('index [%d] out of bounds', [index]);
end;

procedure TKommentare.SetKommentar(index: integer; kommentar: string);
begin
  if index < FList.Count then begin
    FList[index] := kommentar;
    if Assigned(FOnChange) then
      FOnChange(self);
  end else
    raise Exception.CreateFmt('index [%d] out of bounds', [index]);
end;
marabu

meierotto 24. Jun 2005 10:41

Re: Änderung einer Eigenschaft registrieren
 
Es ist Freitag, ich bin irgendwie nicht so gut drauf.
Vielen Dank für deine Hilfe. Hab auch hier schon was gefunden: Hier im Forum suchenArray als Published Property

Ein schönes Wochenende (und mir gute Erholung :pale: )

marabu 24. Jun 2005 11:17

Re: Änderung einer Eigenschaft registrieren
 
Zitat:

Zitat von meierotto
Ein schönes Wochenende (und mir gute Erholung)

Diesem Wunsch schließe ich mich aus vollem Herzen an - werde am Wochende auch erstmal versuchen meine Sommergrippe auszukurieren.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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