Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 23-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Creo que estas intentanto programar sin haber diseñado antes la lógica y ahí está el problema, no es un reproche, suele pasar, pero en esos momentos debemos abstraernos de los pequeños problemas pensar globalmente.

La VCL suele mantener un identificador de la ventana que ha de enviar datos, por ejemplo:
Código Delphi [-]
Ventana de clientes:

TCliente = class(TForm);

private
   Reservas : TReservas;
...
Ahora si, cada ventana Clientes tendrá su propia referencia a la ventana Reservas que creará, de forma que puede enviarle datos y cualquier cosa que se le antoje.

Si Una ventana de Clientes, puede tener abiertas varias ventanas de reserva al mismo tiempo, en lugar de usar una variable, usarías un array de TReservas o un TObjectList.

El tema de propiedades es un problema totalmente distinto a lo que hablamos, pero simplifica muchisimas cosas, por ejemplo:
Código Delphi [-]
TReservas = Class(TForm)

private
   FLlamador :TForm;
   procedure SetLlamador (Value:TForm);

public
   property LLamador:TForm read FLlamador write SetLlamador;
end;

procedure TReservas.SetLlamador(Value:TForm);
begin
  if FLlamador <> Value then
  begin
    FLLamador := Value;
    If Fllamador is TForm2 then
       Self.Caption := 'Tform2 me ha llamado'
    else if Fllamador is TForm3 then
       Self.Caption:= 'TForm3 me ha llamado';
  end;
end;
Ahora desde la ventana de Clientes, creamos un TREservas:
Código Delphi [-]
   FReservas := TReservas.Create(Self);
   FReservas.LLamador := Self;
Cuando se ejecuta la última línea, estamos escribiendo (write) en la propiedad LLamador, por tanto, se ejecuta el procedimiento TReservas.SetLLamador que actualiza la variable privada FLLamador y cambia el Caption de la ventana Reservas.

Otro ejemplo del mismo estilo: Tu famoso IBDatsetCAmpo.Value, no te compliques tanto la vida y hazlo así:
Código Delphi [-]
TForm1 = Class(TForm);
private
  function GetValorCAmpo:Variant;
  procedure SetValorCampo(Value:Variant);

public
  property VAlorCampo: Variant read GetValorCampo write SetVAlorCampo;
end;

function TForm1.GetVAlorCampo:Variant;
begin
  if ibdataset1.Active then
     Result := ibdataset1CAmpo.Value;
  else
     Result := unassigned;
end;

procedure TForm1.SetValorCAmpo(Value :Variant);
begin
   if (ibdataset1.Active) and (Value <> unassigned) then
     ibdataset1.Locate('codigo', Value,[]);
  end;
end;
Cuando hagas un " Aux := TForm1.ValorCAmpo" estas leyendo (read) de la propiedad ValorCampo, por tanto se ejecuta la funcion GetValorCampo que devuelve el ibdataset1Campo.Value, y en Aux, tendrás ese valor.

Como ves también controla errores, ya que si no está abierto el IbDataset1, devuelve el valor especial "unassigned" de todo Variant, que indica que no hay valor asignado.

Lo mismo harías en Form3, crear una propiedad llamada ValorCampo, CodigoCliente o como quieras llamarla y el proceso se simplifica y queda más claro:
Código Delphi [-]
  Self.CodigoCliente:= TForm1(Aowner).CodigoCliente;
    Form3 := TForm3.Create(self);
  Form3.CodigoCliente := Self.CodigoCliente;

Todo este rollo permite que al tener una ventana de Cliente y te muevas de cliente, si hay una ventana de reservas abierta al mismo tiempo, se sincronicen los datos automáticamente de las 2 ventanas (esto no lo habías pensado hasta ahora ).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 23-02-2007 a las 13:51:43.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Varias instancias independientes de un form apicito OOP 11 27-09-2006 15:07:10
multiples instancias de un Form dark_c OOP 3 31-01-2006 09:42:14
Evitar múltiples instancias de un mismo form Neomanar OOP 1 09-09-2005 17:10:26
Múltiples instancias de un mismo formulario Neomanar Varios 1 22-08-2005 15:20:29
Abrir a la vez el mismo form con diferentes datos Sayuri Varios 7 12-08-2005 17:28:41


La franja horaria es GMT +2. Ahora son las 15:26:33.


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
Copyright 1996-2007 Club Delphi