Bouton custom

olofolof Membre
04:59 modifié dans API AppKit #1
'jour tous !

J'aimerais créer un bouton "custom". En fait, il s'agit simplement d'une image. Je créé donc une sous-classe de NSButton dans laquelle je déclare deux méthodes. awakeFromNib, pour charger mon image et drawRect pour afficher l'image. Et là , rien ne s'affiche.
Si, dans drawRect, je dessine un rond rouge, par exemple, ça marche. Par contre, l'affichage de mon image ne donne rien. Voici le code que j'utilise pour afficher mon image :

<br />[closeImage compositeToPoint:NSZeroPoint fromRect:aRect operation:NSCompositeSourceOver];<br />


Une idée ??

Merci !

Réponses

  • Eddy58Eddy58 Membre
    04:59 modifié #2
    Tout d'abord, pourquoi n'utilises tu pas les méthodes setImage et setAlternateImage ? ???
  • olofolof Membre
    04:59 modifié #3
    Si je ne me trompe pas, setImage permet de mettre une image sur un bouton ? Moi, j'aimerais remplacer le bouton par une image. Donc ne plus avoir le dessin en 3D qui représente le bouton.

    En fait, je fais une palette avec un look un peu à  la Aperture, tout noir, et j'aimerais que mon bouton soit plat.

    Voilà  la gueule de mon bouton : close.gif
  • 04:59 modifié #4
    L'aspect "3D" peut être modifié en jouant sur le bezel, donc si tu ne veux pas de bezel, tu fais setBezeled:NO (ou setBordured, je sais plus exactement) à  ton bouton, et comme eddy le suggère, tu peux utiliser image et alternateimage.
  • Eddy58Eddy58 Membre
    04:59 modifié #5
    Oui, j'allais le dire Renaud, mais ma fichue connexion internet m'a curieusement laissé tomber une bonne heure >:D, donc grilled d'une drôle de façon là  ;) !
    En faites à  la limite il n'y a même pas besoin de code, dans l'inspector tu mets l'image que tu veux dans icon et alt. icon, tu décoches bordered et ça doit être bon. :)
  • olofolof Membre
    04:59 modifié #6
    Ah ben c'est plus simple, y'a pas à  dire, merci !!!

    Par contre, j'ai encore un petit problème. Mon image s'affiche, par contre, quand je presse sur le bouton, j'ai un carré blanc qui s'affiche autour de mon image :

    bouton.gif

    Alors qu'à  l'ouverture de la fenêtre, c'est ok, pas de cadre.


    Merci !
  • 04:59 modifié #7
    ça arrive si tu ne définis pas d'alternate image (qui représente le bouton enfoncé)
  • olofolof Membre
    04:59 modifié #8
    J'en ai justement spécifié un... Je vérifierai ce soir si je n'ai pas fait une fausse manip dans IB...
  • olofolof Membre
    04:59 modifié #9
    Mouais, ça me parait bon dans IB :

    boutonalt.gif


    Et dans mon projet, j'ai ces deux images :

    icones.gif

    Etrange...
  • AliGatorAliGator Membre, Modérateur
    04:59 modifié #10
    Tu as essayé en PNG ?
    Tu as créé tes GIF avec quoi ?

    Nan parce que je sais que des fois y'a des GIF dont la transparence est mal gérée (en particulier dans le webkit sur les GIF animés, y'a qques soucis).
    Enfin je dis ça comme ça, on sait jamais, quoi.
  • olofolof Membre
    04:59 modifié #11
    J'ai fait les deux images de la même manière, avec Photoshop.

    J'ai fait l'essai avec du png, c'est la même chose.

    A mon avis, c'est pas un problème de transparence. Quand je clic, je vois toujours la même image, mais avec le tour blanc. J'ai l'impression qu'il ne charge pas l'image alternative... Si j'intervertis les deux images, c'est la même chose...
  • Eddy58Eddy58 Membre
    04:59 modifié #12
    Comme ta fenêtre, d'après le grab, a l'air customisée, il faudrait peut-être la rafraichir en faisant un setNeedsDisplay sur sa view quand tu cliques le bouton. :o
  • olofolof Membre
    04:59 modifié #13
    dans 1151015059:

    Comme ta fenêtre, d'après le grab, a l'air customisée, il faudrait peut-être la rafraichir en faisant un setNeedsDisplay sur sa view quand tu cliques le bouton. :o


    En effet, c'est une fenêtre custom. Et comme je n'y connais pas grand chose  ??? , elle est assez minimaliste...

    J'ai essayé de faire un setNeedDisplay sur la vue contenue dans ma fenêtre, mais ça ne change rien. Peut-être est-ce au niveau de ma fenêtre ou ma vue custom qu'il manque quelque chose...

    Pour ma fenêtre, je ne déclare que les méthodes initWithContentRect, canBecomeKeyWindow, mouseDragged et mouseDown.
    Quand à  ma vue, les méthodes awakeFromNib, drawRect
  • Eddy58Eddy58 Membre
    04:59 modifié #14
    Après essai, il s'avère que ce cadre blanc est en faites dû au comportement du bouton. Pour ne plus avoir ce cadre il faut modifier dans IB le paramètre Behavior de ton bouton en le réglant sur Momentary Change. :)
  • olofolof Membre
    04:59 modifié #15
    En effet, le carré blanc n'apparait plus, merci !

    Mais je crois que je vais revenir à  une palette standard, parce que ma fenêtre custom me pose quelques autres problèmes....


    Merci !
  • 04:59 modifié #16
    Ceci dit, il vaut mieux que tu fasses tes images en png qu'en gif: le gif n'autorise que deux niveaux de transparence (transparent ou opaque), alors que le png en autorise 256. Conséquence: en gif, tu dois faire ton image en fonction de l'arrière plan qu'il y aura derrière, alors qu'en png non (avec le png, le rond sur la capture que tu as montré sera toujours bien rond, sans effets d'escalier)
  • olofolof Membre
    04:59 modifié #17
    Ok, je prends bonne note du conseil, merci !
Connectez-vous ou Inscrivez-vous pour répondre.