Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Constructor de forms (https://www.clubdelphi.com/foros/showthread.php?t=560)

lafirma 19-05-2003 02:33:15

Constructor de forms
 
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

Código:

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:

Código:

  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

Cita:

Empezado por lafirma
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 encontrarás algunos artículos al respecto, entre los cuales este explica justo lo que preguntas, aunque no lo hace en los primeros mensajes así que tendrás que leer un poco...


La franja horaria es GMT +2. Ahora son las 11:10:42.

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