IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Héritage : Cacher les propriétés dans l'inspecteur d'objet ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut Héritage : Cacher les propriétés dans l'inspecteur d'objet ?
    Bonjour,

    Je développe un composant qui hérite d'un parent cependant mon composant a toutes les propriétés du parent qui s'affichent dans l'inspecteur d'objet.

    Est-il possible de cacher les propriétés du parent et de n'afficher que les mienne ?

    Merci,
    ZiP

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Par défaut
    Salut
    Malheureusement non, un dérivé ne peut pas diminuer la visibilité des membres d'une classe, il ne peut que l'augmenter.

    par contre, beaucoup de composants sont développé sur la base d'une classe TCustomXXX :
    Le TCustomEdit par exemple n'a que des propriétés publiques et le TEdit ne fait que dériver le TCustomEdit pour rendre publiées les propriétés publiques.
    Pour faire un TEdit avec moins de prop publiées, il suffit de dériver le TCustomEdit.
    Par contre, si ton composant de base n'est pas écrit comme çà, aucune solution possible

    JP

  3. #3
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    Le composant que je souhaite dériver est le TWSocketServer de la suite ICS.

    Je ne sais pas si il existe un TCustomWSocketServer ?

    Merci,
    ZiP

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Par défaut
    Citation Envoyé par [ZiP]
    Je ne sais pas si il existe un TCustomWSocketServer ?
    Si tu cherches la déclaration en faisant [Ctrl]+clic sur TWSocketServer, tu dois tomber sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       TWSocketServer = class(TCustomWSocketServer)
        public
            property  ClientClass;
            property  ClientCount;
            property  Client;
        published
            property  Banner;
            property  BannerTooBusy;
            property  MaxClients;
            property  OnClientDisconnect;
            property  OnClientConnect;
        end;
    Donc le TCustomWSocketServer existe bien et tu peux le dériver directement. Par contre, le TCustomWSocketServer possède déjà des propriétés publiées, et celles-là ne pourront pas être cachées.

    JP

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Si ton but est de "cacher" les proprietees du parents pour avoir uen meilleur visibilitée sur le composant, c'est un peu dangereux car il doir surement faloir en affecter ou modifier certaines.

    Par contre, si tu desire creer un composant "specifique" qui prends en compte certains reglages precis et rajoutant certianes fonctions, je peux te conseiller de creer uen classe independante de TWSocketServer mais qui possederais en isntance private un objet de type TWSocketServer.

    Ton composant le manipulerais via tems methodes/property et peut eventuelement donner un acces en lecture seule au composant TWSocketServer interne, a moins que tu ne "Wrap" les fonctions que tu souhaite exporter.

    A la limite, une version qui ne "possede" pas l'instance du socket mais dont l'instance est transmise en property peut etre interessante a envisager ...

  6. #6
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    En effet, je voudrais que mon composant est par exemple juste les propriétés suivantes :
    - Host
    - Port
    - MaxClients

    Les autres étant configurées par défaut et en arrière plan.

    Quelle méthode vous semble la plus propre et profesionnelle pour réaliser celà ?

    Citation Envoyé par Clorish
    Par contre, si tu desire creer un composant "specifique" qui prends en compte certains reglages precis et rajoutant certianes fonctions, je peux te conseiller de creer uen classe independante de TWSocketServer mais qui possederais en isntance private un objet de type TWSocketServer.

    Ton composant le manipulerais via tems methodes/property et peut eventuelement donner un acces en lecture seule au composant TWSocketServer interne, a moins que tu ne "Wrap" les fonctions que tu souhaite exporter.
    Je dédute avec les composants, as-tu une esquisse de squelette à me proposer pour me mettre sur le bon chemin ?

    Merci,
    ZiP

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Je partirais sur la version que je t'ai proposé.

    Pour moi l'interet flagrand de deriver d'une classe c'est que tout ou partie des fonctionnalitées de sa hierachie est utile.

    Sinon un erivé de TComponent fera l'affaire.
    Ca te permettra de pouvoir creer un composant generique, qui selon le derive que tu choisira, implemntera un TWServerSocket ou autre (Indy ?)

    Chose impossible tu ne pourras pas creer d'ancetre comun aux differents types de composants serveur ...

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Par défaut
    amha, s'il s'agit de faire "framework" pour n développeurs qui devront faire n écrans, je pense que l'idée de Clorish d'intégrer le TWSocketServer en interne. A toi ensuite à développer ce qu'il faut pour traiter les propriétés cachées.
    Par contre, si c'est une utilisation unique, je pense que c'est inutile ...

  9. #9
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par [ZiP]

    Je dédute avec les composants, as-tu une esquisse de squelette à me proposer pour me mettre sur le bon chemin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Class TMonServer = Class(TComponent)
    Private
      _ICSServer : TWSocketServer;
      FHost : String;
      FPort : Integer;
    Public
      Constuctor Create(AOwner : TComponent); Override;
      Destructor Destroy; Override;
      Procedure Connect;
      Procedure Disconnect;
    Published
      Property Host : String Read FHost Write FHost;
      Property Port : Integer Read FPort Write FPort;
    End;
     
    Constructor TMonServer.Create(AOwner : TComponent);
    Begin
    Inherited Create(AOwner);
    Self._ICSServer := TWSocketServer.create(...);
    End;
     
    Desturctor TMonServer.Destroy;
    Begin
    Self._ICSServer.Free;
    Inherited Destroy;
     
    Procedure TMonServer.Connect;
    Begin
    <Connection au serveur ICS en transmettant FHost et FPort>
    End;
     
    Procedure TMonServer.Disconnect;
    Begin
    <Deconnection au serveur ICS>
    End;
    Etc, Etc.

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/11/2009, 18h03
  2. Problème d'affichage de Propriété dans l'inspecteur d'objet
    Par saidus dans le forum Composants VCL
    Réponses: 8
    Dernier message: 06/04/2008, 17h36
  3. Réponses: 2
    Dernier message: 01/12/2006, 15h20
  4. [héritage] Redonner les propriétés de l'ancêtre
    Par Manopower dans le forum EDI
    Réponses: 5
    Dernier message: 23/08/2005, 14h08
  5. Comment cacher des propriétés dans un nouvel objet ?
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/10/2003, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo