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