2012-01-09 62 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

相關問題