Ir al contenido


Foto

¿Pasar Instancia De Objetos?


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 12 febrero 2009 - 10:32

Saludos, vengo ante ustedes los gurus de OOP.

Tratare de ser lo más explicito posible.

Estoy en la construcción de plantillas para el "trabajo cotidiano", mi escenario es el siguiente:

1.- Tengo un formulario MDI, donde muestro una rejilla (Grid) con los datos en modo de consulta.
2.- Los datos provienen de un DataModule (heredado con funciones necesarias), que contiene un DataSet (de FibPlus) que por programación le asigno las propiedades adecuadas; este DataModule se crea al momento de la creación del Formulario MDI.
3.- En el formulario MDI tengo los botones de inserción, modificación y demás al momento de hacer clic en uno de ellos muestro otro formulario MODAL para insertar/modificar los datos según correspondan.
4.- Al formulario MODAL al momento de su creación desde el MDI le paso cual es el DataModule (previamente ya creado al inicio del MDI) que tiene asociado para trabajar.

Ejemplo de lo que sería el código:



delphi
  1. var DM : TDataModule;
  2. procedure TFrmMDI.Create(ADataModule : TDataModule);
  3. begin
  4.   DM := ADataModule.Create;
  5.   DataSource.DataSet := Dm.DataSet;
  6. end;
  7.  
  8. procedure TFrmMDI.botonInsertaClick;
  9. begin
  10.   Frm : TFrmMODAL.Create(DM);
  11.   Frm.ShowModal;
  12. end;



Hasta aquí no tengo problemas ninguno, mi problema esta es cuando sean más de un DataModule que debo de utilizar para mostrar la información y a su vez tener que modificar la Data en el formulario MODAL.

No sé como pasarle esos DataModule al formulario MODAL y luego poder reconocer cuál es cual, he pensado en crear propiedades por cada DataModule en el formulario MODAL y así en el momento de su creación asignarlas.

Entonces mi pregunta es, ¿Cómo podría pasarles un set de DataModules al formulario MODAL?

Espero me hayan entendido.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 12 febrero 2009 - 12:11

Hola Rolphy Reyes,
No se si comprendí del todo... ¿quieres pasar más de un TDataModule como parámetro?

Si es eso, creo que lo más cómodo de hacer es emplear un TObjectList y añadir en él los TDataModules que sean necesarios. Luego, en el parámetro suministras a dicho TObjectList.

Espero que se entienda la idea.
Si estoy equivocado por favor te pediría que me lo explicases de nuevo.

Saludos,
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 12 febrero 2009 - 12:39

Hola Rolphy Reyes,
No se si comprendí del todo... ¿quieres pasar más de un TDataModule como parámetro?

Si es eso, creo que lo más cómodo de hacer es emplear un TObjectList y añadir en él los TDataModules que sean necesarios. Luego, en el parámetro suministras a dicho TObjectList.

Espero que se entienda la idea.
Si estoy equivocado por favor te pediría que me lo explicases de nuevo.

Saludos,


Sí Delphius es realmente lo que quiero hacer (al parecer se me paso especificarlo).

Con el TObjectList una vez obtenido en el formulario MODAL, para referirme a un DataModule que tenga algún método especifico ¿Debería de hacer un Casting? ¿Cómo sabría cual DataModule es quien?

Me refiero a que por ejemplo: Tengo TDmCliente, TDmTipoCliente y TDmSexo están instanciados en el formulario MDI y paso como parámetro estos DataModules; pero TDmCliente tiene un método llamado Procesar para poder hacer uso de esto debo de hacer un casting ¿Cierto?.

Para realizar alguna operación, ya sea para ejecutar algún método heredado o no, ¿Debería hacer casting?

Gracias.

P.D. Estoy algo nuevo!!
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 12 febrero 2009 - 12:53

Efectivamente amigo, para cualquier operación que debas hacer con el TObjectList será necesario Casting puesto que la propiedad Items devuelve un TObject. Por ejemplo deberás hacer algo como esto:



delphi
  1. TDataModule(MiObjectList.Items[5]).Xxxx



Pero ahora que lo pienso, me parece mejor que empleases un TStringList y uses el método AddObject(), puesto que con éste puedes identificar a cada objeto por un nombre. Si empleas TObjectList deberás ubicarlos mediante índices.
Igualmente, con el TStringList deberás hacer un casting.

Saludos,


  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 12 febrero 2009 - 01:18

Entonces, al ser necesario el Casting creo que optare por hacer propiedades de estos TDataModule adicionales, porque de todas formas tendré que poner en uso cada unidad tanto en el formulario MDI como en el MODAL; obviamente las unidades del MDI es obligatorio para poder instanciarlas pense que me podía evitar el uso también en el MODAL.

Pero de todas formas analizare mejor en casa esta forma que me indicas.

Gracias nuevamente!
  • 0