He creado un componente derivado de TCustomPanel. En ese panel tengo una propiedad publicada de una clase derivada de TOwnedCollection. Todo está funcionando bien y al hacer clic en los puntos suspensivos en el inspector de objetos para esa propiedad, se abre el editor de colecciones predeterminado donde puedo administrar los TCollectionItems en la lista.Cómo invocar el editor de propiedades de un componente en el momento del diseño
TMyCustomPanel = class(TCustomPanel)
private
...
published
property MyOwnedCollection: TMyOwnedCollection read GetMyOwnedCollection write SetMyOwnedCollection;
end;
También me gustaría ser capaz de hacer doble clic en el panel en tiempo de diseño y tienen el editor de la colección se abren de forma predeterminada. Empecé creando una clase derivada de TDefaultEditor y registrándola.
TMyCustomPanelEditor = class(TDefaultEditor)
protected
procedure EditProperty(const PropertyEditor: IProperty; var Continue: Boolean); override;
end;
RegisterComponentEditor(TMyCustomPanel, TMyCustomPanelEditor);
Esto parece ser dirigido en el momento adecuado, pero estoy atascado en cómo poner en marcha el editor de propiedades para la recogida en ese momento.
procedure TMyCustomPanelEditor.EditProperty(const PropertyEditor: IProperty; var Continue: Boolean);
begin
inherited;
// Comes in here on double-click of the panel
// How to launch collection editor here for property MyOwnedCollection?
Continue := false;
end;
Cualquier solución o enfoque diferente sería apreciado.
Derivado de TComponentEditor y la implementación de Get/ExecuteVerb para llamar a ShowCollectionEditor funcionó a la perfección. Muchas gracias. – avenmore
Wow, debo admitir que estoy un poco sorprendido de que realmente haya sido así de fácil, ¡fue literalmente hace siglos cuando la última vez que hice algo así! –