PDA

Ver la Versión Completa : Fichas compartidas entre varias opciones


Marina
25-11-2003, 15:01:24
Hola a todos!

Trabajo con Delphi 6, Interbase 6 e InterbaseExpress. Tengo el siguiente problema:

Tengo un Datamodule y 3 ventanas que son de uso común. En la definición de la clase del datamodule tengo miembros public que son variables de totales, que se van leyendo y actualizando desde las 3 ventanas mencionadas.
El problema es que desde varias opciones del sistema puedo usar este datamodule y las 3 ventanas. Estas varias opciones se pueden abrir simultáneamente en el mismo puesto de trabajo, por lo que necesito crear distintas instancias de las fichas de uso común, y además necesito pasar datos entre ellas (la referencia al Datamodule).

Datamodule: se crea desde la opción en cuestión, antes de crear las 3 ventanas. Inicializa sus miembros en 0 (cero)

Ventana 1: es llamada y creada desde la opción en cuestión, hace referencia a los miembros del datamodule

Ventana 2: es llamada y creada desde ventana 1, hace referencia y actualiza los miembros del datamodule

Ventana 3: es llamada y creada desde ventana 1, hace referencia y actualiza los miembros del datamodule

No se como hacer para pasar parámetros entre las ventanas. Estuve leyendo sobre los constructores y en el manual de Delphi 4 leí que se puede crear un contructor con nombre distinto a Create donde le puedo pasar la cantidad de parámetros que desee, pero no logré hacerlo funcionar. También leí sobre constructores y referencias a clases en el help de Delphi 6, pero tampoco logré que funcionara.

Si alguien puede ayudarme o darme alguna otra sugerencia de como hacer algo similar se le agradeceré mucho.

Saludos.

Marina

roman
25-11-2003, 15:29:30
Usando constructores puedes hacerlo así:


TForm1 = class(TForm)
public
constructor CreateEx(AOwner: TComponent; DataModule: TDataModule);
end;

constructor TForm1.CreateEx(AOwner: TComponent; DataModule: TDataModule);
begin
Create(AOwner);

{ Código para usar la referencia al datamodule }
end;


Pero también puedes agregar una propiedad pública para pasar el datamodule:


TForm1 = class(TForm)
public
DataModule: TDataModule;
end;


Cuando crees el formulario asignas la propiedad antes de abrirlo:


var
Form: TForm1;

begin
Form := TForm1.Create(..);
Form.DataModule := DataModule;
Form.ShowModal;
Form.Free;
end;


// Saludos

Marina
25-11-2003, 15:45:06
En caso de usar el Constructor como me indicás, como llamo la creación de la ventana, porque eso es lo que yo intenté hacer y no logré que funcionara

Marina

roman
25-11-2003, 15:49:25
Marina comentó:
En caso de usar el Constructor como me indicás, como llamo la creación de la ventana, porque eso es lo que yo intenté hacer y no logré que funcionara



var
Form: TForm1;

begin
Form := TForm1.CreateEx(.., DataModule);
end;


Los '..' son el "owner" que desees para el formulario: nil, self, application, etc. Si siempre va a ser nil (en caso de que tú misma te encargues de destruirlo) puedes omitir ese parámetro del constructor nuevo y en éste llamar al create original:

Create(nil);

// Saludos