delphi当改变一个变量的值时,如何动态调用一个过程(Procedure)(100分)

  • 主题发起人 主题发起人 xuyingfeng
  • 开始时间 开始时间
X

xuyingfeng

Unregistered / Unconfirmed
GUEST, unregistred user!
就好像Oracle中得出发器那样
 
用timer试试,如果值变了就调用过程
 
用属性不就行了吗?
 
声明一个类,把这个变量作为类的一个属性
TMyType=class
private
TheVar:Type;
SetTheVar(AVar:Type)
public
property AVar:read TheVar write SetTheVar;
end;

TMyType.SetTheVar(AVar:Type);
begin
if AVar<>TheVar then
begin
TheVar:AVar;
TheProcedure()
end;
end;
 
方法不少,介绍三种:
1使用TActionList控件
缺点:变量值的改变只能必须在TActionList可以监控的控件里
不能适合结构化一段连续时间内改变值的情况
(因为这个控件使用机器空闲时间监控)
优点:程序可读性好,规范。

2使用ApplicationEvents控件(用onidel时间)
缺点: 不能适合结构化一段连续时间内改变值的情况
(因为这个控件使用机器空闲时间监控)
优点:程序可读性好,规范。但自己要控制的比1要多
 
(接上)
3自定义消息,在变量变化同时激发消息
缺点:程序编码工作大,若变量多处变化,则可能要注意一致性编码
优点:克服了1,2的缺点
 
softdog君和Kang君的方法很不错,你如果不是一个控件中某个属性要改变值建议用这种方法
 
jasper你的方法可不可以举个例子,因为我从来没有用过你所说的者三个方法。
 
type TTeam_id=class
private
F_Team_Id:String;
Procedure wF_Team_id();
public
property Team_id:string read F_Team_Id write wF_Team_Id;
end;
这是我定义的类,为什么总是说:incompatible types
 
你的类没有构造函数和析构函数?
最好是从TObject类继承吧.
 
type TTeam_id=class
private
F_Team_Id:String;
Procedure wF_Team_id(const Str:String)
//写过程总要有参数吧
public
property Team_id:string read F_Team_Id write wF_Team_Id;
end;
procedure TTeam_id.wF_Team_id(const Str: String);
begin
F_Team_Id:=Str;
end;

>最好是从TObject类继承
Delphi中哪一个类不是从它继承的??这就是Object Pascal和C++的重要区别之一。
 
多人接受答案了。
 
后退
顶部