El error de
Stack Overflow se da en este método:
Código Delphi
[-]
function TProducto.GetOnMouseDown:TMouseEvent;
begin
Result := OnMouseDown;
end;
Por que, por que estas haciendo llamadas recursivas del mismo método
GetOnMouseDown...
Solucion:
Código Delphi
[-]
function TProducto.GetOnMouseDown:TMouseEvent;
begin
Result := sForma.OnMouseDown
end;
Ahora, como estás creando un componente visual, te recomiendo que en lugar de crear un constructor propio, redefinas el de
TPanel:
Código Delphi
[-]
TProducto = class(TPanel)
public
constructor Create(AOwner: TComponent); override;
end;
implementation
constructor TProducto.Create(AOwner: TComponent);
begin
inherited;
end;
Por cierto, los métodos para asignar propiedades deben ser siempre privados, a menos que quieras hacerlos virtuales para que futuros descendientes los puedan redefinir...
Otra observación, el método
MostrarMensaje lo declaras como un método abstracto, y al ser un componente visual, esto no es aconsejable, ya que para poder hacer buen uso del componente, tendrías que crear un descendiente que implementara la funcionalidad de
MostrarMensaje...
Saludos....