![]() |
Ä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:
Wird nun Ein Kommentar geändert, soll Savestat auf 2 gesetzt werden.
procedure TTskKommentare.PKommentarChange(KL: TKommentarListe);
begin if _savestat<2 then _savestat:=2; //muss komplett gespeichert werden PKommentare:=KL; end; Könnt ihr mir vielleicht auf die Sprünge helfen? :freak: |
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:
Grüße vom marabu
procedure TKommentare.SetKommentar(index: integer; kommentar: string);
begin if FKommentare[index] <> kommentar then begin FKommentare[index] := kommentar; if Assigned(FOnChange) then OnChange(); end; end; |
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: |
Re: Änderung einer Eigenschaft registrieren
Vielleicht hilft dir etwas Code?
Delphi-Quellcode:
marabu
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; |
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: ![]() Ein schönes Wochenende (und mir gute Erholung :pale: ) |
Re: Änderung einer Eigenschaft registrieren
Zitat:
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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-2025 by Thomas Breitkreuz