2011-07-02 1 views
3

J'ai un problème étrange - J'utilise une fenêtre de titre pour créer un message à l'utilisateur. L'utilisateur a la possibilité de déplacer la fenêtre de titre autour de l'écran afin que l'écran principal soit visible.Flex 4: La fenêtre de titre sort de la zone accessible

Cependant, si l'utilisateur déplace trop la fenêtre de titre, il peut en fait sortir de la zone accessible au navigateur. L'utilisateur n'a d'autre choix que de fermer le navigateur et de recommencer. Comment nous assurer que le mouvement de la fenêtre de titre est limité, de sorte que la barre de titre est toujours disponible pour le contrôle?

Je ne pourrais pas avoir formulé ce droit- pls vérifier l'image ci-jointe image going out of screen.

Répondre

4

J'écouterais l'événement move de la TitleWindow. Si la fenêtre est déplacée hors des coordonnées visibles de l'application, replacez-la. Si vous ne faites que permettre aux utilisateurs de fermer la fenêtre, vous pouvez ajouter un bouton "Fermer" en bas de la fenêtre en plus du "x" en haut.

4

Si vous pouvez utiliser un composant personnalisé, nous vous suggérons de remplacer la méthode move() de TitleWindow. J'utilise le code suivant pour limiter le mouvement de la fenêtre:

public class PopUpWindow extends TitleWindow 
{ 
    private static const MIN_VISIBLE:int = 50; 

    public override function move(x:Number, y:Number):void 
    { 
     var maxX:Number = stage.stageWidth - MIN_VISIBLE; 
     var maxY:Number = stage.stageHeight - MIN_VISIBLE; 

     if (x < 0) 
      x = 0; 
     else if (x > maxX) 
      x = maxX; 

     if (y < 0) 
      y = 0; 
     else if (y > maxY) 
      y = maxY; 

     super.move(x, y); 
    } 
} 
+0

Je suis d'accord avec cette solution. J'ai vu le même comportement dans le passé et je préfère juste limiter le mouvement de la fenêtre de titre. Vous pouvez faire de même avec le redimensionnement. –

+0

+1 pour cette solution également. J'ai utilisé quelque chose presque exactement comme ça sur des projets passés moi-même. –

1

Cette fonction est appelée événement move de TitleWindow:

 protected function titlewindow1_moveHandler(event:MoveEvent):void 
     { 
      // TODO Auto-generated method stub 
      var window:UIComponent = event.currentTarget as UIComponent; 
      var application:UIComponent = FlexGlobals.topLevelApplication as UIComponent; 
      var bounds:Rectangle = new Rectangle(0, 0, application.width, application.height); 
      var windowBounds:Rectangle = window.getBounds(application); 
      var x:Number; 
      var y:Number; 
      if (windowBounds.left <= bounds.left) 
       x = bounds.left; 
      else if (windowBounds.right >= bounds.right) 
       x = bounds.right - window.width; 
      else 
       x = window.x; 
      if (windowBounds.top <= bounds.top) 
       y = bounds.top; 
      else if (windowBounds.bottom >= bounds.bottom) 
       y = bounds.bottom - window.height; 
      else 
       y = window.y; 
      window.move(x, y); 
     } 
Questions connexes