NSView et les Events
SpiderIncognito
Membre
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?
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?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut donc faire setAcceptsMouseMovedEvents:YES pour la fenêtre concernée et que la vue soit firstResponder.
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!!
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 ?
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.
Il faut donc implémenter dans ta sous-classe NSView :
[tt]- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal
{
†††return NSDragOperationGeneric;
}[/tt]
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
et merci aussi à toi pour ton bon de code qui nous montre comment tu as intégré la méthode à ta situation
@+