Ma Souris et NSBox

13:18 modifié dans API AppKit #1
Hello,

Je voudrais tout simplement "traquer" ma souris, et envoyer une action si la souris entre dans une NSBox. Et aussi quand elle sort.
Comme ma box est contenu ds une view, j'ai utilise la méthode addTracking.......
- (void)awakeFromNib<br />{<br />	[mainView addTrackingRect:[box1 frame] owner:self userData:(NSEvent *)NSMouseMoved assumeInside:YES];<br />}<br /><br />- (void)mouseEntered:(NSEvent *)theEvent<br />{<br />	NSLog(@&quot;entered&quot;);<br />}<br />

J'ai testé plein d'autre truc sur la même méthode mais rien n'y fait, le log ne s'affiche pas...

Merci d'avance

Réponses

  • Eddy58Eddy58 Membre
    décembre 2005 modifié #2
    J'écrirais plutot ceci : :)
    <br />- (void)awakeFromNib<br />{<br />	[mainView addTrackingRect:[box1 frame] owner:self userData:nil assumeInside:NO];<br />}<br /><br />- (void)mouseEntered:(NSEvent *)theEvent<br />{<br />	NSLog(@&quot;entered&quot;);<br />}<br />
    

    Et il ne faut pas oublier de surcharger la méthode acceptsFirstReponder de ta view en retournant YES pour accepter autre chose que les mouse-down.
  • décembre 2005 modifié #3
    Dans la mesure où ce que tu veux faire est basique, tu dois te dire que la solution EST simple. Donc plutôt que d'essayer des tas de trucs jusqu'à  en trouver un qui marche, je te conseille vraiment de lire très attentivement la description de la méthode, tu gagneras un temps fou. Parce que bon, tu as du faire combien d'essais pour arriver à  ceci, qui est un non sens:

    dans 1134309157:

    userData:(NSEvent *)NSMouseMoved


    NSMouseMoved est une constante (comparable à  un int!) de NSEvent qui est utilisée comme valeur de renvoi possible pour la méthode -type (ou pour créer un event). Donc déjà  pourquoi l'utiliser?

    Bon évidemment, ça ne compilera pas vu que void* exige un pointeur (le *), et toi tu fournis un int... Alors plutôt que de remettre en question l'utilisation de cette constante, tu la castes en NSEvent* pour que le compilo la ferme, mais ça reste complètement faux et donc ça ne peut pas aller. Ce n'est parce que le compilo dit blanc que ça l'est.

    Je dois avouer que j'ai du mal à  te cerner: tes applications sont bien dans l'ensemble, ce qui pour moi dénote une certaine aptitude à  chercher l'info, mais lorsque ça ne va pas, tu sors des trucs complètement farfelus. Tu gagnerais vraiment à  faire une petite pause objective-c, et à  prendre un bouquin de C et faire quelques programmes en ligne de commande pour acquérir des bases que tu n'aurais pas pu acquérir avec l'AppleScript (surtout en terme de rigueur). Ce que je t'ai expliqué plus haut se trouve dans n'importe quelle introduction au C, donc il y a une lacune à  ce niveau.
  • CéroceCéroce Membre, Modérateur
    13:18 modifié #4
    Je te trouve dur Renaud  :(  En plus, j'imagine qu'Eaglelouk programme avant tout pour son plaisir, et il se rend sans doute compte que ce qu'il écrit n'est pas toujours rigoureux, mais je ne crois pas qu'enseigner le C façon vieille école (et lui tapper sur les doigts à  la baguette quand il a encore osé faire un cast malheureux) soit la meilleure façon de le motiver à  bien programmer.

    J'ai moi aussi pondu de grosses bouses quand j'ai commencé, mais c'est avec l'expérience, et parce que j'y ai pris du plaisir que j'ai progressé.
    Maintenant, si t'en as marre de lui réapprendre les bases, ne le fais pas, et laisse-le se démerder, là  il va apprendre!


    P.S.: Et programmer en ligne de commande, c'est chiant.
  • 13:18 modifié #5
    Mon intention n'est pas de lui taper sur les doigts parce qu'il a osé faire un cast. ça fait quand même un petit bout de temps que je "suis" Eaglelouk, et c'est le genre de petites bourdes qu'il fait assez souvent. Mon objectif dans ce post n'était pas le moraliser, mais de lui montrer une manière de regarder ce petit exemple de manière plus critique (plutôt que de lui donner bêtement une réponse correcte et qu'il se disent: ah il faut mettre nil là  sans qu'il ne comprenne en quoi ce qu'il avait fait était "mauvais").

    Quand au plaisir de programmer, s'il arrive à  son cast par une série d'essais et erreurs je ne sais pas si à  terme il y prendra du plaisir. Passer 2 heures à  faire des essais et erreurs a sur moi un effet de ras le bol, et me donne plutôt envie de tout jeter par la fenêtre.

    Voilà  donc pour ma part, je trouve que signaler les lacunes est plus utile que de taper RTFM, puis effacer et passer au post suivant. Surtout lorsqu'il s'agit de quelqu'un qui a du potentiel. Certes faire des petits programmes en shell est pénible, mais comme il a déjà  une expérience 1. il y a des choses qu'il se contentait d'appliquer qu'il comprendra et 2. il en prendra autant de plaisir par la suite car il arrivera beaucoup plus vite à  un résultat.
  • 13:18 modifié #6
    ça a le mérite d'être clair.
    Je tiens à  dire à  tout ceux qui trouvent que Renaud est trop "agressif" sur ce coup, moi je le prend pas mal en tout cas et je trouve qu'il a clairement raison. D'ailleurs j'ai décidé, avant qu'il ne le suggère, de faire une pause ds la programmation d'applications Obj-C et étudier en profondeur la doc, relire le bouquin "Cocoa par la pratique", cours .. etc...

    @+
  • AliGatorAliGator Membre, Modérateur
    13:18 modifié #7
    dans 1134763661:

    ça a le mérite d'être clair.
    Je tiens à  dire à  tout ceux qui trouvent que Renaud est trop "agressif" sur ce coup, moi je le prend pas mal en tout cas et je trouve qu'il a clairement raison. D'ailleurs j'ai décidé, avant qu'il ne le suggère, de faire une pause ds la programmation d'applications Obj-C et étudier en profondeur la doc, relire le bouquin "Cocoa par la pratique", cours .. etc...

    @+
    Dis Renaud, tu veux pas lui dire de me donner 1000 euros ?  ;D :) :o
  • 13:18 modifié #8
    Les Cantillon d'abord.
  • AliGatorAliGator Membre, Modérateur
    13:18 modifié #9
    dans 1134765785:

    Les Cantillon d'abord.
    Ca va je suis sur la bonne voie.

    De toute façon j'ai pas dit à  quoi j'utiliserai ces 1000 roros  :p :p
Connectez-vous ou Inscrivez-vous pour répondre.