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

Langage Delphi Discussion :

Affectation dynamique d'évènement


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut Affectation dynamique d'évènement
    Bonjour,

    Je souhaite créer dynamiquement des TImages lorsque je clique sur un bouton. Cela fonctionne, mais à mon grand regret je n'arrive pas à associer d'évènement OnClick. J'ai regardé le tutoriel mais rien n'y fait je ne comprends pas, voici mon code :

    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
    public
        procedure My_Click(Sender: TObject);
    end;
     
    procedure TForm1.My_Click(Sender: TObject);
    begin
        showmessage('TEST')
    end;
     
    procedure TForm1.Bouton1Click(Sender: TObject);
    var
    begin
        with TImage.Create(self) do begin
        parent := panelSalle ;
        OnClick := My_Click ;
    end;
    Cela compile et s'exécute normalement mais l'évènement n'est pas déclenché. Est-ce que vous auriez une idée ?

    d'avance !

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    une petite boulette tu n'as pas encapsulé l'ensemble de ton code With

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Bouton1Click(Sender: TObject);
    var
    begin
        with TImage.Create(self) do begin
        parent := panelSalle ;
        OnClick := My_Click ;
        End;
    end;
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 464
    Points : 24 888
    Points
    24 888
    Par défaut
    ça Compile ??? un var sans déclaration, un begin sans end; euh ça me semble peu probable !
    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

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ça Compile ??? un var sans déclaration, un begin sans end; euh ça me semble peu probable !
    Je me suis posé la même question, mais bon que voulez-vous il n'y a plus de saison.

    Il semble qu'il s'agisse ici d'une copie partielle de code pour faciliter la lecture.
    Enfin il semble .
    Décidément, il n'y a plus de saison !
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    Déplacez tout simplement la déclaration de My_click avec les déclarations de TNotifyEvent de la form

    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
     
    type
      TForm1 = class(TForm)
        //Liste des composants sur la form
        Button1 : TButton;
        Label1 : TLabel
        //ici avec tout les autres TNotifyEvent ***************
        procedure FormCreate(Sender : TObject);
        procedure My_Click(Sender : TObject); //************* ici
     
      private
     
      public
     
      end;

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Oui j'ai pas claqué tout mon code ça servait à rien j'ai mis juste les trucs qui concernaient ce dont je parle. Donc oui ça compile mais ça réagit pas à l'évènement.

    Même en déplaçant la déclaration comme tu dis pepi22...

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Quelles sont les dimensions du timage, une image est-elle chargée?

    en mettant la propriété Align à alClient, ça ne marche toujours pas?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    L'image se charge correctement c'est l'évènement qui ne fonctionne pas...

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    En prenant ton code, cela fonctionne chez moi.

    As-tu la possibilité d'envoyer le pas et le dfm?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 464
    Points : 24 888
    Points
    24 888
    Par défaut
    Bien vu pepi22, en complément, je dirais que mettre published comme ceci fonctionne aussi, en fait lorsqu'il n'y a pas de "directive" de portée, cela prend published pour les hérités du TPersistent, et public pour les hérités du TObject.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      TForm1 = class(TForm)
        //Liste des composants sur la form
        Button1 : TButton;
        Label1 : TLabel
        //ici avec tout les autres TNotifyEvent ***************
        procedure FormCreate(Sender : TObject);
      private
     
      public
     
      published
        procedure My_Click(Sender : TObject); //************* ici 
      end;
    en général, les gestionnaires d'évènements affectés à la volée je les mets à part des évènements liés avec l'IDE ...
    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

  11. #11
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    La place de la déclaration l'événement n'a aucune importance dans le cas présent, non? (quelque soit la position cela fonctionne sous delphi 7).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  12. #12
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par Linkin Voir le message
    La place de la déclaration l'événement n'a aucune importance dans le cas présent, non? (quelque soit la position cela fonctionne sous delphi 7).
    Strictement aucune importance il faut bien sur qu'elle soit "dans" la classe puisqu'il doit s'agir d'une procédure de class.
    Mais c'est tout, et pis rien d'autre, aucune importance , rien de plus rien de moins c'est tout pareil sans distinction aucune, tout pareil qu'il a dit et pis voilà c'est comme ça pas d'importance.
    enfin il me semble
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Strictement aucune importance il faut bien sur qu'elle soit "dans" la classe puisqu'il doit s'agir d'une procédure de class.
    Je me permet de nuancer : si on affecte la callback dans le code, avec une ligne du type :
    alors ca n'a effectivement aucune importance. Ca peut même être une méthode d'une autre classe ou d'un autre objet - la déclaration TNotifyEvent est simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TNotifyEvent = procedure(Sender: TObject) of object;
    Par contre, si le composant est défini uniquement à partir du dfm, le programme lira et construira le composant à l'exécution, et il cherchera les méthodes uniquement dans la section published du Form déclaré. Dans ce cas, l'erreur a lieu à l'exécution du programme - le compilateur n'affiche aucun warning.

    *LeGEC*
    *LeGEC*

  14. #14
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par LeGEC Voir le message
    Je me permet de nuancer

    Mais oui, bien sûr, il semble que je me sois emballé tel un jeune développeur fougueux.
    Ceci dit notre ami(e) Gaetch est-il plus avancé pour autant ?
    Et si il a pu corriger, alors comment ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  15. #15
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    C'est bon j'ai trouvé !

    En fait c'est juste un autre évènement qui interférait avec OnClick (OnDragDrop)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/05/2015, 06h06
  2. Réponses: 1
    Dernier message: 27/09/2006, 16h48
  3. [JS] Ajout dynamique d'événement-propriété à un td
    Par Demco dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2006, 15h07
  4. Création dynamique d'évènements
    Par thierrybatlle dans le forum Access
    Réponses: 1
    Dernier message: 14/04/2006, 19h21
  5. [POO] affectation dynamique d'une méthode à un objet
    Par Delphi-ne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/02/2006, 21h17

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