Changer la couleur de fond
muqaddar
Administrateur
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 :
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?:
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 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:@"cuves"]]];<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?:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[tt]
NSWindow* result = [super initWithContentRect:contentRect
styleMask:aStyle
backing:bufferingType
defer:flag];
[/tt]
.
Tu m'expliques d'où sort aStyle et bufferingType stp ?
Ben c'est tout expliqué dans la doc de initWithContentRect
+
Chacha
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 ?
Mais si, on est rigolos
Pourtant, je lis ça dans la doc:
Et à chaque fois, le "Constants" est un hyper lien qui te donne les différente valeurs possibles...
+
Chacha
[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 ! >:(
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).
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
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
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.
.