Tôi mới tạo thành phần và đã thử nghiệm với việc tạo một số thành phần có nguồn gốc tùy chỉnh của riêng mình bằng cách sử dụng VCL vấn đề tiêu chuẩn từ Delphi.Tạo thành phần - Tham gia các thành phần cùng nhau?
Tôi nghĩ tôi có thể kết hợp hai thành phần với nhau, để tạo ra một số ít. Đi dưới đây những gì tôi có cho đến nay, ý tưởng là để đặt một TImage bên trong một TScrollBox:
unit MyComponent;
interface
uses
Windows,
Classes,
Controls,
Forms,
ExtCtrls;
type
TMyPanel = class(TScrollBox)
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TMyPanel]);
end;
{ TMyPanel }
constructor TMyPanel.Create(AOwner: TComponent);
var
AImage: TImage;
begin
inherited Create(AOwner);
AImage := TImage.Create(AOwner);
AImage.Align := alClient;
AImage.Parent := Self;
end;
destructor TMyPanel.Destroy;
begin
inherited;
end;
end.
Nếu tôi biên dịch và cài đặt trên vào một gói, kết quả được như hình dưới đây:
vấn đề
Tôi muốn thành phần của mình được đăng ký là một thành phần duy nhất. Nhưng thành phần phải là sự kết hợp của cả TScrollBox và TImage. Thành phần chính sẽ là TScrollBox, nhưng bây giờ nó sẽ có quyền truy cập vào các thuộc tính và sự kiện vv của TImage.
Ví dụ, TMyPanel có thể chia sẻ các thuộc tính của TImage và TScrollBox với nhau:
- AutoSize
- BorderStyle
- HorzScrollBar
- ParentBackground
- Hình
- VertScrollBar
Tôi nghĩ rằng nó sẽ là quá mức cần thiết để viết hoàn toàn một thành phần mới để thực hiện hành vi được mô tả ở trên, điều đó và tôi thực sự sẽ không biết bắt đầu từ đâu. Nếu điều này có thể được thực hiện, bạn có thể tạo một số thành phần thú vị được kết hợp thành một, nhưng giữ nguyên các thuộc tính, phương thức và sự kiện ban đầu, v.v.
Đây là những gì tôi muốn đạt được ở đây với một TImage bên trong TScrollBox.
Giải pháp
Câu trả lời thể hiện bởi Uwe Raabe công trình như mong đợi. TImage hiện đã được đăng ký bên trong TScrollBox, nhưng xuất hiện dưới dạng một thành phần. Các thuộc tính của TImage được hiển thị trong Object Inspector dưới dạng Image. > Mà sẽ tiết lộ các thuộc tính của TImage :)
Lưu ý rằng bạn phải cung cấp 'Self' như chủ sở hữu của thành phần phụ. Sử dụng cùng một chủ sở hữu với 'TMyPanel' sẽ dẫn đến các vấn đề về ô nhiễm và phát tán DFM. – NGLN
Thật vậy, bạn vẫn không hiểu đúng. Xem câu trả lời cập nhật của tôi. –
+1 cảm ơn bạn Uwe đã cho thấy một ví dụ. –