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 :

[D7] Astuce TPanel


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut [D7] Astuce TPanel
    Comment faire pour créer un composant TPanel qui n'accepte qu'un certain type de controle ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Voulez vous parler d'un dériver de TPanel qui ne pourrait être parent que de certain type de controle ?

    Si c'est le cas vous devez écrire un composant dérivé de TCustomPanel et récrire la procédure InsertControl (qui vient de TWincontrol).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TWinControl.InsertControl(AControl: TControl);

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut
    Il est impossible de surcharger la procedure InsertControl car elle n'est pas virtuelle.

    Voilà une tentative malheureuse :

    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
    unit ButtonsPanel;
     
    interface
     
    uses
      SysUtils, Classes, Controls, ExtCtrls;
     
    type
      TButtonsPanel = class(TCustomPanel)
      private
        { Déclarations privées }
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        procedure InsertControl(AControl: TControl); overload;
      published
        { Déclarations publiées }
      end;
     
    implementation
     
    procedure TButtonsPanel.InsertControl(AControl: TControl);
    begin
      if AControl.ClassName = 'TSpeedButton' then
      begin
        inherited InsertControl(AControl);
      end;
    end;
     
    end.

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par Herk77
    Il est impossible de surcharger la procedure InsertControl car elle n'est pas virtuelle.
    Effectivement.
    Citation Envoyé par Herk77
    Voilà une tentative malheureuse :
    Même si InsertControl aurait été surchargeable, ton code n'aurait pas marché
    Il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure MaProcedure(...); override;
    overload sert à déclarer 2 fonctions de même nom différenciée par leurs paramètres et/ou leur résultat
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut
    Citation Envoyé par Pedro
    overload sert à déclarer 2 fonctions de même nom différenciée par leurs paramètres et/ou leur résultat
    ça je le sais

    mais je peux pas faire de override de InsertControl du coup j'ai tenté ma chance

    donc il n'y a pas moyen d'obtenir ce que je veux ?!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 36
    Par défaut
    Regarde du coté de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure ValidateInsert(AComponent: TComponent); override;
    Extrait de l'aide :

    ValidateInsert ne fait rien dans Tcomponent.Les classes descendantes peuvent la surcharger pour empêcher qu'un composant accepte l'insertion d'un objet sous forme d'enfant.Par défaut,ValidateInsert permet l'insertion de tout objet dans le composant.

    Si un composant a besoin de ne valider que certains objets,les classes descendantes peuvent surcharger ValidateInsert pour filtrer ces objets.Pour empêcher une insertion,déclenchez une exception dans la méthode dérivée.

    Voilou
    @+
    Birdyz

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Docs, Tutoriels et astuces Tomcat et JBoss (US)
    Par Ricky81 dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/03/2009, 21h00
  2. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  3. Astuces XML/XSLT
    Par haypo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/06/2003, 08h42
  4. Réponses: 2
    Dernier message: 06/03/2003, 16h37
  5. [c++ builder] creation de surface sur TPanel
    Par JEG dans le forum DirectX
    Réponses: 7
    Dernier message: 23/09/2002, 22h41

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