Soy nuevo en la creación de componentes y estaba experimentando con la creación de algunos de mis propios componentes derivados utilizando el estándar VCL de Delphi.Creación de componentes: ¿unir componentes juntos?
Pensé que podría mezclar dos componentes juntos, para crear uno singular. Tome por debajo de lo que tengo hasta ahora, la idea es poner una TImage dentro de un 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.
Si compilar e instalar lo anterior en un paquete, el resultado es como se muestra a continuación:
Problema
Me gustaría que mi componente se registre como un solo componente. Pero el componente debe ser una combinación de TScrollBox y TImage. El componente principal será el TScrollBox, pero ahora debería tener acceso a las propiedades y eventos, etc. del TImage también.
Por ejemplo, TMyPanel podría compartir las propiedades de TImage y TScrollBox juntos:
- AutoSize
- BorderStyle
- HorzScrollBar
- ParentBackground
- Imagen
- VertScrollBar
Creo que sería excesivo escribir completamente un nuevo componente para realizar el comportamiento descrito anteriormente, eso y realmente no sabría por dónde empezar. Si esto se puede lograr, puede crear algunos componentes interesantes que se combinan en uno, pero mantener allí las propiedades, métodos y eventos originales, etc.
Esto es lo que quiero lograr aquí con un TImage dentro de un TScrollBox.
Solución
La respuesta mostrada por Uwe Raabe funciona como se espera. El TImage ahora está registrado dentro de TScrollBox, pero aparece como un componente. Las propiedades del TImage se muestran en el Inspector de Objetos como Imagen. > Que revelará las propiedades de TImage :)
Tenga en cuenta que debe proporcionar 'Self' como propietario del subcomponente Usar el mismo propietario que el de 'TMyPanel' dará como resultado la contaminación DFM y problemas de transmisión. – NGLN
De hecho, todavía no entendiste bien. Ver mi respuesta actualizada. –
+1 gracias Uwe por mostrar un ejemplo. –