2013-01-15 36 views
13

Tôi đang làm việc trên một số thành phần trong XE2. Có thể có nhiều hơn đơn vị của thành phần được thêm vào mệnh đề sử dụng của biểu mẫu mà nó được bỏ không?Tôi có thể tạo thành phần Delphi tùy chỉnh để thêm nhiều đơn vị vào mệnh đề sử dụng không?

Ví dụ: Khi tôi chọn TCustomComponent từ gói tôi đã xây dựng và cài đặt, đơn vị CustomComponent được thêm vào mệnh đề sử dụng của biểu mẫu. Tôi cũng muốn thêm đơn vị GlobalConstants.

Có ai biết nếu điều này có thể được thực hiện không?

Trả lời

16

Tạo gói thời gian thiết kế cho cấu phần của bạn (nếu bạn chưa có). Trong gói đó, tạo một lớp thực hiện giao diện ISelectionEditor (cách dễ nhất là lấy từ lớp TSelectionEditor), ghi đè phương thức RequiresUnits() ảo của nó để báo cáo bất kỳ đơn vị bổ sung nào bạn muốn xuất hiện trong mệnh đề uses của bất kỳ Biểu mẫu/Khung/DataModule nào sử dụng thành phần của bạn. Sau đó, hãy đăng ký Register() chức năng của gói của bạn bằng cách gọi RegisterSelectionEditor() (ngoài số RegisterComponents()).

Indy 10 thực hiện chính xác này cho TIdTCPServer, TIdCmdTCPClient, và TIdUDPServer thành phần của nó, để đảm bảo IdContextIdSocketHandle đơn vị được thêm vào uses khoản. Nhìn vào các đơn vị IdCoreSelectionEditors.pasIdRegisterCore.pas để xem cách Indy thực hiện việc này.

Cập nhật: các IdCoreSelectionEditors.pasIdProtocolsSelectionEditors.pas đơn vị đã được gỡ bỏ từ Indy ngày 10 tháng 3 năm 2014. Tất cả các lớp học SelectionEditor mỗi thành phần đã được thay thế bằng một lớp duy nhất mới được thực hiện trong đơn vị IdRegisterCore riêng của mình. Lớp SelectionEditor mới này được đăng ký cho tất cả các thành phần Indy, và tìm tất cả các cá thể của bất kỳ thành phần Indy nào đã được đặt ở thời gian thiết kế, sử dụng RTTI của các kiểu dữ liệu của tất cả các tham số và giá trị trả về cho bất kỳ trình xử lý sự kiện được gán nào các đơn vị cần báo cáo để đưa vào mệnh đề uses.