//如何让光标进入DBEedit1的时候 出现两个对话框? 感谢各位! 没有可用分了,期待各位的解答. procedure DBEditEnter1(Sender: TObject); //事件1
procedure DBEditEnter2(Sender: TObject); //事件2
private
{ Private declarations }
publicprocedure TForm2.DBEditEnter1(Sender: TObject);
begin
ShowMessage('1');
end;procedure TForm2.DBEditEnter2(Sender: TObject);
begin
ShowMessage('2');
end;procedure TForm2.FormShow(Sender: TObject);
var
aMethod,bMethod:TMethod;
i:integer;
begin aMethod.Data := Pointer(Self);
aMethod.Code := MethodAddress('DBEditEnter1');
if Assigned(GetPropInfo(DBEdit1, 'OnEnter')) then
SetMethodProp(DBEdit1, 'OnEnter', aMethod); bMethod.Data := Pointer(Self);
bMethod.Code := MethodAddress('DBEditEnter2');
if Assigned(GetPropInfo(DBEdit1, 'OnEnter')) then
setMethodProp(DBEdit1, 'OnEnter', bMethod);
end;
procedure DBEditEnter2(Sender: TObject); //事件2
private
{ Private declarations }
publicprocedure TForm2.DBEditEnter1(Sender: TObject);
begin
ShowMessage('1');
end;procedure TForm2.DBEditEnter2(Sender: TObject);
begin
ShowMessage('2');
end;procedure TForm2.FormShow(Sender: TObject);
var
aMethod,bMethod:TMethod;
i:integer;
begin aMethod.Data := Pointer(Self);
aMethod.Code := MethodAddress('DBEditEnter1');
if Assigned(GetPropInfo(DBEdit1, 'OnEnter')) then
SetMethodProp(DBEdit1, 'OnEnter', aMethod); bMethod.Data := Pointer(Self);
bMethod.Code := MethodAddress('DBEditEnter2');
if Assigned(GetPropInfo(DBEdit1, 'OnEnter')) then
setMethodProp(DBEdit1, 'OnEnter', bMethod);
end;
我改了一下代码可见如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure TestEvent(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TestEvent(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add(Sender.ClassName + chr(32) + TEdit(Sender).Text);
end;procedure TForm1.FormShow(Sender: TObject);
var
aMethod,bMethod:TMethod;
i:integer;
begin
aMethod.Data := Pointer(self);
aMethod.Code := @TForm1.TestEvent;
if Assigned(GetPropInfo(Edit1, 'OnEnter')) then
SetMethodProp(Edit1, 'OnEnter', aMethod); bMethod.Data := Pointer(Self);
bMethod.Code := @TForm1.TestEvent;
if Assigned(GetPropInfo(Edit2, 'OnEnter')) then
setMethodProp(Edit2, 'OnEnter', bMethod);
end;end.
procedure DBEditEnter2(Sender: TObject); //事件2 弹出对话框 显示 "2"
(**以上为定义的2个过程**)当光标进入 DBEdit1的时候,能响应上面2个事件
相当于 DBEdit1.OnEnter:=DBEditEnter1+DBEditEnter2;
注:不把2个事件合并成一个事件 如下(下面不是我想要的解决方案):
procedure DBEditEnter1(Sender: TObject);
begin
showmessage('1');
showmessage('2');
end;
再次拜谢各位!继续期待解答!
类似于先定义一个事件List,把相关事件的地址加入该List,并把List地址指向某事件A,这样在执行某事件A时,会先遍历List中的事件组,是这样吗?