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 :

Connaitre l'évenement appelant


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut Connaitre l'évenement appelant
    Bonjour à tous,

    j'ai une procedure OnPaint pouvant être appelée par 2 procédures différentes (Onclick et OnmouMove).

    J'aimerais connaitre à partir du Sender de OnPaint l'évenement qui a déclenché le OnPaint.

    J'ai essayé ceci mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Sender.ClassType=TMouseMoveEvent then
    Message : '(' attendu mais THEN trouvé

    Je pourrais me débrouiller avec une variable mais je voudrais une technique un peu plus pro et propre

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    TMouseMoveEvent c'est un pointeur de méthode, équivalent du TMethod
    ClassType renvoie un TClass, une reférence de classe !
    Cela n'est absolument pas comparable !

    Sender en plus c'est un TObject, un TForm ou un TPaintBox par exemple !
    Ensuite OnPaint ne DOIT jamais être appelé manuellement !
    Si tu veux forcer le dessin durant le OnClick ou OnMouseMove de ton contrôle, tu dois faire un Invalidate, qui va forcer le redessinement du bouton par Paint et donc l'appel à OnPaint
    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 éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Si tu veux forcer le dessin durant le OnClick ou OnMouseMove de ton contrôle, tu dois faire un Invalidate, qui va forcer le redessinement du bouton par Paint et donc l'appel à OnPaint
    oui pour cela, nous sommes bien d'accord c'est ça que je voulais dire !

    N'y a t'il donc pas moyen de récupérer l'évennement qui à provoquer l'appel de onpaint (via invalidate) ?

  4. #4
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    En fait je dois savoir si c'est le onclick ou onmousemove qui fait le invalidate.

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Pourquoi ne pas utiliser un objet intermédiaire !

    A la création de l'objet, tu lui passe le Control qu'il doit gérer !
    lors du click, tu appels une méthode de cet objet qui encpasule le Invalidate, qui met un flag Click
    lors du mouve, tu fais pareil, un flag mouve
    Lors du OnPaint, tu appels une 3 eme methode de l'objet qui regardes les flag, modifie le Canvas du Control géré, une fois traité sur les repasse à OFF
    il me semble que Invalidate produit un message, que le Paint n'est pas immédiat, du coup, tu pourrais avoir un Mouve et un Click très rapproché

    Evidement, tu peux juste mettre deux peuvres booléens dans la form !
    L'objet c'est juste un découpage, cela semble peut-être plus "pro"
    Un peu comme une séparation Vue-Controleur
    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

  6. #6
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    lors du click, tu appels une méthode de cet objet qui encpasule le Invalidate, qui met un flag Click
    pour le flag, j'ai compris ...Mais pour ce qui est de l'encapsulation du invalidate

    ca donnerait un truc du genre : ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Intermédiaire(objet);
    begin
       flag:=click;
       objet.invalidate;
    end;
    oui je sais, j'ai encore beaucoup à apprendre concernant la POO

    tu pourrais avoir un Mouve et un Click très rapproché
    exactement et cela m'ennuie beaucoup parce que un click est toujours suivi et précédé d'un mousemove !

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

Discussions similaires

  1. Connaitre l'action appellée au niveau du layout
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 22/10/2007, 21h00
  2. Réponses: 5
    Dernier message: 04/10/2007, 13h47
  3. Connaitre les évenements qu'effectue un utilisateur
    Par namstou3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/10/2007, 11h36
  4. Connaitre l'objet appelant
    Par aurelien94 dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2006, 11h51
  5. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51

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