Ver Mensaje Individual
  #5  
Antiguo 28-03-2022
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, oscarac.

Según tu última respuesta entiendo que estás tratando de manejar el valor de la variable en el evento OnCreate, pero cuando pasas de la creación y tratas de asignar el valor a la variable, ya el evento OnCreate fue llamado y no puedes manipular la variable allí.

Como te dice Neftalí, puedes hacer la asignación y manejarla en el evento OnShow, puedes sobrescribir el evento de construcción del form (Create) o puedes manejar un evento al asignar el valor de la propiedad,

Ej: acá tengo el Form2, al cual le he añadido las propiedades _Origen y _Origen2 que apuntan a la misma variable F_Origen; También he sobrecargado la creación del TForm añadiendo el manejo de la variable Origen.

Código Delphi [-]
type
  TForm2 = class(TForm)
    Edit1: TEdit;
    procedure FormShow(Sender: TObject);
  private
    F_Origen: string;
    procedure set_Origen2(const Value: string);
    { Private declarations }
  public
    constructor Create(AOwner: TComponent; Origen:string); overload;
    property _Origen: string read F_Origen write F_Origen;
    property _Origen2: string read F_Origen write set_Origen2;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

constructor TForm2.Create(AOwner: TComponent; Origen:string);
begin
  inherited Create(AOwner);

  F_Origen := Origen;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  Edit1.Text := Format('Origen: %s', [F_Origen]);
end;

procedure TForm2.set_Origen2(const Value: string);
begin
  F_Origen := Value;
  ShowMessage(Format('Origen: %s', [F_Origen]));
end;

end.

Desde otro formulario solo debo crear el formulario con el nuevo constructor

Código Delphi [-]
procedure TForm1.btnUseCreateClick(Sender: TObject);
  var
    lForm: TForm2;
begin
  lForm := TForm2.Create(Self, obtOrigen);
  try
    lForm.ShowModal;
  finally
    lForm.Free;
  end;
end;

Crear el formulario y asignar el valor de la propiedad _Origen

Código Delphi [-]
procedure TForm1.btnAssignPropClick(Sender: TObject);
  var
    lForm: TForm2;
begin
  lForm := TForm2.Create(Self);
  try
    lForm._Origen := obtOrigen;
    lForm.ShowModal;
  finally
    lForm.Free;
  end;
end;

o crear el formulario y asignar el valor de la propiedad _Origen2

Código Delphi [-]
procedure TForm1.btnAssignProp2Click(Sender: TObject);
  var
    lForm: TForm2;
begin
  lForm := TForm2.Create(Self);
  try
    lForm._Origen2 := obtOrigen;
    lForm.ShowModal;
  finally
    lForm.Free;
  end;
end;

En todos los llamados, el resultado es el mismo. En el evento OnShow alimenta un edit con el origen que haya seleccionado. Con la diferencia que en el caso de asignar el valor a _Origen2 presentará un mensaje antes de presentar el formulario.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita