Histoire de fenêtre

gibet_bgibet_b Membre
octobre 2006 modifié dans API AppKit #1
Salut à  tous,

Quelques questions de bases, pour changer  :)

Je suis en train de corriger les bugs de MeNotes. Et il y a deux bugs avec lesquels je me bats particulièrement :

- Comment forcer la boite de préférence à  s'afficher en premier plan (ce n'est en effet pas le cas, si la dernière appli utilisé n'est pas MeNotes) ? Pour l'instant, pour ouvrir la fenêtre, j'utilise :
[preferenceController showWindow:self];


- Comment faire pour redonner le focus à  un contrôle ? Lorsque j'ouvre la fenêtre d'édition/création de note la première fois, pas de problème, le focus est sur le champs "Titre". Mais la deuxième fois, il est sur le dernier utilisé (en l'occurence, le plus souvent, le champs "Message". J'utilise pour ouvrir cette fenêtre :
[noteWindow center];<br />[noteWindow makeKeyAndOrderFront:self];<br />[NSApp activateIgnoringOtherApps:YES];


Et pour la fermer :
[noteWindow orderOut:sender];


Peut-être que  je n'utilise pas les bonnes méthodes pour ouvrir et fermer les fenêtres ? Ma méthode n'est peut-être pas "propre"...???

Merci d'avance !

Réponses

  • BruBru Membre
    02:24 modifié #2
    dans 1161767487:

    - Comment faire pour redonner le focus à  un contrôle ? Lorsque j'ouvre la fenêtre d'édition/création de note la première fois, pas de problème, le focus est sur le champs "Titre". Mais la deuxième fois, il est sur le dernier utilisé (en l'occurence, le plus souvent, le champs "Message". J'utilise pour ouvrir cette fenêtre :


    Le "focus" pour un contrôle se donne tout simplement en le mettant firstResponder :
    [maFenetre makeFirstResponder:monControle];
    ou
    monControle window] makeFirstResponder:monControle];[/b]<br /><br />Dans ton cas, tu peux aussi faire un :<br />[b][maFenetre makeFirstResponder:[maFenetre firstResponder;
    ce qui remet le focus sur le premier contrôle de la fenêtre (que tu définis généralement dans IB en connectant FirstResponder à  ton contrôle, si ce n'est fait automatiquement)
    Insère cette méthode avant le makeKeyAndOrderFront:.

    Ce qu'il faut savoir, c'est qu'une fenêtre qui est fermée (donc plus à  l'écran) existe toujours.
    Donc, elle reste dans l'état où elle était avait sa "disparition" (par un orderOut: généralement).
    Il faut donc réinitialiser un certain nombre de choses au moment de la faire réapparaà®tre pour retrouver son état initial.

    Sinon, pour tes problèmes de fenêtres et de premier plan, je n'ai pas vraiment compris.

    .
  • gibet_bgibet_b Membre
    02:24 modifié #3
    Merci Bru pour ces explications.

    Pour l'histoire de fenêtre, voilà  ce qui se passe. MeNotes est une application qui n'a pas d'icônes dans le dock ni de menu "traditionnel". Il s'agit d'un menu qui vient se placer dans la barre de menu, à  gauche de l'heure.

    Si je crée une note et que j'affiche le panneau de préférence (en cliquant sur l'icone de l'appli dans la barre de menu et choisissant "Préférences"), celui-ci s'affiche au premier plan. Si je suis sur safari (ou une autre application) et que je demande (de la même manière) à  afficher le panneau de préférence, celui-ci s'affiche derrière safari.

    Pour mieux comprendre comment est fait MeNotes, tu peux regarder les copies d'écran sur cette page, voir l'installer.

    Merci encore !
  • BruBru Membre
    02:24 modifié #4
    dans 1161789076:

    Pour l'histoire de fenêtre, voilà  ce qui se passe. MeNotes est une application qui n'a pas d'icônes dans le dock ni de menu "traditionnel". Il s'agit d'un menu qui vient se placer dans la barre de menu, à  gauche de l'heure.


    Ah oui, c'est vrai !

    Dans ce cas, l'action qui est connectée à  l'item Préférences de ton menu devrait ressembler à  ça :
    <br />- (IBAction)showPrefs:(id)sender<br />{<br />&nbsp; &nbsp; if (![NSApp isActive]) [NSApp activateIgnoringOtherApps:YES];<br />&nbsp; &nbsp; [prefWindow orderFrontRegardless];<br />&nbsp; &nbsp; [prefWindow makeKeyWindow];<br />}<br />
    


    Si MeNotes n'est pas actif (au premier plan, alors on l'active.
    Puis on affiche la fenêtre de préférences (prefWindow) par dessus toutes les autres.
    Enfin, on lui donne le focus.

    .
  • gibet_bgibet_b Membre
    02:24 modifié #5
    Merci encore !

    Ton code ne fonctionnait pas car il me mettait "selector not recognized" sur les deux dernières lignes.

    En revanche, ce code fonctionne :
    if (![NSApp isActive]) <br />	[NSApp activateIgnoringOtherApps:YES];<br />[preferenceController showWindow:self];
    
  • BruBru Membre
    02:24 modifié #6
    dans 1161806332:

    Merci encore !

    Ton code ne fonctionnait pas car il me mettait "selector not recognized" sur les deux dernières lignes.

    En revanche, ce code fonctionne :
    if (![NSApp isActive]) <br />	[NSApp activateIgnoringOtherApps:YES];<br />[preferenceController showWindow:self];
    



    Dans mon exemple, prefWindow est un outlet connecté à  la fenêtre des préférences.
    Toi tu utilises un contrôleur, donc il faut adapter le code.

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