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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-12-2004
Gustavo Gowdak Gustavo Gowdak is offline
Miembro
 
Registrado: jun 2004
Posts: 49
Poder: 0
Gustavo Gowdak Va por buen camino
Unhappy Consulta sobre Formularios

Hola tengo una consulta, es que quiero saber si puedo invocar un procedimiento de un formulario X a un formulario B, con solo escriber guardar().
Bueno les cuento, tengo un formulario pedidos y para obtener los datos de mis cliente invoco la ventana clientes, lo que yo quiero hacer es un doble click en codigo cliente y me ejecute un procedimiento guardar() en la ventana pedidos, el problema es que varias ventanas invocan a la ventana cliente y todas pueden realizar el mismo procedimiento y no siempre con la misma linea de codigo.
Me entiendes.... Desde ya gracias.....
Responder Con Cita
  #2  
Antiguo 09-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Nececitas incluir la unidad del formulario pedidos en la del formulario clientes y ejecutar:

Pedidos.Guardar();

Ahora, por lo que escribes me parece que varias ventanas tienen un método guardar() que no necesariamente es el mismo y de ahí que quieras omitir la referencia a pedidos.

Pero tal omisión sólo es visual ya que el compilador necesita saber a cuál método de qué ventana llamar. Si simplemente ve

guardar();

pues no sabrá dónde está ese método.

Una opción sería que todas las ventanas que tienen un método guardar tengan un ancestro común (digamos con herencia visual) que tenga un método virtual guardar que redefines según convenga en cada descendiente.

A la ventana de clientes tienes entonces que pasarle una referencia al formulario que la invoca, digamos:

Código Delphi [-]
procedure TClientes.Mostrar(Invocador: TVentanaComun);

donde TVentanaComun es la clase ancestra comun que define el método guardar().

Así, si TPedidos desciende de TVentanaComun entonces puede llamar a la ventana de clientes así:

Clientes.Mostrar(Self);

y la ventana de clientes usaría

Invocador.guardar()

Bueno, pero todo esto es muy complicado e innecesario.

La ventana clientes, al menos para los efectos que describes, tiene como tarea proporcionar el código de un cliente a quien sea que la llame, de forma similar (pongo énfasis en la analogía) a como un diálogo OpenFileDialog proveee un nombre de archivo. Un cuadro de diálogo puede ser usado en infinidad de contextos y el cuadro en sí no tiene ni la menor idea acerca de ningún contexto en específico; simplemente proporciona una interfaz para seleccionar un archivo y devuleve éste a quien lo haya llamado.

De la misma forma, la ventana de clientes no tiene porque tener idea de quién ni en qué circunstancias la llama, simplemente proporciona la interfaz para seleccionar un cliente y devuelve el código del cliente.

En resumen yo te sugiero que cambies la forma de enfocar el problema.

Pon una propiedad pública en la ventana de clientes que sea el código:

Código Delphi [-]
type
  TClientes = class(TForm)
  private
    function GetCodigoCliente: Integer;

  public
    property CodigoCliente: Integer read GetCodigoCliente;
  end;

La función GetCodigoCliente se encarga de devolver el valor adecuado (por ejemplo tomándolo directamente de la base de datos).

De esta forma, la ventana de pedidos haría algo como:

Código Delphi [-]
var
  CodigoCliente: Integer;

begin
  if Clientes.ShowModal = ID_OK then
  begin
    CodigoCliente := Clientes.CodigoCliente;
    Guardar(CodigoCliente);
  end;
end;

Y lo mismo haría cualquier otra ventana que requiera un código de cliente. La ventana de clientes no tiene entonces que lidiar con cada posible uso del código y es quien la usa el que hace cualquier cosa que requiera con dicho código.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-12-2004
Gustavo Gowdak Gustavo Gowdak is offline
Miembro
 
Registrado: jun 2004
Posts: 49
Poder: 0
Gustavo Gowdak Va por buen camino
El tema es que no solo el codigo en el datos a mandar, en otros ventanas envia mas datos del cliente, me puedes mandar un ejemplo mas explicito por favor si no es mucha molestia??
Responder Con Cita
Respuesta



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


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


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