Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   codigo comun entre distintos formularios (https://www.clubdelphi.com/foros/showthread.php?t=50745)

federiconqn21 27-11-2007 13:48:36

codigo comun entre distintos formularios
 
Hola a todos. la inquietud mia es la siguiente:
si yo utilizo varios formularios en una aplicacion y en cada uno de ellos tengo un metodo con el mismo codigo.como por ejemplo: formX.LiampiarDatos.
como lo implemento por unica vez?. en el espantoso Visual Basic se hace de una manera que no se me hace familiar aqui.gracias a quien me pueda despejar esta pequeña duda

dec 27-11-2007 14:01:13

Hola,

En Delphi cuentas con el concepto de "módulos" o "unidades". Una unidad puede declarar e implementar procedimientos y variables (y objetos, tipos y lo que se te ocurra) que puede compartir con otras unidades. Así que puedes plantearte si el procedimiento "LimpiarDatos" puede compartirse, hasta qué punto merece la pena, y, ponerte a ello si ves que tal.

La verdad es que no se me ocurre qué más decirte, mejor dicho, a lo que se me ocurre no le encuentro mucho sentido. O sea, que habría que ver más detenidamente qué "datos" se supone que hay que "limpiar", de dónde... en fin, sin conocer los detalles es complicado ofrecer una posible solución. Pero, en definitiva, desde luego, es posible compartir código entre unidades.

Neftali [Germán.Estévez] 27-11-2007 16:00:54

Cita:

Empezado por federiconqn21 (Mensaje 248645)
...como por ejemplo: formX.LiampiarDatos

Puedes probar a implementar la funcioón fuera y padssarle el form como parémetro.
En ese caso la llamarías como:

Código Delphi [-]
  LiampiarDatos(formX);

dec 27-11-2007 16:02:27

Hola,

Pero, si la función espera un tipo de formulario en concreto... sólo valdrá para ese tipo de formularios, ¿no?

PD. Es por molestar nada más... :D :D

Neftali [Germán.Estévez] 27-11-2007 16:18:04

Cita:

Empezado por dec (Mensaje 248691)
...sólo valdrá para ese tipo de formularios, ¿no?

No tiene porqué. Se supone que el parámetro será genérico.
Si debe acceder a los controles de un formulario lo lógico es pasar ese formulario como parámetro (no se me ocurre otra forma).
Algo así vamos:

Código Delphi [-]
procedure LimpiarDatos(AForm:TForm);
var
  i:Integer;
  edt: TEdit;
begin
  // recorrer los componentes
  for i := 0 to (AForm.ComponentCount - 1) do begin
    // Es un TEdit
    if (AForm.Components[i] is TEdit) then begin
      // Limpiar el edit
      edt := TEdit(AForm.Components[i]);
      edt.Clear;
     //      edt. ....  //otras propiedades
    end;
  end;

Si hubiera que hacerlo con más tipos de controles, también se podría utilizar RTTI.

De esta forma puedes llamarla como:

Código Delphi [-]
  LimpiarDatos(AForm:TForm);
  LimpiarDatos(formX);
  ...

maeyanes 27-11-2007 16:22:11

También puedes usar la herencia visual...

Creas una forma que contenga el método LimpiarDatos:

Código Delphi [-]
TMiForma = class(TForm)
protected
  procedure LimpiarDatos; virtual;
end;

implementation

procedure TMiForma.LimpiarDatos;
begin
  // Lo que quieres hacer...
end;

Luego agregas esa unidad a tu proyecto y de ahí heredas esa forma... así puedes tener lo que deseas:

Código Delphi [-]
TClientesForm = class(TMiForma)
  edtClave: TEdit;
  edtNombre: TEdit;
  btnAceptar: TButton;
  btnCancelar: TButton;
  btnLimpiar: TButton;
  procedure btnLimpiarOnClick(Sender: TObject);
end;

implementation

procedure TClientesForm.btnLimpiarOnClick(Sender: TObject);
begin
  LimpiarDatos
end;

Saludos...


La franja horaria es GMT +2. Ahora son las 04:16: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