2012-01-09 15 views
6

Mam procedurę o nazwie XYZ (sender: TObject) w delphi. W moim formularzu jest jeden przycisk.jak ustalić, która procedura wywołań zdarzeń w delphi

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

Oba zdarzenia wywołują tę samą procedurę. Chcę określić w procedurze XYZ, które zdarzenie wywołuje to (onclick lub onexit) i zgodnie z tym postępować z kodowaniem. Jak ustalić, które wydarzenie zostanie wyrzucone? dzięki

+0

Jeśli masz takie potrzeby, prawdopodobnie masz za dużo kodu w Xyz. Powinieneś podzielić to na x, y e z. Prawdopodobnie OnClick wywoła x, OnExit wywoła y, a oba wywołają z. –

+0

Bardziej ogólne pytanie brzmi: Jak mogę uzyskać "stos wywoławczy" w Delphi? - zobacz to pytanie [Potrzebujesz sposobu na okresowe rejestrowanie stosu wywołań/śledzenia stosu dla KAŻDEJ metody/procedury/funkcji o nazwie] (http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log -tak-call-stack-trace-for-every-method-proce) – mjn

+0

@mjn To by naprawdę nie pomogło tutaj. Z pewnością nie chcesz kodować prywatnych szczegółów implementacji VCL w kod klienta VCL? –

Odpowiedz

11

Nie możesz uzyskać tych informacji w uczciwy sposób. Rozwiązaniem jest użycie dwóch osobnych procedur obsługi zdarzeń na najwyższym poziomie, które z kolei mogą wywoływać inną metodę przechodzącą przez parametr identyfikujący, które zdarzenie jest obsługiwane.

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

dzięki David. najłatwiejszy sposób. . – Nalu

+0

Czy można uzyskać te informacje w tej samej procedurze bez użycia innego parametru? – Nalu

+1

Przykro mi, nie bardzo rozumiem to pytanie. –

Powiązane problemy