怎样写一个得到任何控件内容改变的通用事件 (100分)

  • 主题发起人 主题发起人 jake668
  • 开始时间 开始时间
J

jake668

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位高手看看这样一个事件怎样写。首先初始化命令按钮为不可用的,但只要窗体上的任何一个控件内容改变后,这个命令按钮为可见的。如果在每一个控件的OnChange事件去写代码太麻烦了。如何写一个通用事件,在控件内容改变时能自动得到Onchange改变事件的消息,自动调用改变命令按钮为可见的事件。谢谢!
 
你写一个过程,然后将所有控件的OnChange事件指向这个过程不就行了吗
 
上面的老大你先看明白了,再回答。如果每一个OnChange事件都要去写我就不用花这一百分了。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure Change(Sender: TObject);

implementation

{$R *.dfm}

procedure Change(Sender: TObject);
begin
Form1.Caption:=FormatDateTime('HH:NN:SS.ZZZ',now);
end;

procedure TForm1.FormCreate(Sender: TObject);
var I,J:Integer;
P:Pointer;
M:TMethod;
begin
for I:=0 to Self.ComponentCount-1 do
if Assigned(GetPropInfo(Self.Components,'OnChange'))
then begin
M.Code:=@Change;
M.Data:=Self.Components;
SetMethodProp(Self.Components,'OnChange',M);
end;
end;

end.
 
我觉得‘幻世星龙’的回答没错,楼主可能没明白意思,这也是惯用的做法。
就是写一个事件,你在窗体编辑的时候,在Events属性页把你所需要的控件的OnChange事件指向这个过程。
TYZhang的方法似乎有点霸道,把所有带OnChange事件的组件的OnChange事件都指过来。真正使用起来可能有问题吧 :)
 
TYZhang的回答是正确的,因为我正是想在所有的Onchange事件下不写任何代码。不过还是谢谢各位。
 
后退
顶部