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

Outils Delphi Discussion :

[XE2] [Graphics32 1.9.1] [TImageView32] [MouseEvents]


Sujet :

Outils Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut [XE2] [Graphics32 1.9.1] [TImageView32] [MouseEvents]
    Bonjour,

    Je viens de passer :
    • de Dephi 7 & Graphics32 1.8.2
    • à Delphi XE2 & Graphics32 1.9.1.


    Or, j'ai remarqué une différence de comportement gênante sur le l'évènement OnMouseUp de l'ImageView32 lors de deux clics rapides sur le même calque :
    • Avant : Nous passions deux fois dans la méthode évènementielle avec pLayer pointant sur le calque cliqué à chaque appel.
    • Maintenant : Il s'intercale au milieu des deux passages normaux, un troisième appel de la méthode évènementielle avec pLayer à nil !?...


    Cet appel clandestin de OnMouseUp contrarie fortement mes algorithmes et je ne comprends pas pourquoi il y a ce troisième évènement...

    Constatez-vous ce phénomène vous aussi ? Quelqu'un peut-il m'expliquer pourquoi et comment s'en débarasser ?

    Par avance, merci
    JB.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    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 094
    Par défaut
    En quoi cela peut-il contrarier tes algorithmes ?
    il te suffit de rajouter dans le OnMouseUp un test if Assigned(pLayer) then pour filtrer les évènements non désirés !

    Sinon, ce n'est pas dans la bonne section "Outils" c'est plutôt des trucs comme InnoSetup, toi là c'est plus un problème de SDK, j'ai toujours dit qu'il manquait une section "Composants Tiers VCL" et "Composants Tiers FMX"
    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 confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Salut,

    J'ai bien cherché le bon forum où mettre mon topic... après hésitation, celui-ci m'avait semblé être le bon endroit.

    Je ne peux pas simplement ignorer l'évènement quand le pLayer est à nil car j'exploite ce cas dans la même méthode évènementielle pour détecter si l'utilisateur a cliqué dans un espace vierge de tout calque dans l'ImageView32. Ici, l'évènement se déclenche comme si l'utilisateur avait cliqué dans le vide, sauf que ce n'est pas réellement le cas. L'utilisateur à juste fait un "double-clic" sur le calque...

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    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 094
    Par défaut
    Tu n'es pas le premier à le signaler

    Sinon le TImgView32 possède un OnClick et OnDblClick, je suppose que l'absence du Layer te pèse, donc tu passe par OnMouseUp pour avoir le Layer cliqué !

    Utilise FindLayerAtPos (méthode protégée de Layers) que l'on peut hacker, d'ailleurs, ils utilisent eux-même cela pour simuler une classe amie entre TImgView32 et TLayerCollection !

    Si il le font pourquoi se gêner, c'est vraiment des trucs pour faire chier l'utilisateur ça, une fonction typique comme GetItemAt de la TListView et non, ces c**s de Graphics32 ne trouve pas meilleure idée que de la cacher !

    FindLayerAtPos n'est finalement qu'une boucle sur Layers qui test si X et Y sont dans le Bound Rect d'un TPositionedLayer

    Faudrait voir mais Layers.MouseListener pourrait être le Layer en cours de Click !

    Sinon, tu ne devrais pas plutôt utiliser le OnMouseUp du TCustomLayer ?
    Ainsi tu n'auras les clics que sur tes calques et non sur le TImgView32

    Au moment de l'ajout de Layers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i := 0 to Layers.Count - 1 do
      Layers.Items[i]. OnMouseUp = LayerMouseUp;
    Sender sera ton Layer
    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

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Merci ShaiLeTroll pour ton lien sur SourceForge. Savoir que c'est un bug déjà officiel ne m'aide pas à résoudre mon problème, mais au moins, je comprends mieux ce qu'il se passe, et c'était déjà la moitié de ma demande

    Maintenant, a moi de choisir comment j'avance pour restaurer la fonction dans mon logiciel

    Merci pour ton aide
    Jb

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2005, 18h30
  2. [MouseEvent] arret de souris = repaint() ?
    Par n00bi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/06/2005, 11h38
  3. [Débutant]MouseEvent et InputEvent
    Par lejimi dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/11/2004, 19h41
  4. [Java2D]MouseEvent sur un paint Graphics g
    Par tahiti bob dans le forum 2D
    Réponses: 9
    Dernier message: 09/10/2004, 22h15
  5. Réponses: 7
    Dernier message: 03/08/2004, 16h33

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