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

WinDev Discussion :

Intercepter des Evenements Windows depuis une classe


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Points : 474
    Points
    474
    Par défaut Intercepter des Evenements Windows depuis une classe
    Bonjour,

    Je me suis fait une classe pour gérer les champs tables (qui sont un peu particuliers) de mes fenêtres.

    J'ai donc une classe Table que j'instancie a chaque fois que j'ai une table sur une fenêtre et qui se charge de gérer les ancrages, le positionnement d'éléments satellites de la table, ...

    A l'instanciation de l'objet Table je veux intercepter divers événements (redimensionnement, clic, ...) pour qu'ils soient directement traités dans la classe.

    J'ai donc tenté la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :gt_evtTable=Evénement("Redim_Table",:gt_Fenetre+"."+:gt_Table, :WM_SIZE)
    Je branche donc mon évènement RESIZE sur la procédure Redim_Table.
    Le problème est que la procédure "Redim_Table" (méthode de ma classe) doit se trouver dans la fenêtre et non dans la classe... Il me met un message d'erreur comme quoi la procédure n'existe pas.

    Je tente ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :gt_evtTable=Evénement("MaclasseTable:Redim_Table()",:gt_Fenetre+"."+:gt_Table, :WM_SIZE)
    Erreur:
    La méthode 'Redim_Table()' de la classe 'MaClasseTable' n'est pas globale.
    Je ne sais pas trop comment faire ni si cela est possible de rediriger un évènement vers une méthode de classe.

    Merci de votre aide

  2. #2
    Membre confirmé Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Points : 474
    Points
    474
    Par défaut
    Ok, je suis naze ..

    En fait j'ai déclaré ma procédure "Redim_Table" en global et l'appel de procédures en global se fait avec "::"

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :gt_evtTable=Evénement("MaclasseTable::Redim_Table()",:gt_Fenetre+"."+:gt_Table, :WM_SIZE)
    Par contre vu que j'ai mis l'évenement dans le constructeur de ma table, il me fait une erreur comme quoi l'objet MaClasseTable n'est pas encore chargé..
    Simple détail qui devrait se régler rapidement ..

    Merci à moi-même (et google) je me suis auto-corrigé mon problème.

    Promis je chercherai 10 minutes de plus la prochaine fois

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Bonjour,

    Le plus simple en WinDev c'est d'avoir un tableau associatif global (mais déclaré dans la classe si vous voulez).
    Le tableau associe un nom complet de champ (..NomComplet) à un objet dynamique.
    Ensuite la méthode callback est globale, et elle utilise le tableau pour trouver l'objet visé par l'événement (grâce à ..NomComplet) et appeler la méthode membre sur cet objet.

    PS. Je vois que vous avez compris pourquoi votre code ne compilait pas, mais vous comprendrez probablement d'ici peu pourquoi une méthode globale ne fera pas l'affaire.

  4. #4
    Membre confirmé Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Points : 474
    Points
    474
    Par défaut
    Effectivement la methode globale c'est pas super super !
    Je peux même pas appeler des méthodes privées depuis ma méthode globale..

    Du coup en tâtonnant un peu j'ai réussi a brancher sur une méthode publique sans préfixer par le nom de la classe ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :gt_evtTable=Evénement(":Redim_Table",:gt_Fenetre+"."+:gt_Table, :WM_SIZE)
    Ca à l'air de bien fonctionner.

    Par contre j'ai pas bien compris votre histoire de tableau associatif.. Ca à l'air interressant pourtant
    Vous auriez un petit exemple ?

  5. #5
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Laissez tomber, je suis parti du principe que WinDev ne gérait pas ça lui-même (retrouver l'instance de l'objet sur laquelle appeler la méthode). Mais il le fait. (c'est pas marqué dans la documentation, dommage)

    Juste un conseil cependant : écrivez le nom de la méthode sans guillemets et même sans les ":", ça vous facilitera la vie.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2017, 09h53
  2. [WD16] Intercepter des Evenements Windows depuis une classe
    Par dahlback dans le forum WinDev
    Réponses: 8
    Dernier message: 15/01/2013, 13h55
  3. [JUnit] Lancer des tests JUnit depuis une classe de test
    Par naglafar dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 29/07/2008, 15h51
  4. Réponses: 4
    Dernier message: 27/07/2007, 18h18
  5. Réponses: 4
    Dernier message: 16/08/2006, 09h19

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