2012-01-09 21 views
6

Tôi có một thủ tục có tên XYZ (người gửi: TObject) trong delphi. Có một nút trên biểu mẫu của tôi.cách xác định quy trình cuộc gọi sự kiện nào trong delphi

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

Cả hai sự kiện đều gọi cùng một quy trình. Tôi muốn xác định trong thủ tục XYZ, mà sự kiện gọi này (onclick hoặc onexit) và theo đó tiến hành với mã hóa. Làm cách nào để xác định sự kiện nào bị sa thải? cảm ơn

+0

Nếu bạn có nhu cầu như vậy, có thể bạn có quá nhiều mã trong xyz. Bạn nên chia nó, trong x, y e z. Có lẽ OnClick sẽ gọi x, OnExit sẽ gọi y, và cả hai sẽ gọi z. –

+0

Câu hỏi tổng quát hơn là: Làm thế nào tôi có thể nhận được một "cuộc gọi ngăn xếp" trong Delphi? - xem câu hỏi này [Cần một cách để định kỳ đăng nhập cuộc gọi stack/stack theo dõi cho phương pháp MỌI/thủ tục/chức năng được gọi là] (http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log -the-call-stack-stack-trace-cho-mỗi-phương pháp-proce) – mjn

+0

@mjn Điều đó sẽ không thực sự giúp đỡ ở đây. Chắc chắn bạn sẽ không mã hóa VCL chi tiết thực hiện tư nhân thành mã khách hàng VCL? –

Trả lời

11

Bạn không thể giữ thông tin đó bằng các phương tiện công bằng. Giải pháp là sử dụng hai trình xử lý sự kiện cấp cao nhất riêng biệt mà lần lượt có thể gọi một phương thức khác đi qua một tham số xác định sự kiện nào đang được xử lý.

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

cảm ơn david. cách dễ nhất của nó. . – Nalu

+0

là nó có thể nhận được thông tin đó trong cùng một thủ tục mà không cần sử dụng một tham số khác? – Nalu

+1

Tôi xin lỗi, tôi không hoàn toàn hiểu câu hỏi đó. –

Các vấn đề liên quan