code simple pour récuper évènement souris
prepa75
Membre
Bonsoir à tous,
aprés avoir fouiné sur tout le forum mais sans succés, je recherche un code simple pour récupérer un évènement de la souris.
voici un essai non concluant qui est censé me dire lorsque je clique avec la souris. Pouvez vous me dire d'ou vient le problème ?
j'ai essayer de me servir du chapitre 18 de Hillegass mais je ne comprend pas d'ou vient le problème.
dans IB, j'ai créer une NSView a l'intérieur de la NSWindow d'origine.
mon .m
mon .h
aprés avoir fouiné sur tout le forum mais sans succés, je recherche un code simple pour récupérer un évènement de la souris.
voici un essai non concluant qui est censé me dire lorsque je clique avec la souris. Pouvez vous me dire d'ou vient le problème ?
j'ai essayer de me servir du chapitre 18 de Hillegass mais je ne comprend pas d'ou vient le problème.
dans IB, j'ai créer une NSView a l'intérieur de la NSWindow d'origine.
mon .m
#import "testViewAppDelegate.h"<br /><br />@implementation testViewAppDelegate<br /><br />@synthesize window;<br /><br />- (void)awakeFromNib<br />{<br />[window setAcceptsMouseMovedEvents:YES]; //j'ai essayer d'intervertir les trois mais sans succes...<br />[[window contentView] addSubview:view];<br />[window makeFirstResponder:view];<br /><br />}<br /><br />- (void)mouseDown:(NSEvent *)theEvent<br />{<br /> NSLog(@"mouseDown");<br />}<br /><br />@end<br />
mon .h
#import <Cocoa/Cocoa.h><br /><br />@interface testViewAppDelegate : NSObject <NSApplicationDelegate> {<br /> NSWindow *window;<br /> <br /> IBOutlet NSView *view;<br />}<br /><br />@property (assign) IBOutlet NSWindow *window;<br /><br />@end<br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si je comprends bien, tu attends que mouseDown: soit appelé sur un NSObject !
Tu vas pouvoir attendre longtemps
Que veux-tu faire exactement ?
Dans IB, tu ajoutes une NSView à la fenêtre et tu la changes en MyView
Dans MyView, tu implémentes mouseDown:
Et voilà !
test_mouseAppDelegate.h :
test_mouseAppDelegate.m
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html
je possède 3 NSTextfield dans une NSWindow et j'ai besoin de savoir quel Textfield est le FirstResponder (celui qui est entouré d'un halo bleu) lors d'un click de souris.
Vous pensez que c'est faisable ? parsque j'ai beau étudier les méthodes de NSResponder, NSWindow et NSTextField je ne trouve pas.
il y a juste la méthode -first responder qui est dans NSWindow qui peut parraitre interessante mais je n'arrive pas a l'utiliser correctement.
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSControlTextEditingDelegate_Protocol/Reference/Reference.html
- (NSResponder *)firstResponder (NSWindow)
Pour forcer un control à devenir firstResponder:
- (BOOL)makeFirstResponder:(NSResponder *)aResponder (NSWindow)
Pour des TextFields la méthode déléguée la plus utilisée est :
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
C'est grâce à cette méthode que l'on met à jour le "Model" de l'application.
Il est parfois utile de forcer un "end editing" pour un TextField, pour cela on peut utiliser:
- (BOOL)makeFirstResponder:(NSResponder *)aResponder (NSWindow)
avec nil comme paramètre.
Pour savoir lequel est entouré d'un halo bleu il faut implémenter dans le delegate du TextField la méthode controlTextDidBeginEditing.
La chose que j'ai eu du mal à comprendre avec les NSTextFields c'est qu'ils sont surtout Fields et très peu Text. Gérer le texte est un gros travail, les textFields peuvent être nombreux et ça occuperait beaucoup de mémoire si chacun devait embarquer les capacités d'édition de texte.
Cocoa utilise un objet, une NSTextView spécialisée pour interpréter les touches tabulation | entrée | retour chariot, qu'il appelle le Field Editor possédé par la NSWindow. À chaque fois qu'un NSTextField récupère le focus la fenêtre vient plaquer dessus ce Field Editor avec le texte du contrôle dedans et c'est lui qui reçoit les événements tant qu'on est dans le champ.
Cet objet est accessible dans les méthodes déléguées du NSTextField, il est dans le dictionnaire userInfo de la notification avec la clef @NSFieldEditor