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 :

[D2010] Surcharger l'évènement OnChange d'un composant héritant du TDateTimePicker


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D2010] Surcharger l'évènement OnChange d'un composant héritant du TDateTimePicker
    J'ai créé un nouveau composant héritant du TDateTimePicker.

    Lors d'un changement (de date) de l'utilisateur, je veux faire des choses.
    Donc, j'ai utilisé l'évènement OnChange :
    - Constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnChange := DateTimePickerChange;
    - L'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TDateTimePickerMaia.DateTimePickerChange(Sender: TObject);
    begin
       ...
    end;
    Le problème, c'est à l'utilisation en conception du composant.
    Si je défini (dans l'inspecteur d'objet) que je veux utiliser l'évènement OnChange, ça fonctionne bien, mais la procédure DateTimePickerChange dans mon composant n'est plus appelée.

    C'est là que je comprend que je ne m'y prend sûrement pas du tout comme il faut. Mais, je ne vois pas comment faire.
    Une idée ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Utilisez OnChange n'est pas la méthode la plus simple pour ce cas là, c'est possible, j'ai déjà surchargé des Évènements avec cette technique parce que la méthode encapsulant l'appel n'était pas virtuelle !

    Lit Classes and Objects Index - Properties (Delphi) - Property Overrides and Redeclarations


    Redéclare le OnChange complètement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    published
      property OnChange: TNotifyEvent read FOnChangeOverload write FOnChangeOverload;
    - Constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inherited OnChange := DateTimePickerChange;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TDateTimePickerMaia.DateTimePickerChange(Sender: TObject);
    begin
      ...
     
      if (FOnChangeOverload)  
        FOnChangeOverload(Sender);
     
      ...
     
    end;
    Autre technique, oublie tout le reste, repars du début !

    La méthode procedure Change; dynamic; doit pouvoir être redéfini par override ? je pratique pas le dynamic mais le virtual, ça fonctionne pareil normalement ...

    ton code ressemblerait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TDateTimePickerMaia.Change;
    begin
      ...
     
      inherited Change();
     
      ...
    end;
    C'est la vraie méthode, c'est plus court ! non ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Redéclare le OnChange complètement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    published
      property OnChange: TNotifyEvent read FOnChangeOverload write FOnChangeOverload;
    Fallait le redéclarer ...


    Citation Envoyé par ShaiLeTroll Voir le message
    Autre technique, ... C'est la vraie méthode, c'est plus court ! non ?
    C'est plus simple, et ça fonctionne.
    J'y aurrais jamais pensé.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

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

Discussions similaires

  1. [C#] [WinForms] Surcharge d'évènement
    Par stailer dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/10/2004, 19h55
  2. Récupérer événements OnChange&OnScroll de ScrollBox
    Par bohort dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/09/2004, 10h24
  3. Réponses: 7
    Dernier message: 18/12/2003, 10h23
  4. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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