Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Ocultar propiedades en componentes (https://www.clubdelphi.com/foros/showthread.php?t=70134)

_cero_ 01-10-2010 08:50:16

Ocultar propiedades en componentes
 
Como están todos, ps les diré mi problema, estoy haciendo un componente que hereda de TIBQuery (con c++ builder 2010), y por razones de diseño y seguridad, necesito ocultar algunas de sus propiedades que aparecen en el inspector de objetos, aunque ya revise e intente implementar los consejos de Neftali expuestos en este hilo, aun no logro hacerlo, ya que este método lo único que hace es cambiarme la propiedad no ocultármela. La pregunta es, alguien sabe cómo ocultar propiedades heredadas?


De antemano gracias.

Neftali [Germán.Estévez] 01-10-2010 11:21:10

Pues algo no debes estar haciendo bien, porque a mi sí me las oculta (hablamos de "ocultarlas" en el Inspector de Objetos).
Hay que decir que "conceptualmente" el hecho de "ocultar" propiedades no creo que sea muy aconsejable ni correcto, pero en mi caso era por comodidad a la hora de trabajar con determinados componentes.

Si defines un nuevo componente tal que así:

Código Delphi [-]
  // Tipo Dummy
  TDummyProp = (dummyprop);

  TEditRocortado = class(TEdit)
  private
    _DummyProp: TDummyProp;
  protected
    { Protected declarations }
  public

  published
    // Ocultar propiedades ============================
    property Anchors:TDummyProp read _DummyProp;
    property AutoSelect:TDummyProp read _DummyProp;
    property AutoSize:TDummyProp read _DummyProp;
    property BevelEdges:TDummyProp read _DummyProp;
    property BevelInner:TDummyProp read _DummyProp;
    property BevelKind:TDummyProp read _DummyProp;
    property BevelOuter:TDummyProp read _DummyProp;
    property BiDiMode:TDummyProp read _DummyProp;
    property BorderStyle:TDummyProp read _DummyProp;
  end;

Si te fijas no he hecho nada más que ocultar todas las propiedades del Edit que empiezan por A y B.

Si ese componente lo "sueltas" en un formulario y miras el Inspector de Objetos verás esto:



Con Delphi 6, al menos, desaparecen esas propiedades.

_cero_ 01-10-2010 17:29:44

Gracias Neftali, Pues sí que pensé que lo implementaba mal, pero después de muchos intentos, esta fue la única forma que no me marcaba errores:

Código:

typedef TDummyProp;//Declaro un tipo cualquiera

class PACKAGE LcIBQuery : public TIBQuery
{
private:
    TDummyProp _DummyProp;//Declaro a ese tipo

__published:
    //Declaro las propiedades que quiero ocultar
    __property TDummyProp Database={read=_DummyProp};
    __property TDummyProp SQL={read=_DummyProp};

public:
    __fastcall LcIBQuery(TComponent* Owner);
    __fastcall ~LcIBQuery();
};

Y el resultado es



Si no es mucha molestia podrías hacerme las correcciones pertinentes, por favor.

Edición:
Probé rápido en delphi y pasa lo mismo, será que este método ya no funciona en el RAD 2010?

Código Delphi [-]
type
  TDummyProp = (dummyprop);

  TIBQuery1 = class(TIBQuery)
  private
    _DummyProp: TDummyProp;

  published
     property SQL:TDummyProp read _DummyProp;
     property Database:TDummyProp read _DummyProp;
  end;

Neftali [Germán.Estévez] 04-10-2010 12:03:52

Cita:

Empezado por _cero_ (Mensaje 378127)
Edición:
Probé rápido en delphi y pasa lo mismo, será que este método ya no funciona en el RAD 2010?

Pues seguramente es un cambio en este sentido.
Con la versión 6 funciona perfectamente, en cambio con D2009 me aparece en Gris, pero aparece. :(:(

_cero_ 04-10-2010 18:38:00

Es una lástima, aunque seguiré buscando me da que tendré que conformarme con solo sobre escribirlas así al menos no causan conflicto, pero estorban y confunden en el inspector.
Pd. Parece que hay un pequeño método con un editor de propiedades, aunque en este momento ando un poco justo en los tiempos y no profundizaré (quizás para la siguiente versión de los componentes), aun así les paso el código por si a alguien más le interesa.
Código Delphi [-]
unit HideAboutProps;

// Declare a Property-Category-Class

type
  TAboutPropCategory = class(TPropertyCategory)
    // Give it a name and a description
    // Namen und Beschreibung vergeben
    class function Name: string; override;
    class function Description: string; override;
  end;

procedure Register;

implementation

// Register this new Property Category in the Delphi-IDE

procedure Register;
begin
  RegisterPropertyInCathegory(TAboutPropCategory, 'About');
end;

// Implementation of the two class functions from above
class function TAboutPropCategory.Name: string;
begin
  Result := 'About';
end;

class function TAboutPropCategory.Description: string;
begin
  // As you want it ...
  Result := 'Gives information about the author.';

end;

// To use this new category, you only have to include this unit in a package and recompile it.
// If you want, you now can hide all properties called 'About' from being displayed
// in the object inspector.


La franja horaria es GMT +2. Ahora son las 03:00:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi