Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   saber el form (https://www.clubdelphi.com/foros/showthread.php?t=18414)

castroruiz2001 10-02-2005 23:35:01

saber el form
 
Que tal foro...


Tengo algunas tablas que son facturas, Ordenes y Clientes... tengo los dos fromularios para facturas y Ordenes, ademas de un formulario para la consulta de los Clientes.

Mi duda es como saber cual de los 2 formularios (Facturas, Ordenes) hizo la llamda al formulario de consulta para signar el registro buscado a uno de los dos formularios.

Gracias.

ISKANDAR 11-02-2005 00:30:11

Hola, lo que podrías hacer es declarar en el formulario de clientes alguna propiedad que sirva como flag, entonces antes de llamarlo, el formulario que lo invoque podría escribir su nombre en dicha propiedad, de este modo "Clientes" sólo debe revisar esa propiedad para saber que hacer. Saludos.

roman 11-02-2005 01:11:01

Hola, mi propuesta va en sentido contrario. En lugar de que la ventana de clientes sea la encargada de asignar el valor seleccionado al formulario que la llamó mejor deja que dicho formulario tome el valor de la ventana de clientes.

A mi me gusta hacer la analogía con un FileOpenDialog. El cuadro de diálogo no tiene ni idea de quién lo llama- de hecho se programó mucho antes de que nosostros hicéramos uso de él. Su labor en la vida es dejar que el usuario seleccione un archivo cuyo nombre "deja" en su propiedad FileName. De esta manera, a cualquier formulario que haga uso de este diálogo le bastará tomar esta propiedad y asignarla como mejor le convenga.

La misma situación ocurre aquí. Muy posiblemente tu formulario de clientes lo uses para que el usuario seleccione uno a fin de introducirlo en una orden o una factura. En lugar de que este formulario de clientes se encargue de la asignación, haz que "deje" al cliente seleccionado (posiblemente su id o campo que uses como llave primaria) en una propiedad pública:

Código Delphi [-]
type
  TFormularioClientes = class(TForm)
  public
    ClienteId: Integer;
  end;

En el evento OnCloseQuery del formulario determinas si el usuario aceptó o canceló la selección. En caso de que haya aceptado, colocas en ClienteId el id del cliente seleccionado.

Así, por ejemplo, el formulario de facturas simplemente haría algo como:

Código Delphi [-]
var
  FrmClientes: TFormularioClientes;

begin
  FrmClientes := TFormularioClientes.Create(nil);

  try
    if FrmClientes.ShowModal = mrOk then
      TablaFacturas.FieldByName('ClienteId').AsInteger := FrmClientes.ClienteId;
  finally
    FrmClientes.Free;
  end;
end;

Y lo mismo haría el formulario de órdenes o cualquier otro formulario que en el futuro requiere el uso de la ventana de clientes.

De esta manera logras que la ventna de clientes sea independiente de los formularios que la llaman y por tanto "a salvo" de cualquier cambio que en un momento dado tengas que hacer en estos formularios (por ejemplo, si cambias el lugar donde se "pone" al cliente en el formulario de facturas, tendrás que cambiar el código del formulario de clientes) y cuando requieras colocar un nuevo formulario que requiera la selección de un cliente no tendrás que tocar el código de éste.

// Saludos

vtdeleon 11-02-2005 02:41:24

Cita:

Empezado por roman
Código Delphi [-]
TablaFacturas.FieldByName('ClienteId').AsInteger := FrmClientes.ClienteId;

Que valor tiene asignado FrmClientes.ClienteId :confused: :confused: .

----------

roman 11-02-2005 02:48:23

Cita:

Empezado por vtdeleon
Que valor tiene asignado FrmClientes.ClienteId :confused: :confused: .

Me cito a mi mismo:

Cita:

Empezado por mi mismo
En el evento OnCloseQuery del formulario determinas si el usuario aceptó o canceló la selección. En caso de que haya aceptado, colocas en ClienteId el id del cliente seleccionado.

Con más detalle, suponiendo que el formulario de clientes tiene la tabla correspondiente TablaClientes, entonces:

Código Delphi [-]
(* Evento CloseQuery de TFrmClientes *)
procedure TFrmClientes.FormCloseQuery(...);
begin
  if ModalResult = mrOk then
    ClientId := TablaClientes.FieldByName('id').AsInteger;
end;

// Saludos

Paoti 12-02-2005 02:40:54

Gracias compañero
 
Roman...!


me sirvio tu propuesta para un poryecto que tengo en marcha!!!!


no pense en este paradigma... es muy bueno...



Nos vemos....




P.S. ya extrañaba estar de vuelta por estos lugares... (estaba en un trabajo haciendo parche sobre parche en VB con SQL Server.... que cosas se ven hoy en dia.... a rotomar el rumbo)


La franja horaria es GMT +2. Ahora son las 10:09:46.

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