PDA

Ver la Versión Completa : Modificando el "constructor Create" del Form


sitrico
30-09-2004, 23:11:52
Buenas,

Ultimamente he tenido que modifificar el constructor de los formularios de mi aplicación para agregar uno o más parámetros que me permiten "personalizar" en tiempo de ejecución los formularios de mi aplicación.

Algo tan simple como cambiar el caption, ocultar componentes, seleccionar las tablas a usar y eso.

Normalmente uso un código así:


f := TfActComprasOrd.Create(Self, IdFormulario, TComponent(Sender).tag, CampoClave);
If f <> nil Then
Begin
Try
f.ShowModal;
Finally
f.Free;
End;
End;


Donde:
IdFormulario me dice el archivo a usar
TComponent(Sender).tag es el tag de los botones incluir/modificar/Borrar y
CampoClave es el valor del campo clave (index) del registro a usar

Con esa estructura me ahorro programar independientemente una acción para cada una de las funciones disponibles. Asigno un Tag a cada boton y/o Acción y enlazo el OnExecute al código anterior.

Para que todo funcione tengo que sobreescribir el Constructor del formulario generamente algo así:


constructor Create(Owner: TComponent;IdFormulario, IdAccion : Integer;
CampoClave: String); Virtual;


Por supuesto la primera línea del código del metodo es:


inherited create(Owner);


Mi duda es si debo usar Virtual u Overrride (o algún otro modificador) para asegurarme de que la herencia del constructor Create sea la correcta ¿?

Cambio la pregunta:

¿ Esa forma de trabajar es Correcta en OOP ?

Gracias

eduarcol
01-10-2004, 07:50:18
La unica diferencia a la manera como yo lo trabajo(no se si e la correcta) es q en lugar de virtual al momento de declararlolo coloco como override, de resto todo igual

Neftali [Germán.Estévez]
01-10-2004, 09:51:43
...Para que todo funcione tengo que sobreescribir el Constructor del formulario generamente algo así:


constructor Create(Owner: TComponent;IdFormulario, IdAccion : Integer;
CampoClave: String); Virtual;


Mi duda es si debo usar Virtual u Overrride
Override lo que te asegura es que sobreescribes un método de la clase padre; sólo puedes utilizar override si los parámetros de tu método son los mismos que los de la clase padre.
En cuanto a virtual, lo que indicas es que ese método puede ser sobreescrito (utilizando override) en las clases heredadas de la actual.

En principio en tu constructor no puedes utilizar override puesto que la clase padre es TForm (lo supongo pq no dices lo contrario) y son diferentes parámetros (creo que el compilador se quejará si intentas hacerlo...); Sí puedes utilizar Virtual (si lo deseas), y lo que estás diciendo es que en posibles clases heredadas se podrá volver a redefinir el create (si no estás pensando en heredare nada es irrelevante).