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

  1. #1
    Membre averti
    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
    Points : 381
    Points
    381
    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 habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    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
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  3. #3
    Membre averti
    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
    Points : 381
    Points
    381
    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 habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    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
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  5. #5
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    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 ...
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Membre averti
    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
    Points : 381
    Points
    381
    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 chevronné
    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
    Points : 2 158
    Points
    2 158
    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 ...
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    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 ...
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  9. #9
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    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.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  10. #10
    Membre averti
    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
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    C'était surtout pour l'esthétique et la simplicité d'utilisation.

    Citation Envoyé par J-P-B
    Par contre, si c'est une utilisation unique, je pense que c'est inutile ...
    Je pense que tu as raison. Je pense que je vais le laisser comme celà...

    Merci,
    ZiP

  11. #11
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par J-P-B
    Par contre, si c'est une utilisation unique, je pense que c'est inutile ...
    Dans ce cas la version "compo" de la chose est elle aussi inutile "amha"
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  12. #12
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par [ZiP]
    Bonjour,
    Une fois au debut du premier message est suffisant je pense

    Citation Envoyé par [ZiP]
    C'était surtout pour l'esthétique et la simplicité d'utilisation.
    Moi je pense a un autre type de cas : Le jour ou tu vas changer pour X ou Y raison de composant serveur.
    C'est parfoit utile d'encapsuler une classe dans une de tes classes de maniere a ce que tout changement de composant n'entraine qu'une modification de ton compo a toi et non une modification de tous les appels/types de l'application.
    Si tu manipule dans ton programme une classe a toi, les appels seront toujours les memes, reste plus qu'a les "connecter" au nouveau compo.

    MAis la encore ca a ses limites en fonction du niveau de l'applciation.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  13. #13
    Membre averti
    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
    Points : 381
    Points
    381
    Par défaut
    En fait, je souhaite faire un IRCd à base de TWSocketServer.

    Le composant gérant directement la détection des commandes et des paramètres.

    Il n'y aurait plus que l'implementation de chaque commande et l'ajout de fonctionnalités éventuelles à faire pour l'utuilisateur.

    Citation Envoyé par Clorish
    Une fois au debut du premier message est suffisant je pense
    C'est une mauvaise habitude que j'ai ^^

    ZiP

  14. #14
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par [ZiP]
    Il n'y aurait plus que l'implementation de chaque commande et l'ajout de fonctionnalités éventuelles à faire pour l'utuilisateur.
    utilisateur Tiers = Diffision de la classe donc pour moi composant.
    Si tu veux garder un certain controle sur ce qui se passe, je te conseille vivement d'encapsuler le TWServerSocket dans une de tes classes, ne laissant a l'utilisateur que le stricte necessaire.

    1 - Ton compo en sera d'autant plus simple a manier que l'utilisateur final sera d'autant moins perdu au milieux de toutes les fonctionnalitées.

    2 - Tu peux recuperer les gestionnaires d'evenements sans avoir a surcharger les methodes les applelants.

    3 - Tu eviteras de truffer le code de "tests" pour eviter les erreurs de manipulations "au cas ou" l'utilisateur modifierais une property du TWServerSocket qu'il ne devrait pas modifier.

    4 - Cette raison est directement lié a la precedente : ainsi d'avoir de toute maniere a surcharger et reecrire les methodes du TWSocketServer.
    Effectivement si l'utilisateur modifie de port par exemple tu seras peut etre amené a devoir detecter ce changement pour maintenir uen certainte coherence aupres de certaines fonctionnalités que tu as rajouté au composant de base.

    5 - Encore une fois, si tu decide pour X ou Y raison de changer de server .. ton utilisateur n'aura pas a changer son programme

    6 - J'en oublie surement
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  15. #15
    Membre averti
    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
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par Clorish
    je te conseille vivement d'encapsuler le TWServerSocket
    Donc de créer un composant qui n'hérite pas du TWocketServer mais qui en créé une instance cachée et l'utilise ?

    Merci pour votre aide,
    ZiP

  16. #16
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    vala t'as tout compris

    Maintenant ce n'est qu'un avis personnel, basé sur une vision assez reduite de tes besoins.

    L'idee est lancée, et a toi de t'assurer qu'elle colle quand meme bien a tes besoins reels
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    En règle générale, je suis partisan du composant, mais il faut aussi faire gaffe à la composantonite ... sur une application unique possédant un seul composant d'accès au réseau, pour moi faire un compo sert peu:
    Si on doit changer de compo, le travail devra de toute façon être fait 1 fois : soit dans composant, soit dans le projet ... et je pense amha que c'est moins agréable à faire dans un composant wrappeur ... pour une utilisation unique

    Après c'est un bon exercice
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  18. #18
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par J-P-B
    En règle générale, je suis partisan du composant, mais il faut aussi faire gaffe à la composantonite ... sur une application unique possédant un seul composant d'accès au réseau, pour moi faire un compo sert peu:
    Si on doit changer de compo, le travail devra de toute façon être fait 1 fois : soit dans composant, soit dans le projet ... et je pense amha que c'est moins agréable à faire dans un composant wrappeur ... pour une utilisation unique

    Après c'est un bon exercice
    Tout a fait d'accord
    Mais encore uen fois avec un bemol : Decouper son code peut etre aussi une question de lisibilité.

    Je creer souvent des compos, ou simple methdoes a usage unique, pour bien structurer mon code, regroupper ce qui est commun sous un meme objet (methode) et eviter de surcharger trop certains composants/Classes/Methodes.

    La lisibilité d'un code source est une chose a ne pas négliger.

    Mais dans le cas present, un "wrapper" n'est pas utile, tout au mieux un derivé pour simplifier certains traitements.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Clorish
    La lisibilité d'un code source est une chose a ne pas négliger.
    Tout à fait d'accord
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  20. #20
    Membre averti
    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
    Points : 381
    Points
    381
    Par défaut
    Merci pour toutes ces informations, je vais donc commencer à développer tout ça.

    ZiP

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