Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Asignar variable a formulario (https://www.clubdelphi.com/foros/showthread.php?t=95621)

oscarac 21-03-2022 21:30:37

Asignar variable a formulario
 
buenas tardes
tengo un formulario el cual puede ser llamado desde otro formularios
la idea es identificar a traves de una letra el origen

algo asi como
form1
frmGramaje._origen = 'P';
form2
frmGramaje._origen = 'E';
form3
frmGramaje._origen = 'X';
form4
frmGramaje._origen = 'L';

en el evento oncreate de frmGramajes tengo un if, pero el valor de _origen viene en blanco

como puedo capturar ese dato ('P','E', etc) ???

oscarac 21-03-2022 22:21:03

tuve que hacer la pregunta en el activate y no en el create

Neftali [Germán.Estévez] 22-03-2022 09:16:48

Cita:

Empezado por oscarac (Mensaje 546138)
tengo un formulario el cual puede ser llamado desde otro formularios
la idea es identificar a traves de una letra el origen

El problema es que no vemos el resto de código que estás utilizando para crear y asignar ese valor. Así que no podemos sugerirte otra opción.

Cita:

Empezado por oscarac (Mensaje 546139)
tuve que hacer la pregunta en el activate y no en el create

El problema del evento OnActivate, es que se lanza continuamente (y seguramente más veces de las que necesitas).
A priori yo te sugeriría que utilizaras el OnShow o que utilices alguna otra forma de hacerlo (sobreescribiendo el OnCreate, por ejemplo).

oscarac 28-03-2022 21:54:04

Código Delphi [-]
  frmCatalogoPlato := TfrmCatalogoPlato.Create(self);
  frmCatalogoPlato._Origen := 'I';
  frmCatalogoPlato.ShowModal;

cuando hago esto, la variable "_Origen" no toma el valor de 'I' antes del form.create

en el create tengo un case

case _origen = 'I'... haz esto
case _origen = 'P'... haz esto
case _origen = 'M'... haz esto



la pregunta es...
como puedo hacer para que el formulario CatalogoPlato inicie con el valor 'I' en la variable _Origen

movorack 28-03-2022 22:43:51

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.

oscarac 28-03-2022 22:45:36

ya esta....
investigue en como modificar el constructor del create y me funciona.



cuando lo invoco

Código Delphi [-]
 frmCatalogoPlato := TfrmCatalogoPlato.Create(Owner, 'I', qryInsumosKOd.Asstring);
  frmCatalogoPlato.Show;


en el formulario....
Código Delphi [-]
 constructor Create(AOwner: TComponent; Origen, Codigo: String); virtual;

Código Delphi [-]
constructor TfrmCatalogoPlato.Create(AOwner: TComponent; Origen, Codigo: String);
 //procedure TfrmCatalogoPlato.FormCreate(Sender: TObject);
var strSql : string;
begin
  inherited create(Owner);
  dmGlobal.vResultVar := '';
  dmGlobal.vResultTexto := '';
  if Origen = 'M' then
    StrSql := 'Select * from TblPlato where Empresa = :Empresa order by Kod'
  else
    StrSql := 'Select * from TblPlato C ' +
              'Left Join tblPlatoD D on c.Empresa = d.empresa and c.KOD = d.kod ' +
              'where C.Empresa = :Empresa and d.codigo = ' + QuotedStr(Codigo);


funciona como quiero...


La franja horaria es GMT +2. Ahora son las 01:29:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi