Ver Mensaje Individual
  #3  
Antiguo 11-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita