PDA

Ver la Versión Completa : Constructor de forms


lafirma
19-05-2003, 02:33:15
necesito enviar parametros a un form, se me ocurre hacerlo al momento de contruirlo (por lo que los parametros de este constructor son varias ademas de owner), pero cuando escribo el constructor me da un warning indicandome que mi constructor sobreescribe el constructor de TCustomForm
que puedo hacer para solucionar esto y poder hacer constructores sin problemas?

__cadetill
19-05-2003, 09:45:09
Mira de hacer un inherited de TForm en el Contructor, algo asi


private
MiVarLocal: integer;

public
constructor Create2(Aowner : TComponent; _MiVarLocal: integer);

......

implemantation

constructor TForm1.Create2(Aowner : TComponent; _MiVarLocal: integer);
begin
inherited Create(Aowner);

MiVarLocal := _MiVarLocal;
end;


Espero te sirva

delphi.com.ar
19-05-2003, 17:41:31
Yo te recomendaría utilizar el evento OnCreate, pero si esto no te sirve, lo que tenés que hacer es sobrescribir el método:

TForm1 = class(TForm)
public
constructor Create(AOwner: TComponent); override;
end;

Al González
31-05-2003, 23:49:29
¡Buen día a todos!

Lafirma:

El mensaje de precaución del compilador te indica que estás creando en una clase un nuevo método con el mismo nombre de una clase ancestral, lo cual dificulta que el método ancestral pueda ser llamado desde las unidades que utilicen la nueva clase.

Para evitar este problema, procuro darle nombres únicos a los nuevos métodos, a menos que se trate de una redefinición sustitutiva o envolvente (como sucede con los métodos virtuales). Te recomiendo darle el nombre "Crear" a tu nuevo constructor.

Si éste ha de recibir el parámetro AOwner (además de los nuevos parámetros), dentro de él coloca la sentencia

Create (AOwner);

la cuál es preferible sobre

Inherited Create (AOwner);

Esto último es muy importante ya que el constructor virtual Create podría ser redefinido (Override) después en la nueva clase o en una clase descendiente de ella. Bajo esa situación, el no usar Inherited permite llamar al constructor Create correcto.

Espero esto sea de utilidad. Seguimos en contacto.

Al González :).

lafirma
01-06-2003, 17:03:04
Bueno, ya he solucionado un poco mi situacion, lo que hice fue que en el constructor nuevo aplique la directiva reintroduce, el codigo quedo asi:
constructor Create(AOwner: TComponent; Data: TIBDataSet; Op: Char); reintroduce;

Flecha
07-11-2006, 14:01:49
Bueno, ya he solucionado un poco mi situacion, lo que hice fue que en el constructor nuevo aplique la directiva reintroduce, el codigo quedo asi:
constructor Create(AOwner: TComponent; Data: TIBDataSet; Op: Char); reintroduce;

Una pregunta. ¿En qué se diferencian exactamente "reintroduce" y "override"?

Con "override" el compilador muestra el warning que comentais, y con "reintroduce" no. ¿Es esa la única diferencia, o hay algo más?

Me preocupa que sólo se diferencien en eso. Si no se diferencian en nada más, yo prefiero dar otro nombre a los métodos en los casos que "override" avisa con warnings.

Muchas gracias.

Ñuño Martínez
07-11-2006, 14:15:55
Si utilizas la opción buscar del foro (http://www.clubdelphi.com/foros/search.php) encontrarás algunos artículos al respecto, entre los cuales este explica justo lo que preguntas (http://www.clubdelphi.com/foros/showthread.php?t=35958&highlight=reintroduce+override), aunque no lo hace en los primeros mensajes así que tendrás que leer un poco...