Changer la couleur de fond

muqaddarmuqaddar Administrateur
15:15 modifié dans API AppKit #1
J'essaye de changer l'interface d'une appli en sous-classant NSWindow.

Je peux donc y mettre une couleur, ou un pattern, avec ce genre de code :

<br />- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag <br />{<br />	NSWindow* result = [super initWithContentRect:contentRect&nbsp; styleMask: nil<br />								backing: NSBackingStoreBuffered defer: NO];<br /> <br />	[result setBackgroundColor: [NSColor colorWithDeviceRed:0.90 green:0.90 blue:0.90 alpha:1.0]];<br />	//[result setBackgroundColor: [NSColor colorWithPatternImage:[NSImage imageNamed:@&quot;cuves&quot;]]];<br />	[result setLevel: NSStatusWindowLevel];<br />	[result setAlphaValue: 1.0];<br />	[result setOpaque: YES];<br />	[result setHasShadow: YES];<br />	<br />	return result;<br />}


Seulement, ma barre d'outils disparaà®t... et j'ai ce message :

ERROR: Can't have a toolbar in a window with <NSNextStepFrame: 0x3f3c90> as it's borderview

Qu'est ce qu'il faut changer ?  :why?:

Réponses

  • BruBru Membre
    15:15 modifié #2
    Essaie de changer ta première ligne en :
    [tt]
    NSWindow* result = [super initWithContentRect:contentRect
                              styleMask:aStyle
                              backing:bufferingType
                              defer:flag];
    [/tt]
    .
  • muqaddarmuqaddar Administrateur
    15:15 modifié #3
    Nikel !

    Tu m'expliques d'où sort aStyle et bufferingType stp ?
  • ChachaChacha Membre
    15:15 modifié #4
    dans 1129819768:

    Tu m'expliques d'où sort aStyle et bufferingType stp ?

    Ben c'est tout expliqué dans la doc de initWithContentRect
    +
    Chacha
  • 15:15 modifié #5
    Ou plus simplement ce sont les arguments de la méthode ;)
  • muqaddarmuqaddar Administrateur
    15:15 modifié #6
    dans 1129820338:

    dans 1129819768:

    Tu m'expliques d'où sort aStyle et bufferingType stp ?

    Ben c'est tout expliqué dans la doc de initWithContentRect
    +
    Chacha

    dans 1129820810:

    Ou plus simplement ce sont les arguments de la méthode ;)


    Vous n'êtes pas marrants. >:D
    Evidemment que j'ai regardé cette méthode dans la doc avant de demander, et tester des tas de constantes... Reste que aStyle, je ne l'ai trouvé nulle part. Ni bufferingType...

    Bon, en fait, ces quoi ces paramètres qui correspondent à  une sorte de nil (j'ai l'impression) ? Où trouver leur nom ?
  • ChachaChacha Membre
    octobre 2005 modifié #7
    dans 1129822213:

    Vous n'êtes pas marrants. >:D

    Mais si, on est rigolos >:)


    Evidemment que j'ai regardé cette méthode dans la doc avant de demander, et tester des tas de constantes... Reste que aStyle, je ne l'ai trouvé nulle part.

    Pourtant, je lis ça dans la doc:

    The styleMask argument specifies the receiver?s style. Either it can be NSBorderlessWindowMask, or it can contain any of the options described in ?Constants?, combined using the C bitwise OR operator.
    ...
    The backingType argument specifies how the drawing done in the receiver is buffered by the object?s window device, and possible values are described in ?Constants?.

    Et à  chaque fois, le "Constants" est un hyper lien qui te donne les différente valeurs possibles...

    +
    Chacha
  • 15:15 modifié #8
    Mais regarde le prototype de la méthode:
    [tt]- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag [/tt]

    Inutile de chercher plus loin...
  • muqaddarmuqaddar Administrateur
    15:15 modifié #9
    dans 1129822825:

    Mais regarde le prototype de la méthode:
    [tt]- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag [/tt]

    Inutile de chercher plus loin...


    Bein justement, dans ma doc :

    [tt]- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag[/tt]

    Je suis pas débile non plus !  >:(
  • octobre 2005 modifié #10
    Dans le code que tu as mis dans le premier message (et donc celui qui est dans ton programme j'imagine), ce n'est pas ça...

    Pour info, tu peux changer le nom des arguments dans l'implémentation, donc tu peux très bien déclarer une méthode comme ça:
    -(void)addObject:(id)anObject;
    l'implémenter comme ça:
    -(void)addObject:(id)anObject {
    ou comme ça:
    -(void)addObject:(id)obj {
    ou encore comme ça:
    -(void)addObject:(id)nfkjdsnfkjsdnffnskjnfkdsjnfkdsj {

    La seule chose qui compte est que les types des arguments correspondent, mais leur nom, on s'en fout (enfin, dans la mesure où ces noms ne sont pas identiques à  ceux de variables existantes).
  • ChachaChacha Membre
    15:15 modifié #11
    dans 1129823490:

    [tt]- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag[/tt]


    Ah, d'accord, je comprends mieux le quiproquo !
    Comme le dit Renaud qui m'a grillé, effectivement, le nom du paramètre (après les deux-points) n'a aucune importance. Par contre son label (avant les deux-points), lui, ne peut être changé. Du coup, ta question portait sur le aStyle, alors que nous, nous répondions sur sa valeur.

    +
    Chacha
  • muqaddarmuqaddar Administrateur
    15:15 modifié #12
    Oui, ok.

    Il y avait quiproquo en effet.
    Cela dit, le code d'en haut avait été copié sur un vieil exemple Apple.

    Or, pour chercher des constantes adéquates, j'ai fait appel à  la doc Apple, avec le nouveau code pour le prototype. D'où ma première question. :)

    merci
  • BruBru Membre
    15:15 modifié #13
    dans 1129819768:

    Nikel !
    Tu m'expliques d'où sort aStyle et bufferingType stp ?


    Il n'y a rien à  expliquer.

    Quand tu décides de surcharger une méthode (en l'occurence initWithContentRect:styleMask:backing:defer:), il faut généralement que tu appelles la même méthode mais avec super. Ca c'est ok, tu l'as fait en première ligne.

    Mais il ne faut pas oublier de passer les mêmes paramètres entre la méthode surchargée et la méthode pour super, ce que tu as oublié de faire.

    aStyle et bufferingType sont reçus en paramètre par ta méthode initWithContentRect:styleMask:backing:defer:, et ils sont renvoyés tels quels à  la méthode initWithContentRect:styleMask:backing:defer: de super.

    .
Connectez-vous ou Inscrivez-vous pour répondre.