2012-01-09 64 views
6

我在delphi中有一个名为XYZ(sender:TObject)的过程。我的表单上有一个按钮。如何确定在delphi中哪个事件调用过程

Button.onclick:= xyz; 
Button.OnExit:= xyz; 

这两个事件调用相同的过程。我想在程序XYZ中确定哪个事件调用了这个(onclick或onexit),并根据这个事件进行编码。 如何确定哪个事件被触发?谢谢

+0

如果你有这样的需求,可能你在xyz中有太多的代码。你应该把它分成x,y,z。可能OnClick会调用x,OnExit会调用y,并且两者都会调用z。 – 2012-01-09 09:39:40

+0

更常见的问题是:如何在Delphi中获得“调用堆栈”? - 看到这个问题[需要一种方法来定期记录每个方法/过程/函数调用的调用堆栈/堆栈跟踪](http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log -the-call-stack-stack-trace-for-every-method-proce) – mjn 2012-01-09 12:06:48

+0

@mjn这在这里不会有帮助。当然你不会将VCL私有实现细节编码到VCL客户端代码中吗? – 2012-01-09 12:09:44

回答

11

你不能通过公平的手段获得这些信息。解决方案是使用两个独立的顶级事件处理程序,这些事件处理程序又可以调用另一个传递参数的方法来标识正在处理哪个事件。

type 
    TButtonEventType = (beOnClick, beOnExit); 

procedure TMyForm.ButtonClick(Sender: TObject); 
begin 
    HandleButtenEvent(beOnClick); 
end; 

procedure TMyForm.ButtonExit(Sender: TObject); 
begin 
    HandleButtenEvent(beOnExit); 
end; 

procedure TMyForm.HandleButtonEvent(EventType: TButtonEventType); 
begin 
    //use EventType to decide how to handle this 
end; 
+0

谢谢大卫。其最简单的方式更好。 。 – Nalu 2012-01-09 10:25:52

+0

是否可以在不使用其他参数的情况下以相同的程序获取该信息? – Nalu 2012-01-09 10:44:58

+1

对不起,我不太明白这个问题。 – 2012-01-09 10:51:17

相关问题