Hola,
Yo estoy como
jmariano, que C++ me es bastante desconocido. Llevo desde que te contesté por vez primera tratando de hacer algo similar en Delphi, porque creo que no te sería complicada la traducción del código fuente a C++.
El caso es que no he conseguido lo que se proponía sino dando cierto rodeo que no sé hasta qué punto será necesario. He hecho varias pruebas, como te digo, y, en ninguna de ellas conseguía asignar un formulario a la propiedad de marras, salvo programáticamente, esto es, fuera del Inspector de objetos.
A lo último que he llegado ha sido a lo que a continuación expondré (el código fuente) y, de este modo, sí que he podido asignar un formulario a una propiedad de "mi componente" desde el Inspector de Objetos. Solo que lo que hago es asignar el formulario a una propiedad de una propiedad...
Me explicaré, se trata de dos clases: una de ellas contiene una propiedad a la cual puede asignársele un formulario. Esta misma clase es el tipo de una propiedad de "mi componente", de ahí que diga que he dado un rodeo que no sé hasta qué punto sería preciso dar, si supiera hacerse de otro modo.
En fin, aquí está el código fuente que digo que consigue al cabo hacer algo parecido a lo que se precisaba, si no es ya que todo ello sea deshechable porque no es exactamente lo que se pretendía realizar. El caso es que, como digo, al cabo puedo, mediante el Inspector de Objetos, asignar un formulario a una propiedad de "mi componente".
Como verás es código fuente de Delphi... espero que no tengas muchos problemas para traducirlo a código fuente de C++.
Código Delphi
[-]
unit UPruebas;
interface
uses
Forms, Classes;
type
TMiForm = class(TPersistent)
private
FForm: TForm;
public
procedure Assign(Source: TPersistent); override;
published
property MiForm: TForm read FForm write FForm;
end;
type
TMiComponente = class(TComponent)
private
FMiForm: TMiForm;
procedure SetForm(Value: TMiForm);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property MiForm: TMiForm read FMiForm write SetForm;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMiComponente]);
end;
constructor TMiComponente.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMiForm := TMiForm.Create;
end;
destructor TMiComponente.Destroy;
begin
FMiForm.Free;
inherited;
end;
procedure TMiComponente.SetForm(Value: TMiForm);
begin
if Value <> FMiForm then
FMiForm.Assign(Value);
end;
procedure TMiForm.Assign(Source: TPersistent);
begin
inherited;
if Source is TForm then
begin
FForm := TForm(Source);
end;
inherited Assign(Source);
end;
end.