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

Composants VCL Delphi Discussion :

[Property] Modification de propriété heritée


Sujet :

Composants VCL Delphi

  1. #1
    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 [Property] Modification de propriété heritée
    Je derive un composant de TCustomLabel.

    J'ai besoin de basculer la prop Caption en lecture seule ou de modifier les fonctions de controle (Set et Get Caption)

    Mon souci : les fonctions Set et Get definie dans le composant sont private donc non surchargeables.

    Comment je peux modifier le comportement en lecture et ecriture de ma prop sans acces a ces fonction ?

    (J'ai 2/3 pistes mais j'aimerais avoirs vous avis pour choisir la plus "pro" ^^)
    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

  2. #2
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Méthode directe: déplacer les méthodes de private vers protected dans stdctrls.pas elles deviennent surchargeables

    J'ai "personnalisé" comme ça plusieurs fichiers et ça tourne bien
    7 fois à terre, 8 fois debout

  3. #3
    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
    Ouais ... ca semble bien .. mais j'ai voulu faire un truc du genre une fois mais ca m'a fait une erreur lorsque j'ai utilise un autre composant se basant sur celui ci.

    Genre :
    JE recompile l'unite stdCtrl apres modification de TLabel.
    Je cree une instance d'un autre composant (EditLAbel par ex) qui contien une var de type TLabel mais donc la classe ne se situe pas dans StdCtrls donc n'a pas ete recompilé.

    Le message : <Classe> a ete compilé avec une ancienne version de TLabel. Compilation impossible.
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Ca me semble bien barbare comme technique.

    Pourquoi ne pas redéclarer les propriétes ? Regarde le tutorial ci-dessous (evenement ou propriété, c'est le même principe)
    http://phidels.com/php/index.php3?page=composan/modifevn.htm

  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
    Ouaip .. Cette Methode je connait ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Property Caption : TCaption Read GetMyCaption Write SetMyCaption;
    Mais je souhaite aussi effectuer le traintement de base du caption

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Procedure SetMyCaption(s : TCaption);
    Begin
    <Mon Traintement>
    SetCaption(s);   // Methode Write du caption herité
    End;
    Or cette methode private n'est pas accessible
    donc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Procedure SetMyCaption(s : TCaption);
    Begin
    <Mon Traintement>
    Inherited Caption := S;
    End;
    Mais ca me plait pas

    Donc je cherchais mieux ^^
    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 habitué
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Tu peux déclarer dans ton composant la classe TCustomLabel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TMonCustomLabel : TCustomLabel
    Là, les propriétés protected seront accessibles.

    A+
    Cyril

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    si c'est pour le caption de ton Tlabel
    il faut remonte bien plus haut, au tcontrol
    et que voie ton, la methode SetTextBuf qui est public

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TControl.SetTextBuf(Buffer: PChar);
    begin
      Perform(WM_SETTEXT, 0, Longint(Buffer));
      Perform(CM_TEXTCHANGED, 0, 0);
    end;
    en fait deux solution peuvent donc etre envisage a ton probleme
    soit tu intercepte le message WM_SETTEXT et tu fait ce qui te plait
    soit tu redefinie settexbuf de l'ancetre

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Il me semble quand même que ceci devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TMyLabel.SetCaption(New : string);
    begin
      inherited Caption := New;
      // Ce que tu veux faire de plus
    end;
     
    function TMyLabel.GetCaption : string;
    begin
      Result := inherited Caption;
      // Ce que tu veux faire de plus
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  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 cyril
    Là, les propriétés protected seront accessibles.
    Tu derive ton compo de TCustomLabel tu accede aussi au protected .... ce n'ets pas a ce niveau que se pose le probleme .. mais au niveau des Privates.
    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 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 anapurna
    et que voit ton la methode SetTextBuf qui elle est public
    J'avais pas remarqué aue SetTextBuff agit sur la var Private fCaption

    Citation Envoyé par sjrd
    procedure TMyLabel.SetCaption(New : string);
    begin
    inherited Caption := New;
    // Ce que tu veux faire de plus
    end;

    function TMyLabel.GetCaption : string;
    begin
    Result := inherited Caption;
    // Ce que tu veux faire de plus
    end;
    C'est ce que je fait .. mais cette methode me plaisait pas.

    MErci a tous .. vais me debrouiller avec la combinaison de plusieurs de ces methdoes.
    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

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

Discussions similaires

  1. Modification des propriétés CSS
    Par popy67 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2008, 17h49
  2. Réponses: 4
    Dernier message: 11/01/2008, 10h34
  3. [MSForm] Modification des propriétés de contrôles
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/09/2007, 11h50
  4. [Properties] Modif d'un fichier properties avec Commentaires
    Par snetechen dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/10/2006, 16h00
  5. [VB6] Modification des propriétés d'un objet de form dans un module
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 09/06/2006, 09h46

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