2016-07-27 4 views
-2

ブール変数の信号変更(プログラムの起動/停止など、さまざまな機能を呼び出す)について、プログラム(VCL)で対応したいと考えています。どうすればそれを実現できますか?タイマーなしで別の方法がありますか?信号変更に関するプログラムに反応する

私はDelphi 7を使用していますが、私はDelphiを短時間使用します。

+2

あなた*変数*は*の特性であることができる場合*、あなたは価値場合はプロパティのセッターからのイベントを発生することができます設定する値はプロパティの現在の値と異なっています –

+0

@Sir Rufoプロパティとしてvaribleを持っています: 'procedure SetCanStart(const Value:boolean); 関数GetCanStart:ブール値。 プロパティCanStart:boolean読み取りGetCanStart write SetCanStart; ' – genakust

+0

変数が変更されたときにイベントを発生させることはできません。何らかの形で変数をカプセル化する必要があります。プロパティは片道です。もう一つ手続き。 –

答えて

3

プロパティにセッターメソッドを使用し、新しい値が現在の値と異なる場合は、そのセッターをチェックする必要があります。

もしそうなら、(ここでは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

ありがとうございました。私はそれがどのように機能するのか理解しようとしています。 – genakust

+0

現在の値と異なる値をCanStartプロパティに代入すると、OnCanStartChangedプロパティに渡したメソッドが呼び出されます。それはすべて –

+0

ありがとうございます。できます。 – genakust

関連する問題