NSView et les Events

12:37 modifié dans API AppKit #1
Bonjour,

Je suis nouveau en programmation sur cocoa et Objective C et je rencontre une difficulté avec NSView :

NSView héritant de NSResponder est sensé géré tous les évenements souris tel le mouseUp, mouseDown,mouseWheel ce qu'il fait tres bien, par contre il semble ne pas gérer le mouseEntered,mouseExited,mouseMoved,mouseDragged...
Y a t-il une raison ou ai-je manqué quelque chose?

Réponses

  • mpergandmpergand Membre
    12:37 modifié #2
    Tu devrais trouver ton bonheur ICI

    Il faut donc faire setAcceptsMouseMovedEvents:YES pour la fenêtre concernée et que la vue soit firstResponder.
  • 12:37 modifié #3
    Merci pour la réponse mais ca ne marche toujours pas voila ce que j ai écris :
    au chargement de la fenêtre :
    - (void)awakeFromNib

    BOOL aBool;
    aBool=[mainWindow makeFirstResponder:myView];
    [self setupToolbar];
    [mainWindow setAcceptsMouseMovedEvents:YES];
    }
    et dans la view :
    - (void)mouseMoved:(NSEvent *)anEvent
    {
    NSLog (@Mouse mouseMoved);
    }
    je n ais jamais le message dans le log pour cet evenement mais bien pour les clics!!

  • ClicCoolClicCool Membre
    12:37 modifié #4
    Il semble que ce que tu veuilles en fait c'est "traquer" l'entrée ou la sortie de la souris dans une (des) aire(s) précise(s) de ta View.
    Alors c'est peut-être addTrackingRect:owner:userData:assumeInside: method qu'il te faut.

    Plus de détails par là:
    http://developer.apple.com/documentation/Cocoa/Conceptual/BasicEventHandling/Tasks/HandlingMouseTracking.html#//apple_ref/doc/uid/20000907

    c'est bien ça ?
  • 12:37 modifié #5
    Salut,
    C est exactement ce que je veux faire, pouvoir détecter l'entrée et la sortie du curseur sur ma view afin de déclencher l'ouverture si necessaire d'un drawer.

    Je vais essayer le addTracking et vous tiens au courant de la suite des "events"

    Merci beaucoup.
  • BruBru Membre
    12:37 modifié #6
    Pour mouseDragged, il faut que ta view soit déclarée comme NSDraggingSource.
    Il faut donc implémenter dans ta sous-classe NSView :

    [tt]- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal
    {
    †† †return NSDragOperationGeneric;
    }[/tt]
  • 12:37 modifié #7
    SUPER!! ca marche très bien, maintenant je détecte bien l'entrée et la sortie du pointeur!!

    dans ma view :
    - (void)awakeFromNib
    {
    NSRect  r;
    NSTrackingRectTag tracking_tag;

    r = [self bounds];
    r = [self visibleRect];
    tracking_tag = [self addTrackingRect:r
    owner: self
    userData: 0
    assumeInside: FALSE];
    }
    Encore merci
  • ClicCoolClicCool Membre
    12:37 modifié #8
    Heureux d'avoir pu t'aider
    et merci aussi à toi pour ton bon de code qui nous montre comment tu as intégré la méthode à ta situation :)
    @+
Connectez-vous ou Inscrivez-vous pour répondre.