Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在程序中对信号变化作出反应_Delphi_Events_Event Handling_Delphi 7 - Fatal编程技术网

Delphi 在程序中对信号变化作出反应

Delphi 在程序中对信号变化作出反应,delphi,events,event-handling,delphi-7,Delphi,Events,Event Handling,Delphi 7,我想在程序(VCL)中对a的信号变化作出反应 布尔变量(调用不同的函数,例如-启动/停止测量)。我怎样才能实现它?有没有其他没有计时器的方法 我使用Delphi7,并且我使用Delphi的时间很短 必须为属性使用setter方法,并检查setter内部的新值是否与当前值不同 如果是,则设置该值并触发事件(此处为OnCanStartChanged) 使用 班级; 类型 TFoo=类 私有的 FCanStart:布尔型; FOnCanStartChanged:TNotifyEvent; 过程SetC

我想在程序(VCL)中对a的信号变化作出反应 布尔变量(调用不同的函数,例如-启动/停止测量)。我怎样才能实现它?有没有其他没有计时器的方法


我使用Delphi7,并且我使用Delphi的时间很短

必须为属性使用setter方法,并检查setter内部的新值是否与当前值不同

如果是,则设置该值并触发事件(此处为
OnCanStartChanged

使用
班级;
类型
TFoo=类
私有的
FCanStart:布尔型;
FOnCanStartChanged:TNotifyEvent;
过程SetCanStart(常量值:布尔值);
过程SetOnCanStartChanged(常量值:TNotifyEvent);
受保护的
程序DoCanStartChanged();事实上的
公众的
属性CanStart:布尔读取FCanStart写入SetCanStart;
属性OnCanStartChanged:TNotifyEvent read FOnCanStartChanged write SetOnCanStartChanged;
结束;
{TFoo}
程序TFoo.docanstart已更改;
开始
如果已分配(FOnCanStartChanged)
然后
FOnCanStartChanged(自我);
结束;
过程TFoo.SetCanStart(常量值:布尔值);
开始
如果FCanStart值
然后
开始
FCanStart:=值;
DoCanStartChanged();
结束;
结束;
过程TFoo.setOnTranstartChanged(常量值:TNotifyEvent);
开始
FOnCanStartChanged:=值;
结束;

如果变量可以是属性,那么如果要设置的值与属性的当前值不同,则可以从属性设置器触发事件property@SirRufo I将变量作为属性:
procedure SetCanStart(const-Value:boolean);函数GetCanStart:boolean;属性CanStart:boolean read GetCanStart write SetCanStart变量更改时不能触发事件。您需要以某种方式封装变量。财产是一种方式。大卫·赫弗南:你能解释一下吗?我是如何写的,我只是在很短的时间内使用Delphi。@genakust变量和属性是不同的。您的问题提到了变量,但在注释中您声明它是一个属性。我的答案显示了一个解决方案,其中属性封装了一个字段(这是类定义中变量的名称),非常感谢这个示例。我试图理解它是如何工作的。如果您指定的值与current to CanStart属性的值不同,它将调用您传递给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;