Foros Club Delphi

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

Decker 04-04-2007 14:38:47

Problema con herencia
 
Hola compañeros, queria añadir una propiedad published a un formulario, para ello público la propiedad antes declarada en un antecesor.

Código Delphi [-]
Antecesor (abuelo):
 
type
  TBoton=(Uno, Dos, Tres);
  TBotones=set of TBoton;
  TForm1 = class(TForm)
  private
    { Private declarations }
    FBotones: TBotones;
    procedure WBotones(Value: TBotones);
  protected
    property Botones: TBotones read FBotones write WBotones;
  public
    { Public declarations }
  end;

procedure TForm1.WBotones(Value: TBotones);
begin
  FBotones:=Value;
end;
 
PreAntecesor(Padre):
 
type
  TForm2 = class(TForm1)
  private
    { Private declarations }
  public
    { Public declarations }
  published
    property Botones;
  end;
 
Form en cuestión:
 
type
  TForm3 = class(TForm2)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Si hago lo mismo con TPanels, en la barra de propiedades (F11), me aparece una nueva Propiedad del tipo Set, si lo hago con formularios, no funciona. ¿Alguien sabe el porque?

roman 04-04-2007 15:08:58

No funciona porque debes registrar la nueva clase de formulario con el IDE para que la reconozca el inspector de objetos. El procedimiento viene explicado en gexperts. En la sección Open Tools FAQ, busca el apartado "How can I add published properties to a TForm descendent?"

// Saludos

Decker 04-04-2007 15:25:38

Sigo sin entenderlo.
 
Ya habia leido ese artículo, pero no es muy explicativo. Mi reino por un ejemplo.

roman 04-04-2007 16:41:08

Bueno, ahi va paso a paso, según acabo de hacerlo:
  1. Creas tu formulario en el IDE y agregas la propiedad deseada. Por ejemplo:

    Código Delphi [-]
    type
      TrmForm = class(TForm)
      private
        FAuthor: String;
      published
        property Author: String read FAuthor write FAuthor;
      end;

  2. Guardas el formulario, digamos en urmform.pas.

  3. Agregas el formulario al repositorio (menú contextual del formulario|Add to Repository...)

  4. Creas un paquete de ejecución (Runtime only), digamos rmforms.dpk, al que agregas el formulario (es decir, agregas urmform.pas en la sección Contains). Compilas y guardas el paquete.

  5. Creas un paquete de diseño (Designtime only), digamos rmformsdesign.dpk, al que agregas los paquetes designide y rmforms en la sección Requires (simplemente seleccionas la sección, oprimes el botón Add y escribes designide y repites para rmforms). designide es parte de Delphi y rmforms es el paquete de ejecución que acabas de crear.

  6. Creas una nueva unidad, digamos urmformsreg.pas en el paquete de diseño (File|New|Unit) que se verá así:

    Código Delphi [-]
    unit urmformsreg;
    
    interface
    
    procedure Register;
    
    implementation
    
    uses
      urmforms, DesignIntf, DesignEditors;
    
    procedure Register;
    begin
      RegisterCustomModule(TrmForm, TCustomModule);
    end;
    
    end.
  7. Compilas, instalas y guardas el paquete.

Con esto debe bastar. Para usar un fomulario de éstos, recuerda que debes heredar (opción inherit en el repositorio).

// Saludos

roman 24-04-2007 03:58:31

Cita:

Empezado por Decker
Mi reino por un ejemplo.

¿Y bien?, ¿donde está el reino?

;) :p :D

// Saludos

roman 02-06-2007 01:04:19

¿Nada aún?

:( :rolleyes: :cool:

pablonill 06-09-2012 01:24:09

Fantastico roman, cuando junte plata para un reino te lo regalo!

roman 06-09-2012 03:39:21

Ja, ja. Gracias. Algo es algo :) :D

// Saludos

pablonill 06-09-2012 14:35:38

Hola roman, antes que nada muchas gracias por el ejemplo!, muy practico y entendible!, te hago una consulta. Aplique el ejemplo y todo perfecto, pero como hago para que el dfm aparezca en el formulario que heredo, ya que en tiempo de diseño no aparecen los controles que puse en el formulario padre, pero si aparecen en tiempo de ejecución. Muchas gracias.

roman 06-09-2012 17:13:59

Mmm. Creo que eso tiene que ver con esto que comentan en el enlace que puse en el mensaje #2:

Cita:

Note that the IDE will not allow you to add both published properties and components to a custom module at the same time. The workaround is to create a form with your custom properties in a package, and then have a descendent form in the repository which adds the components you want there by default.
// Saludos


La franja horaria es GMT +2. Ahora son las 21:24:04.

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