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 :

[DELPHI6] et composant dérivé


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 81
    Par défaut [DELPHI6] et composant dérivé
    Bonjour,

    J'essaye de créer un composant dérivé d'un autre.
    Je sais comment ajouter des propriétés, comment ajouter des évènements mais je ne sais pas comment supprimer des évènements hérités.

    Exemple :

    Je veux créer un composant dérivé de TPanel mais je ne veux pas de la propriété héritée Color parce que color sera toujours rouge.

    Ensuite je ne veux pas non plus de l'évènement OnClick parce que OnClick aura toujours la même implémentation.

    Pourriez-vous m'indiquer comment faire ?

    Merci.

  2. #2
    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
    Tu ne peux pas "reduire" la portee d'une procedure/evenement/property.

    PAr contre pour eviter ce genre de chose, il existe souvent uen version "Custom" des classes (TCustomControl, etc ...)
    LEs classes "Custom" implemente TOUTES les fonctionnalitées de la classe dite "classique" mais avec une visibilité maximum de "Protected" (a moins que certianes fonctionnalitées soient necessairement publique)

    De ce fait, la classe custom vu de l'exterieur ne vaut pas mieux que son ancetre .. mais de l'interieur possede tout de son fils.

    LA classe classique ne fait donc que redefinir la portee des fonctionnalitees de la classe custom de Protected a public ou published.

    Donc en derivant de la classe custom, tu ne peux toujorus pas supprimer ces fonctionnalitées mais tu peux ne pas les rendre publique donc innacessible (pour le moment) a l'utilisateur. Tu pourras plus tard les rendre accessible dans une classe fille.

    Sinon il ne te reste qu'a developper une classe en partant de plus haut dans la hierarchie, puis, soit de reecrire TOUTES les fonctions que tu desires conserver .... soit de "wrapper" la classe possedant des methodes indesirable.

    "Wrapper" signifie creer en interne une instance de la classe souhaité, et de redefinir dans ta classe les memes methodes que celle de la classe souhaité, ces dernieres ne faisant que faire un appel aux methodes/Property de l'objet interne.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 81
    Par défaut
    Merci pour les informations.

    En fait le composant en question que je souhaite redéfinir est TWebBrowser.

    Par exemple il y a des méthodes comme Navigate, Navigate2 que je souhaite rendre invisible.

    Comment faire ?

    Exemple si je veux cacher GoBack je m'y prend comme suit :
    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
     
    type
      TWebTest = class(TWebBrowser)
      public
        constructor Create(Owner: TComponent); override;
      protected
        procedure GoBack;
      end;
     
    constructor TWebTest.Create(Owner: TComponent);
    begin
      inherited;
    end;
     
    procedure TWebTest.GoBack;
    begin
      inherited;
    end;
    Mais si je veux cacher Navigate on ne me le permet pas.

    Merci.

  4. #4
    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 Desraux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    protected
        procedure GoBack;
    Attention .... la tu redefini la fonction GoBack.
    Si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Var 
      Web : TWebBrowser;
      Web2 : TWebBrowser2;
     
    Web2 := TWebBrwser2.Create;
    Web := Web2;
    Web.GoBack;
    Ca marche et je dirais meme que tout code rajouté dans TWebBrowser2 ou un de ses derivés ne sera pas execute par Web.GoBack
    Or laisser protected cette methode, sous entends qu'un developpeur futur peut le remetre public .... bref un sacré boxon

    Sinon pour repondre a ta question, ya un autre thread qui est plus detaillé :
    http://www.developpez.net/forums/sho...5&postcount=11
    http://www.developpez.net/forums/sho...d.php?t=346817

Discussions similaires

  1. affichage d'une image sur un composant dérivé de JPanel
    Par milou31 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 15/09/2007, 05h47
  2. Création d'un composant dérivé d'un TextBox
    Par EFCAugure dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/08/2007, 08h57
  3. Utilisation d'un composant dérivé d'un TEdit
    Par dleu dans le forum Delphi
    Réponses: 24
    Dernier message: 24/07/2007, 17h32
  4. Création d'un composant dérivé
    Par leycho dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/12/2005, 17h22
  5. [TChart] Composant dérivé
    Par Linkin dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/01/2005, 16h34

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