[résolu]Scroller une webview plein écran

elaumelaum Membre
décembre 2005 modifié dans API AppKit #1
Bonjour.

Je suis en train d'essayer de faire un navigateur simpliste qui s'affiche en plein écran.
J'ai récupéré le plein écran du sujet [TRUKéASTUCE] Faire de l'affichage plein écran en cocoa.

J'ai donc une webView crée dynamiquement comme ceci :
webView = [[WebView alloc] init];


Mon problème vien que je n'arrive pas à  scroller.
En effet, la petite barre (ascenseur?) est grisé et je ne peu pas scroller avec la mollette. En revanche je peu cliquer sur l'ascenseur pour le déplacer.

J'ai regardé sur ce site et ailleur et j'ai trouvé quelques pistes mais sans aboutir :
? la commande [tt][[[webView mainFrame] frameView] setAllowsScrolling:YES];[/tt] semble nécessaire mais pas suffisante.
? J'ai aussi l'impression qu'il faut un delegate pour gérer le scroll.

En fait je me demande carrément si on peu scroller en plein écran?
:why?:

Réponses

  • elaumelaum Membre
    05:24 modifié #2
    Re bonjour,

    Je viens de me rendre compte que ce n'est pas que le scroll qui est "désactivé"
    mais les champs de textes aussi.

    Il m'est impossible d'éditer ces champs de textes. :'( :why?:

    Au cas où, le code pour le plein écran :
    webView = [[WebView alloc] init];<br />	[[[webView mainFrame] frameView] setAllowsScrolling:YES];<br />	[webView setFrameLoadDelegate:self];<br />	[webView setResourceLoadDelegate:self];<br />	mainScreenBounds = [[NSScreen mainScreen] frame];<br />	fullScreenWindow = [[NSWindow alloc]	initWithContentRect:mainScreenBounds <br />										styleMask:NSBorderlessWindowMask<br />										backing:NSBackingStoreBuffered<br />										defer:YES<br />										screen:[NSScreen mainScreen]];<br />	[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:defaultURL]]];<br />	[fullScreenWindow setLevel:NSScreenSaverWindowLevel];<br />	[fullScreenWindow setContentView:webView];<br />	[fullScreenWindow orderFrontRegardless];<br />
    
  • Eddy58Eddy58 Membre
    05:24 modifié #3
    Ne vaudrait-il pas mieux utiliser l'initialisateur désigné ? ???
    Sinon, par défaut une WebView n'est pas éditable, il faut donc changer le flag avec la méthode setEditable:.
    [tt]
    mainScreenBounds = [[NSScreen mainScreen] frame];
          webView = [[WebView alloc] initWithFrame:mainScreenBounds frameName:nil goupName:nil];
    [[[webView mainFrame] frameView] setAllowsScrolling:YES];
          [webView setEditable:YES];
    [webView setFrameLoadDelegate:self];
    [webView setResourceLoadDelegate:self];
    fullScreenWindow = NSWindow alloc] initWithContentRect:mainScreenBounds <br /> styleMask:NSBorderlessWindowMask<br /> backing:NSBackingStoreBuffered<br /> defer:YES<br /> screen:[NSScreen mainScreen;
    webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:defaultURL];
    [fullScreenWindow setLevel:NSScreenSaverWindowLevel];
    [fullScreenWindow setContentView:webView];
    [fullScreenWindow orderFrontRegardless];
    [/tt]
  • fouffouf Membre
    05:24 modifié #4
    Je pense que ce n'est pas lié à  cela mais plutôt au type de fenêtre : NSBorderlessWindowMask fait que les éléments éditable dans la fenêtre sont grisés. Je me suis heurté à  ce pb quand j'ai voulu faire des fenêtres avec la barre sur le côté (et je n'ai d'ailleur pas réussi à  le résoudre). Une solution serait peut-être de faire une fenêtre classique mais de la positionner sur l'écran de manière à  ce aue l'on ne voit pas la barre. Mais Bru doit avoir une solution meilleure aue celle-là  ;)
  • mpergandmpergand Membre
    05:24 modifié #5
    <br />// needed for borderless window, unless all controls are disabled !<br />	<br />-(BOOL) canBecomeKeyWindow<br />{<br />	return YES;<br />}
    
  • elaumelaum Membre
    05:24 modifié #6
    Eddy58 > Ne marche pas  :'(
    Ca ne change rien mais il me semble que ce serait plus approprié (initWithFrame) merci.

    mpergand > Ne marche pas non plus  :'(
    J'ai copié collé le code dans ma classe (celle dans laquelle il y a ma webView)

    fouf > Pas encore testé.

    Je vous remercie pour vos réponses et je vais chercher encore un peu.
    Si vous avez d'autre idées o:)
  • fouffouf Membre
    05:24 modifié #7
    Ah, mpergand t'as donné la solution.

    Pour que ca marche, je croit qu'il faut que tu sous-classes NSWindow et que tu rajoutes cette méthode. :o
  • mpergandmpergand Membre
    05:24 modifié #8
    Salut à  tous,

    canBecomeKeyWindow est une méthode de NSWindow, donc ...
  • elaumelaum Membre
    05:24 modifié #9
    Oulà  on se calme j'ai commencé l'objective-C il y a moins d'un sans avoir la moindre notion de POO.

    canBecomeKeyWindow est une méthode de NSWindow, donc ...

    donc il faut que je sous-classe NSWindow? (à  tout hasard vue la réponce précédente :))

    Pour que ca marche, je croit qu'il faut que tu sous-classes NSWindow et que tu rajoutes cette méthode.

    Si j'ai bien compris c'est que ma classe principale (celle qui contient la fenetre) que je fait descendre de NSWindow au lieu de NSObject?
      Ou alors je crée une autre classe a qui je rajoute cette fonction. (je l'appelle comment alors??)
  • Eddy58Eddy58 Membre
    décembre 2005 modifié #10
    dans 1135881130:

    Si j'ai bien compris c'est que ma classe principale (celle qui contient la fenetre) que je fait descendre de NSWindow au lieu de NSObject?
       Ou alors je crée une autre classe a qui je rajoute cette fonction. (je l'appelle comment alors??)

    Dans IB il faut que tu crées cette sous-classe, tu l'appelles comme tu veux, puis dans l'inspecteur de ta fenêtre, onglet "Custom Class", tu choisis la sous-classe créée. Ensuite dans le menu "Classes", tu crées les fichiers de ta sous-classe, puis dans XCode tu n'auras plus qu'à  implémenter la méthode canBecomeKeyWindow dans les fichiers nouvellements créés. :)

    [EDIT] Il va sûrement falloir changer ta façon de faire pour initialiser ta fenêtre, en surchargeant aussi initWithContentRect... et en faisant dans IB un outlet relié de ton controleur à  ta fenêtre.
  • elaumelaum Membre
    décembre 2005 modifié #11
    MERCI à  tous pour votre aide précieuse  ;D o:)

    Maintenant, je vais tenter de rendre mon code plus "propre"
    Et si les exams de janvier se passent bien(:() je mettrait mon appli sur mon site. (source comprise)

    [EDIT][MAJ] : Je les ai mis sur mon site (juste en téléchargement)
    ici
  • c@rtc@rt Membre
    05:24 modifié #12
    salut, alors chez moi ca marche a peu pres sauf pour le flash voir : http://www.objective-cocoa.org/forum/index.php?topic=1711.msg17072#msg17072


    sinon je n'arrive pas a le remettre en fenetre plus petite et ensuite eventuellement le repasser en fullscreen
    j'ai fait :
    [fullScreenWindow orderOut:self] mais la fenetre disparait
    ( fullScreenWindow est une instance de la classe NSWindow )

    donc j'aimerai aussi savoir comment je peut dans mon menu cocher l'item Plein ecran et s'il est coché ou non le passer ou l'enlever de plein ecran.

    Merci pour vos reponses ++
  • Eddy58Eddy58 Membre
    05:24 modifié #13
    Tu peux toujours essayer avec la méthode zoom. :)
Connectez-vous ou Inscrivez-vous pour répondre.