![]() |
Wertänderungen einer Variable zählen?
Gibt es in Delphi eine INTERNE DIREKTE Methode, mit der man herausfinden kann, wie oft der Wert einer Variable ab einem bestimmten Punkt GEÄNDERT (nicht zugewiesen!) wurde?
(Manuelle oder indirekte Methode: Natürlich kann man jedesmal an der Stelle, an der der Wert verändert wird, eine Abfrage mit OldValue und NewValue machen und so die Veränderungen zählen, was aber umständlich ist). |
Re: Wertänderungen einer Variable zählen?
Kann ich mir nur so vorstellen, dass du dir eine Klasse schaffst, dort die Variable als Property mit einer Set-Funktion hinterlegst und dann eine globale Variable mit einer Instanz dieser Klasse benutzt. In der Set-Funktion kannst du dann zählen, wie oft ein Wert zugewiesen wird bzw. wie oft der Wert geändert wird.
(ungetestet)
Delphi-Quellcode:
unit CountChangesUnit;
interface type TCountChanges = class(TObject) private FVariable: integer; FAssigned: int64; FChanged: int64; procedure SetVariable(Value: integer); public property Variable: integer read FVariable write SetVariable; property Assigned: int64 read FAssigned; property Changed: int64 read FChanged; end; var Counted: TCountChanges; implementation procedure TCountChanges.SetVariable(Value: integer); begin inc(FAssigned); if FVariable <> Value then inc(FChanged); FVariable := Value; end; initialization Counted := TCountChanges.Create; finalization FreeAndNil(Counted); end. |
Re: Wertänderungen einer Variable zählen?
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank für den sehr schönen Code! Ich habe es getestet und es funktioniert (Projektdateien im Anhang).
|
Re: Wertänderungen einer Variable zählen?
Ich habe mir die Frage jetzt ein paar Mal durchgelesen... wofür zum Geier wird die globale Variable benötigt? :gruebel:
Einfach die olle Variableaus der Unit entfernen, genau wie den init/final Teil. Wenn es so änderst, kannst du einfach A benutzen als sei es eine Variable. Mit dem Extracode hätest du es ja gleich selbst zählen können....
Delphi-Quellcode:
private
fCounted : TCountChanges; function getA : Integer; procedure setA(const Value : Integer); public property A : Integer read getA write setA; destructor Destroy; override; procedure AfterConstruction; override; end; .... procedure TForm1.AfterConstruction; begin inherited; fCounted := TCountChanges.Create(); end; destructor TForm1.Destroy; begin fCounted.Free(); inherited; end; function TForm1.getA : Integer; begin Result := fCounted.Variable; end; procedure TForm1.setA(const Value : Integer); begin fCounted.Variable := Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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