Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   herencia entre paquetes (https://www.clubdelphi.com/foros/showthread.php?t=7755)

Nidia H. Ochoa 25-02-2004 21:20:01

herencia entre paquetes
 
buen dia:
mi duda es como logro crear un objeto en un paquete desde un paquete base. :confused:
yo tengo un paquete base que esta compuesto de una unidad y quiero definir un boton para que al cargar otro paquete que contiene una forma y esta forma es creada de la que se encuentra en el paquete base (su hija) ya contenga el boton creado en el paquete base.

algo que yo estoy trabajando es crearle al paquete base un metodo donde es creado el boton pero al ser llamado en el paquete con la forma hija el metodo se reinscribe y pierdo el metodo del padre como puedo hacer eso.

parte del codigo es:

codigo del paquete base

unit UFormaBase;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TFormaBase = class(TForm) // declaracion de clase de tipo TForm
private
public
{ bloque de metodos generales }
procedure CreaButton(const PNLeft, PNTop : Integer); virtual;
implementation

{ creacion de metodos generales }

procedure TFormaBase.CreaButton(const PNLeft, PNTop : Integer);
var
cmdFija : TButton;
begin
cmdFija := TButton.Create(cmdFija);
cmdFija.Parent := cmdFija;
cmdFija.Left := PNLeft;
cmdFija.Top := PNTop;
end;

end.

codigo de otro paquete con una forma hija

unit Catalogo;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, DB, ADODB, Grids, DBGrids, Activex, UFormaBase, DMCatalogo, fpGenerales;
type
TfrmCatPlazos = class(TFormaBase) // forma hija
private
public
procedure CreaButton(const PNLeft, PNTop : Integer); override; // aqui es donde llamo al metodo
end;
end.

Espero y puedan ayudarme de antemano muchas gracias.

roman 25-02-2004 21:29:49

En el procedimiento CreaButton de la forma hija ¿estás llamando al procedimiento heredado (inherited)?

// Saludos

Nidia H. Ochoa 25-02-2004 22:09:47

inherited
 
no se como utilizarlo podrias mostrarme.
gracias de antemano :D

roman 25-02-2004 22:12:46

Código:

procedure TfrmCatPlazos.CreaButton(const PNLeft, PNTop : Integer);
begin
  inherited;

  { Otro código }
end;

// Saludos

Nidia H. Ochoa 25-02-2004 23:01:16

Gracias por la respuesta sobre el inherited. funcion
ahora me marca un error cuando lee el metod ' A control cannot have itself as its parent' es en la linea de codigo siguiente:

cmdFija := TButton.Create(Self);
cmdFija.Parent := Self;

y ya intente con

cmdFija.Parent := Parent;

no se como poder solucionarlo

roman 25-02-2004 23:25:59

Cita:

Empezado por Nidia H. Ochoa
cmdFija := TButton.Create(Self);
cmdFija.Parent := Self;

¿Estás segura de que estas líneas son las que te marcan el error? Porque anteriormente tenías

Código:

cmdFija := TButton.Create(cmdFija);
cmdFija.Parent := cmdFija;

en donde, en efecto, te madaría tal error.

// Saludos

Nidia H. Ochoa 25-02-2004 23:47:18

si en efecto tenia el segundo codigo pero el mensaje de error me lo ejecuta cuando termina de leer la siguiente linea cmdFija.Parent := cmdFija; , luego la cambie por la primera cmdFija.Parent := Self; y tambien ya intente con cmdFija.Parent := Parent;

Asi que no entiendo el mensaje de error.
no se si es porque el codigo se encuentra en el paquete base y no en donde se esta creando la forma hija.?

Nidia H. Ochoa 26-02-2004 00:22:12

Hola roman:

creo que resolvi el problema.

la propiedad de Parent se tiene que poner en la forma hija ya que ahi se utilizara.

en conclusion
en el procedimiento del paquete base solo se le tiene que quitar esa linea de codigo y ponersela en el procedimiento de la forma hija.


de antemano muchas gracias por la ayuda.

Nidia H. Ochoa 26-02-2004 15:51:40

con respecto al codigo inicial de todo este hilo ahora tengo un problema que no puedo activar el evento del objeto creado en la forma hija

el evento que me interesa es el de click ...
donde tengo que poner su evento en el padre o en el hijo?
de antemano muchas gracias

roman 26-02-2004 17:08:07

Pues puedes hacerlo en ambos lados ya que la asignación la vas a hacer dinámicamente. Si el evento va a ser distinto en cada hija entonces ponlo en cada hija. Si es común a todas ellas ponlo en el padre.

// Saludos


La franja horaria es GMT +2. Ahora son las 23:11:35.

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