Tôi đã triển khai giải pháp này hoạt động chỉ trong mọi phiên bản Delphi - ban đầu nó được triển khai trong Delphi 7, mặc dù tôi chưa thử nghiệm trong các phiên bản trước (nhưng nếu bạn đang sử dụng Delphi 7, thì đó là tất cả những gì bạn cần biết, đúng không?). :)
iirc điều này ít nhất là một phần cảm hứng cho bài đăng của Allen Bauer. Bạn có thể xem triển khai của tôi được minh họa trong một số video và tải xuống mã from my blog:
Các bài đăng mà bạn quan tâm được gắn thẻ "đa hướng". Liên kết tải xuống cho mã cuối cùng là available in this post.
Trong cách tiếp cận của tôi, bạn lấy được một lớp học từ TMultiCastEvent. Tất cả các lớp dẫn xuất của bạn phải làm là thực hiện một số loại bảo vệ an toàn đơn giản để thêm, loại bỏ và gọi một sự kiện với một chữ ký cụ thể.
Việc triển khai TNotifyEvent - thủ tục (Tên người gửi: TObject) - được cung cấp cùng với việc thực hiện cả hai "để giúp bạn đi" (các sự kiện phát đa hướng "hữu ích" là thông báo đơn giản) và cũng là ví dụ về cách lấy multicast các lớp sự kiện cho các chữ ký sự kiện cụ thể.
Khi bạn có lớp sự kiện phát đa hướng, bạn có thể sử dụng "trình xử lý sự kiện" thông thường thay thế cho nhau bằng phiên bản nhiều phiên bản, ví dụ: đưa ra một số lớp nút tưởng tượng với sự kiện On_Click nhiều diễn viên (tôi đã áp dụng quy ước interposing một gạch dưới trong tên sự kiện để xác định nó dưới dạng multicast, so với các sự kiện "uni-cast" thông thường):
Mã chỉ định một handler cho một sự kiện click unicast:
Button.OnClick := MyClickHandler;
có thể trực tiếp thêm rằng xử lý tương tự với một đa-cast Thông báo sự kiện:
MultiCastButton.On_Click.Add(MyClickHandler);
thực hiện của tôi cũng bao gồm một số cải tiến, chẳng hạn như khả năng tắt các sự kiện và xử lý tự động lại di chuyển từ xử lý khi đối tượng thực hiện bị phá hủy (điều này liên quan đến một số lượng nhỏ của vệ sinh mà có thể được bỏ qua nếu cần thiết nhưng có thể hữu ích trong những trường hợp nhất định).
Tất cả đều được mô tả và minh họa trong bài đăng trên blog của tôi.
Tận hưởng. :)
+1; BTW: Đây là danh sách các bài đăng sự kiện nhiều diễn viên của bạn: http://www.deltics.co.nz/blog/?tag=multicast-events –
cảm ơn vì nỗ lực của bạn nhưng tại sao bạn không xuất bản mẫu để hiển thị Làm thế nào để sử dụng nó? – FLICKER