2016-07-27 11 views
-2

Ich möchte im Programm (VCL) auf den Signalwechsel einer Booleschen Variable reagieren (z. B. die verschiedenen Funktionen aufrufen - Messung starten/stoppen). Wie kann ich es realisieren? Gibt es einen anderen Weg ohne Timer?Reagiere im Programm auf den Signalwechsel

Ich benutze Delphi 7 und ich arbeite mit Delphi für nur kurze Zeit.

+2

Wenn Ihre * variabel * a * Eigenschaft sein kann *, dann können Sie ein Ereignis aus der Eigenschaft Setter ausgelöst, wenn der Wert zu setzen ist anders als der aktuelle Wert der Eigenschaft –

+0

@Sir Rufo Ich habe die Variable als Eigenschaft: 'Prozedur SetCanStart (const Wert: boolean); Funktion GetCanStart: boolean; Eigenschaft CanStart: boolescher Wert GetCanStart write SetCanStart; ' – genakust

+0

Sie können Ereignisse nicht auslösen, wenn sich Variablen ändern. Sie müssen die Variable irgendwie einkapseln. Eigentum ist eine Möglichkeit. Eine andere Prozedur. –

Antwort

3

Sie müssen eine Setter-Methode für die Eigenschaft verwenden und innerhalb dieser Setter überprüfen, ob der neue Wert vom aktuellen Wert abweicht.

Wenn ja, dann wird der Wert eingestellt und Feuer ein Ereignis (hier die OnCanStartChanged)

uses 
    Classes; 

type 
    TFoo = class 
    private 
    FCanStart   : Boolean; 
    FOnCanStartChanged: TNotifyEvent; 
    procedure SetCanStart(const Value: Boolean); 
    procedure SetOnCanStartChanged(const Value: TNotifyEvent); 
    protected 
    procedure DoCanStartChanged(); virtual; 
    public 
    property CanStart   : Boolean read FCanStart write SetCanStart; 
    property OnCanStartChanged: TNotifyEvent read FOnCanStartChanged write SetOnCanStartChanged; 
    end; 

    { TFoo } 

procedure TFoo.DoCanStartChanged; 
begin 
    if Assigned(FOnCanStartChanged) 
    then 
    FOnCanStartChanged(Self); 
end; 

procedure TFoo.SetCanStart(const Value: Boolean); 
begin 
    if FCanStart <> Value 
    then 
    begin 
     FCanStart := Value; 
     DoCanStartChanged(); 
    end; 
end; 

procedure TFoo.SetOnCanStartChanged(const Value: TNotifyEvent); 
begin 
    FOnCanStartChanged := Value; 
end; 
+0

Vielen Dank für dieses Beispiel. Ich versuche zu verstehen, wie es funktioniert. – genakust

+0

Die Methode, die Sie an die OnCanStartChanged-Eigenschaft übergeben haben, wird aufgerufen, wenn Sie der CanStart-Eigenschaft einen anderen Wert als den aktuellen Wert zuweisen. Das ist alles –

+0

Danke. Es klappt. – genakust

Verwandte Themen