这个问题怎么办?(100分)

  • 主题发起人 主题发起人 zhj_nc
  • 开始时间 开始时间
Z

zhj_nc

Unregistered / Unconfirmed
GUEST, unregistred user!
一个对象的一个属性改变时,可以自己写一个触发事件。我记得和TNotifyEvent有关。
举个例子:我在窗体上定义了一个aa:integer;当aa的值改变时触发一个事件。就象TEdit
的Text变化时,触发事件Onchange;
我原来看VCL时看到,还用过,超爽,我现在忘了,写的程序也丢了。
 
private
Faa: Integer;

FOnChange: TNotifyEvent;

procedure Setaa(AValue: Integer);
published
property aa: Integer read Faa write Setaa;
property OnChange: TNotifyEvnet read FOnChange write FOnChange;

...

procedure Setaa(AValue.Integer)
begin
if Faa=AValue then
Exit;

Faa:=AValue;
if Assigned(FOnChange) then
FOnChange(Self);
end;
 
我一般这么写:
type
TForm1 = class(TForm)
..
public
procedure setaa(value)
property
aa:integer read faa write setaa
end;
 
谢谢pihome、jianl的支持
我当时根据AdoQuery的ReadOnly属性变化触发一个事件,用来决定按钮是否使能。
可能不是你们所说。
 
我当时并没有用到写方法。
 
方法一:
直接修改VCL给它增加一个事件
方法二:
新建一个组件继承自TADOQuery,在此组件中处理此属性
 
property OnChange: TNotifyEvent read FOnChange write FOnChange;
 
pihome的方法是正确的。你说不用写方法也实现过OnChange事件,这个事件应该是text
属性的OnChange,实际上是在它的父类的写方法中实现的:
procedure TControl.SetTextBuf(Buffer: PChar);
begin
Perform(WM_SETTEXT, 0, Longint(Buffer));
Perform(CM_TEXTCHANGED, 0, 0);
end;
这样从TControl以下继承时只要响应delphi的CM_TEXTCHANGED消息就可以实现OnChange事件了。
你现在要实现的东西只能加一个写方法来实现。
 
多人接受答案了。
 
后退
顶部