2013-03-04 33 views
6

Tôi đang viết trình chỉnh sửa thành phần tùy chỉnh, về cơ bản tương tự như trình biên tập TActionList ở chỗ nó cho phép tạo các thành phần phụ. Trình chỉnh sửa có các nút để thêm/xóa các thành phần.Delphi Designer, Thành phần có được kế thừa không?

Bây giờ, tôi muốn tìm hiểu xem thành phần được chọn có được kế thừa hay không, để tôi có thể tắt nút xóa. Tôi chưa tìm thấy bất kỳ thành viên nào trong số IDesigner hoặc các giao diện có liên quan.

Nếu tôi chỉ cần đi trước và xóa bởi Designer.DeleteSelection(True); sau đó tôi nhận được một ngoại lệ:

Selection chứa một thành phần, xxx, được giới thiệu trong một tổ tiên và không thể bị xóa.

Điều này không quá tệ, nhưng tôi muốn tắt nút xóa ngay từ đầu.

+0

Bạn có thể truy cập danh sách các mục của mình khi bạn chọn chúng trong chế độ xem danh sách (?) Và yêu cầu mỗi mục nếu 'InheritsFrom' là một lớp nhất định. – TLama

+1

@TLama Không, không phải vậy. Daniel nói về thừa kế hình ảnh, như được chỉ ra bởi từ khóa được kế thừa trong các tệp .dfm. –

+0

Tôi sẽ ngạc nhiên nếu điều này là có thể. Hãy thử làm những gì bạn mô tả với một cổ phiếu 'TActionList'. Thông báo lỗi là: 'Không thể đổi tên thành phần Action1, thành phần được giới thiệu dưới dạng tổ tiên. '. Nhưng sau đó bấm vào hành động và nó biến mất anyway và có một thông báo lỗi: * Đối số ra khỏi phạm vi *. Vì vậy, IDE không thể làm cho nó đúng! –

Trả lời

8

Ok, vì vậy dường như có một cách, bằng cách kiểm tra TComponent.ComponentState cho csAncestor, vì vậy:

csAncestor trong ComponentState

Và nó documented:

csAncestor - Các thành phần được giới thiệu dưới dạng tổ tiên. Chỉ đặt nếu csDesigning cũng được đặt.

+2

Rất tốt. Làm tốt. Có lẽ ai đó nên nói với Embarcadero về điều này để họ có thể sửa chữa trình soạn thảo danh sách hành động của họ !! –

+0

+1 công việc tốt .... – bummi

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