always on top et formatage de TextField

CarmélideCarmélide Membre
09:29 modifié dans API AppKit #1
Bon, c'est la série des questions aujourd'hui...

Je voulais savoir s'il était possible de rendre son application  "always on top". Je n'ai pas trouvé de telle option dans interface builder.

Deuxieme question : j'affiche une string dans un NSTextField et je voulais savoir s'il était possible de multiplier par 2 la taille de la police et de lui ajouter un attribut bold ?
sachant qu'il est impossible de le resizer en hauteur  B)

merci.

Réponses

  • Philippe49Philippe49 Membre
    09:29 modifié #2
    dans 1234284759:

    Je voulais savoir s'il était possible de rendre son application  "always on top". Je n'ai pas trouvé de telle option dans interface builder.

    Ce serait étonnant qu'une application puisse prendre un tel pouvoir !
    Elle peut masquer les autres (menu hide et méthode dans NSApplication)
    Elle peut en lancer d'autres (NSWorkspace)
    ..

    dans 1234284759:

    Deuxieme question : j'affiche une string dans un NSTextField et je voulais savoir s'il était possible de multiplier par 2 la taille de la police et de lui ajouter un attribut bold ?
    sachant qu'il est impossible de le resizer en hauteur  B)

    Au moins, cela peut se faire par le code (méthode de NSControl dont hérite NSTextField) .
    IB propose des textField que l'on peut redimensionner : Wrapping Text Field

  • NoNo Membre
    09:29 modifié #3
    dans 1234284759:

    Je voulais savoir s'il était possible de rendre son application  "always on top". Je n'ai pas trouvé de telle option dans interface builder.


    L'application, non.
    Mais pour ses fenêtres, c'est oui.
    En modifiant le "niveau" des fenêtres (méthode setLevel: de NSWindow), tu peux faire en sorte que les fenêtres restent toujours au dessus des autres.

    Bien sûr à  manier avec précaution, sous peine de voir ton appli finir à  la poubelle par tes futurs utilisateurs.
    Ca ne peut être utile que dans le cas d'application "helper" qui fournit une palette utilisable par les autres applis.
  • CarmélideCarmélide Membre
    09:29 modifié #4
    merci Philippe pour le Wrapping Text Field, je vais zyeuter ca.

    pour le "always on top":
    ok, mon appli se resume au lancement d'une NSWindow donc ca m'arrange.
    Et c'est une demande express du "client"  ;)

    le truc c'est que je sais pas comment récupérer l'identifiant de ma fenetre... dois-je créer un nouvel outlet ?
  • Philippe49Philippe49 Membre
    09:29 modifié #5
    Quelque chose comme
    IBOutlet NSWindow * window;
    -(void) applicationWillFinishLaunching:(NSNotification*) notif {
    [window setLevel:NSFloatingWindowLevel];
    }
  • NoNo Membre
    février 2009 modifié #6
    dans 1234292771:

    Quelque chose comme
    IBOutlet NSWindow * window;
    -(void) applicationWillFinishLaunching:(NSNotification*) notif {
    [window setLevel:NSFloatingWindowLevel];
    }


    Ou plus simplement dans le awakeFromNib du contrôleur de la fenêtre (qui lui, connait l'outlet de la NSWindow).
    <br />- (void)awakeFromNib<br />{<br />&nbsp;  [window setLevel:NSFloatingWindowLevel];<br />}
    

  • Philippe49Philippe49 Membre
    09:29 modifié #7
    Hum, dans un programme bien construit, le comportement général de l'application est plus à  attribuer à  NSApplication ou à  son delegate qu'à  un NSWindowController que l'on ne définit que rarement.
  • NoNo Membre
    09:29 modifié #8
    dans 1234302904:

    Hum, dans un programme bien construit, le comportement général de l'application est plus à  attribuer à  NSApplication ou à  son delegate qu'à  un NSWindowController que l'on ne définit que rarement.


    Hum, j'ai écrit NSWindowController ?

    Quand je parle de contrôleur (note que je ne l'ai pas catégorisé), je parle bien de l'unique instance d'une classe généralement dérivant de NSObject, qui est instancié dans le mainMenu.nib, et qui dans la majeure partie des cas sert :
    - de delegate à  NSApp (via une ch'tite connexion avec File's owner),
    - de contrôleur pour les menus,
    - et enfin de contrôleur pour la ou les quelques fenêtres contenues dans ce nib.

    Et c'est comme ça que fait Apple dans la plupart de ses tutoriaux (surtout quand l'appli est mono-fenêtrée), et c'est comme ça qu'Apple nomme cet objet (disons que c'est plutôt controller).

  • Philippe49Philippe49 Membre
    09:29 modifié #9
    Certes, et c'est la casquette de App delegate qui joue ici ...
    On est d'accord, j'ai mis un peu de provoc dans le NSWindowController pour voir si tu ne dormais pas ...  :)  ::)

    Plus généralement, et pour être dans la pire des mauvaises fois   ::) , j'avoue que je mets souvent à  la place de ce Controller général un NSViewController. C'est assez pratique sachant qu'il peut se placer dans la chaà®ne des Responder, et pour une petit appli... Alors pourquoi pas un NSWindowController ?


  • CarmélideCarmélide Membre
    09:29 modifié #10
    bon, alors je n'ai peut-etre pas tout suivi...

    j'ai ajouté ce que Philippe a dit dans le spController.h:

    @interface SpController : NSObject {<br />	Sp *sp;<br />	IBOutlet NSTextField *st_name;<br />	IBOutlet NSWindow * window;<br />}<br />- (IBAction)display:(id)sender;<br />- (IBAction)loadFile:(id)sender;<br />- (void) applicationWillFinishLaunching:(NSNotification*) notif;<br />@end
    


    puis, j'ai implementé applicationWillFinishLaunching dans le spController.m :


    @implementation SpController<br /><br />-(void) applicationWillFinishLaunching:(NSNotification*) notif {<br />&nbsp;  [window setLevel:NSFloatingWindowLevel];<br />}<br />(...)<br />@end
    


    et j'ai fait un drag and drop pour lier ma fenetre a l'outlet "window" du controller vers ma fenetre dans interface builder. Ca compile ca se lance mais je n'ai pas d'effet "always on top".
  • Philippe49Philippe49 Membre
    09:29 modifié #11
    Dans IB, tu connectes le delegate de Application à  ton contrôleur
  • CarmélideCarmélide Membre
    09:29 modifié #12
    ok, c'est fait.

    mais ca reste toujours pas "on top"  :(
  • NoNo Membre
    09:29 modifié #13
    dans 1234363786:

    ok, c'est fait.

    mais ca reste toujours pas "on top"  :(


    Remplace -(void) applicationWillFinishLaunching:(NSNotification*) notif par - (void)awakeFromNib.
  • Philippe49Philippe49 Membre
    février 2009 modifié #14
    Ca devrait

    [EDIT] Hypothèse : Tu as du connecter File's Owner , et non Application
  • CarmélideCarmélide Membre
    09:29 modifié #15
    [EDIT] Hypothèse : Tu as du connecter File's Owner , et non Application


    exact !
    j'avais pris la barre de titre de la fenetre pour la connecter au controller...
    En prenant l'application ca marche beaucoup mieux !!

    merci a tous !  :adios!: :adios!: :adios!:
Connectez-vous ou Inscrivez-vous pour répondre.