Al González,
Cita:
Empezado por Al González
...¿cómo podría el constructor Create de un componente, como el que pusimos dentro de nuestro formulario, saber qué nombre le dio usted en tiempo de diseño?...
|
Cita:
Empezado por Al González
...Añadiré otra pista: Si bien redefinir un método de TForm es clave para resolver el problema, puede que su constructor no sea el más adecuado...
|
Cita:
Empezado por Al González
...La solución que tengo en mente propone aprovechar los mecanismos de streaming existentes, colgarnos del tren que va avanzando, por decirlo de una manera, redefiniendo no sólo el constructor del componente de prueba, sino también cierto método virtual del formulario para permitir al componente acceder al furgón de la correspondencia...
|
Cita:
Empezado por Al González
...Daré otra pista, esta vez una jugosa: Durante la ejecución del constructor del componente, "algo" ya está procesando el DFM, entonces preguntémosle a ese "algo" (como dije anteriormente, "colgarnos del tren y acceder al furgón de la correspondencia")...
|
Cita:
Empezado por Al González
...Meterse directo al recurso DFM puede servir, pero esto no va por ahí. La solución es más limpia, elegante y orientada a objetos...
|
Los comentarios anteriores fueron tomados de :
Rescatando a Delphi - Reto Delphi
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TButton = class(StdCtrls.TButton)
private
FName : String;
public
constructor Create(AOwner: TComponent); override;
procedure SetName(const NewName: TComponentName); override;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
procedure TButton.SetName(const NewName: TComponentName);
begin
inherited SetName(NewName);
FName := Name;
ShowMessage(Name);
end;
destructor TButton.Destroy;
begin
inherited;
end;
end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32,
obtiene y muestra el nombre asignado en tiempo de diseño a las instancias del componente TButton inmediatamente después de finalizar el constructor del mismo y antes de que sea visualizado el formulario. Los métodos
Create y
Destroy no son necesarios
para obtener el nombre del componente TButton, fueron colocados solo para seguir la secuencia en Runtime del componente en modo Debug.
Nota: Se utilizo como ejemplo el componente TButton,
pero el mismo procedimiento se puede extender a cualquier componente dentro de un formulario, con lo cual se obtiene el
nombre asignado al mismo en tiempo de diseño inmediatamente después de finalizar su constructor.
Comentario: Desconozco si esta es la solución que esperabas encontrar
,
pero creo que resuelve el problema en términos de POO de forma simple y directa por medio de la redefinición del método virtual SetName del componente requerido
Revisa esta información:
Cita:
Empezado por RAD Studio VCL Reference
|
Espero sea útil
Nelson.