eine Art onchange für Variabeln?
Meine Frage ist recht simpel, gibt es eine Möglichkeit direkt auf eine Veränderung einer Variabel zu reagieren.
Natürlich kann ich auch eine Schleife machen die das fortwährend abfragt, das macht die ganze Sache aber ein wenig langsam. greetz buster |
Re: eine Art onchnage für Variabeln?
Such mal nach dem Stichwort Property.
Dies ist ziemlich elegant gelöst mit Getter und Setter-Methoden. Hier noch ein kleines Beispiel:
Delphi-Quellcode:
property Foo: Boolean read getFFoo write setFFoo;
|
Re: eine Art onchnage für Variabeln?
Du könntest statt einer Variablen eine Property einer Klasse verwenden. Da könntest Du dann eine Setter-Methode implementieren.
|
Re: eine Art onchange für Variabeln?
mmh danke erstmal da kommen wir der sache schon näher :D
Ich geh mal davon aus, dass getFFoo ne Funktion ist und setFFoo ne procedure (oder?) Ich habe eigetnlich nur vor ne simple Integer Variable u 'überwachen' und wenn sie unter 0 ist untsprechen darauf zu reagieren (0 setzen). Könntest du mir bitte ein konkreteres Bsp. liefern,habe nämlich noch nicht viel mit properties zu tun gehabt, wäre sehr nett :angel2: |
Re: eine Art onchange für Variabeln?
Zitat:
|
Re: eine Art onchange für Variabeln?
Zitat:
|
Re: eine Art onchange für Variabeln?
Zitat:
die Frage ist ja auch, wer oder was verändert die Variable ? |
Re: eine Art onchange für Variabeln?
Zitat:
|
Re: eine Art onchange für Variabeln?
Zitat:
Wenn dennnoch "benachrichtigt" werden willst, kannst du so eine Eigenschaft ganz einfach ins Form implementieren.
Delphi-Quellcode:
type
TForm1= class(TForm) private FMeineIntegerVar: Integer; protected procedure SetmeineIntegerVar(Value: integer); published property MeineIntegerBar: integer read FMeineIntegerVar write SetMeineIntegerVar; ... ... procedure TForm1.SetmeineIntegerVar(Value: Integer); begin if Value <= 0 then ShowMessage('Größeren Wert als 0 eingeben!') else FMeineIntegerBar := Value; end; |
Re: eine Art onchange für Variabeln?
Ich hätte da mal was:
Delphi-Quellcode:
Das OnChange-Event kann man bei Bedarf ja noch hinzufügen ;)
TOnChangeNotifier = class
private FValue: Integer; protected procedure SetValue(x: Integer); public property Value read FValue write SetValue; end; implementation procedure TOnChangeNotifier.SetValue(x: Integer); begin if x >= 0 then FValue := x; else raise ERangeError.Create(); { // Alternativ: if x >= 0 then FValue := x; else FValue := 0; } end; |
Re: eine Art onchange für Variabeln?
dies macht eie dritte Quelle, auf die man keinen Einfluss hat, um genau zu sein die Anzahl der austehenden Druchaufträge, aber das tut denke ich nichts zur Sache solange sie korrekt ausgelesen werden.
|
Re: eine Art onchange für Variabeln?
Zitat:
Delphi-Quellcode:
MeineVar := GetDruckaufträge;
if MeineVar = 0 then .... |
Re: eine Art onchange für Variabeln?
richtig aber ich will sie ja nicht nur überprüfen wenn sie ausgelesen wird sondern fortwährend
|
Re: eine Art onchange für Variabeln?
Zitat:
|
Re: eine Art onchange für Variabeln?
Dann setz doch die geposteten Beispiele einfach um, Unsinn oder nicht.
|
Re: eine Art onchange für Variabeln?
Zitat:
Wenn du sie andauernd prüfen möchtest musst du sie doch auch andauernd neu übernehmen? in dem Moment wo du die Variable übernimmst kannst du sie prüfen. |
Re: eine Art onchange für Variabeln?
Wenn man das aber an 100 Stellen im Code macht, ist eine Property IMHO die bessere Wahl, da man an zentraler Stelle reagieren kann ;)
|
Re: eine Art onchange für Variabeln?
Zitat:
Gib mal ein Beispiel, wo du meinst nicht mitzubekommen, wann sich der Wert der Varaiblen ändert. |
Re: eine Art onchange für Variabeln?
Zitat:
'Fremd' ist alles, was z.B. ohne Sourcecode vorliegt (oder in Sourcen steht die man nicht ändern darf). |
Re: eine Art onchange für Variabeln?
Zitat:
wenn Du benachrichtig werden willst, kannst Du mal gucken, ob das Windows nicht vielleicht schon selber macht und es eine API Funktion dafür gibt. (da es ja wohl um Druckaufträge ging? ) Ansonsten müsstest du Dir eine Klasse schreiben, die eben wirklich ständig prüft und ein Event generiert, wenn sich die Zahl ändert. in eine Liste könntest alle Events eintragen, wenn sich mehrere Objecte benachrichtigen lassen wollen. Event Multicaster müsstest Du da basteln .. .NET kann das schon von Haus aus. In Delphi selber basteln. Oder such mal nach Observer Pattern .. wobei das in der Grundidee quatsch ist, weil Multicast Events völlig ausreichend sind und man da nicht von einer speziellen Klasse abgeleitet sein muss .. kommt halt drauf an, wie groß das Projekt ist, bei einem 5 Minutenprojekt reicht sichherlich ein Timer, der ab und zu mal prüft :) |
Re: eine Art onchange für Variabeln?
Zitat:
|
Re: eine Art onchange für Variabeln?
Für gewöhnlich kann man sich bei API Klamotten entweder eine Callback-Prozedur registrieren, oder aber es gibt Messages.
Was es nicht gibt ist, dass ein drittes Programm eine DEINER selbst deklarierten Variablen in DEINEM Adressraum ohne DEIN Zutun ändert. Es sei denn dieses Programm zielt eben darauf ab, aber dann würd' ich es mir so schnell es geht vom Leibe schaffen. Die WinAPI tut sowas jedenfalls nicht. Aber bevor wir hier weiter rumraten erzähl uns doch bitte endlich womit du da arbeitest. Das hätte schon in den 1. Beitrag gehört, und du hättest vermutlich schon längst eine passende Antwort gehabt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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