Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Varios Form para uno (https://www.clubdelphi.com/foros/showthread.php?t=18661)

vtdeleon 18-02-2005 14:14:07

Un Form para varios
 
Otra vez, Saludos Tod@s

En un casi Hipotetico

Tengo 4 form, 3 de ellos son transacciones relacionados con empleados y el otro Form es una pequeña consulta (ya que no soy un genio para saberme los codigos de cada empleado).

yo utilizo la consulta con los demas form.
La cuestion es la siguiente:
Necesito que al cerra el form de consulta, este transfiera el Codigo selecionadao de un empleado "X" al edit1 del formulario que lo llamo (form1,Form2 o form3).

Si pueden publicar algun ejemplo se los agradecia.

Gracias.

roman 18-02-2005 20:14:06

Cita:

Empezado por vtdeleon
Necesito que al cerra el form de consulta, este transfiera el Codigo selecionadao de un empleado "X" al edit1 del formulario que lo llamo (form1,Form2 o form3).

Mejor deja que el formulario que lo llamó tome el valor él mismo.

En tu formulario de consultas agrega una propiedad pública para el código del empleado:

Código Delphi [-]
type
  TFormaConsultas = class(TForm)
  private
    FCodigo: Integer;

  public
    property Codigo: Integer read FCodigo write Codigo;
  end;

En el evento OnCloseQuery de FormaConsultas asignas a FCodigo el valor que que corresponda al empleado seleccionado. Por ejemplo, si usas un Table para mostrar los empleados en FormaConsultas sería algo como:

Código Delphi [-]
procedure TFormaConsultas.FormCloseQuery(...);
begin
  if ModalResult = mrOk then
    FCodigo := TablaEmpleados.FieldByName('cod_empleado').AsInteger;
end;

Así, cuando el formulario de consultas se cierre, ya tendrás en Codigo el valor adecuado. De esta manera, desde cualquier formulario donde requieras seleccionar un empleado haces:

Código Delphi [-]
var
  FormaConsultas: TFormaConsultas;

begin
  FormaConsultas := TFormaConsultas.Create(nil);
  try
    if FormaConsultas.ShowModal = mrOk then
      Edit1.Text := FormaConsultas.Codigo;
  finally
    FormaConsultas.Free;
  end;
end;

Si observas, con esta metodología, el formulario de consultas podrás usarlo en cualquier parte sin que éste tenga que preocuparse por quién lo llama y por dónde hay que colocar el dato.

// Saludos

vtdeleon 19-02-2005 05:16:14

Gracias Roman:cool:


Otra pregunta, puedo usarlo con formularios MDIChild?:confused:
Tengo una aplicacion en la que uso formularios MDIFORM y MDIChild. :D

Lepe 20-02-2005 12:48:31

En este caso, todo cambia radicalmente:

un form Mdichild no lo puedes poner modal, así que creamos un evento, y al cerrar la ventana de consulta, miramos si alguien está esperando por ese evento.

Código Delphi [-]
type
  // defino mi evento personalizado
   type  TinformarA: procedure (const codigoSeleccionado:integer) of object;

  TFormaConsultas = class(TForm)
  private
    FInforma:TinformarA;
    FCodigo: Integer;

  public
    property Codigo: Integer read FCodigo write FCodigo;
    property InformarA:TinformarA read Finforma, write Finforma default nil;
  end;

En el Onclose de esta ventana:
if Assigned(Finforma) then Finforma(Codigo);

Form1, Form2 y Form3 harían lo siguiente:
Código Delphi [-]
  FormConsulta := TformaConsulta.Create(...);
  FormConsulta.InformarA := llamamePepe;

por supuesto, Form1, Form2 y Form3 deben tener un prodecimiento: LlamamePepe;
Código Delphi [-]
procedure Tform1.llamamePepe(const Codigo:integer);
begin
   showmessage(' El form de consulta se ha cerrado y ha seleccionado' +
 inttostr(codigo));
end;

Atención!!!: no se informa a las 3 ventanas, solo a la ultima que haya llamado a FrmConsulta.

Tambien se me ocurre que ese evento se lance cuando se cambia el codigo de cliente en el Formconsulta, esta rallada quedaría así:

Código Delphi [-]
// defino mi evento
type  TinformarA: procedure (const codigoSeleccionado:integer) of object;

type
  TFormaConsultas = class(TForm)
  private
    FInforma:TinformarA;
    FCodigo: Integer;
    procedure SetCodigo(Value:integer);
  public
    property Codigo: Integer read FCodigo write SetCodigo;
    property InformarA:TinformarA read Finforma, write Finforma default nil;
  end;

procedure TformaConsulta.SetCodigo(value:integer);
begin
  if Value <> Fcodigo then
  begin
     Fcodigo := Value;
     if assigned(Finforma) then Finforma(Fcodigo);
  end;
No sé si me he rallado un poco :p pero la cosa funciona :D

Saludos

vtdeleon 21-02-2005 02:40:13

Gracias por sus ayudas :D


Lo probare...


La franja horaria es GMT +2. Ahora son las 12:40:01.

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