Bonjour,

Je suis en train d'étendre la classe Window pour ajouter des curseurs de redimensionnement lorsque la souris se trouve au dessus des bordure de celle-ci.
J'arrive à afficher les curseurs, mais j'ai 2 problèmes :
- les curseurs n'apparaissent pas en entier, ils sont coupés au bord de la Window
- les curseurs ne suivent pas le mouvement de la souris mais restent à l'endroit du MOUSE_DOWN

Est-ce que quelqu'un aurait des solutions ou bien est-ce juste impossible à faire ?

Merci d'avance.

Action Script

package 
{
import flash.events.MouseEvent;

import mx.core.Window;
import mx.managers.CursorManager;
import mx.managers.CursorManagerPriority;

/**
* Fenêtre avec l'apparition d'un curseur de redimensionnement
* lorsque la souris arrive sur les bord de celle-ci.
*/
public class ResizeWindow extends Window
{
// ------------------------------------------
//
// Constantes
//
// ------------------------------------------

/**
* @private
* Curseurs
*/
[Embed(source="assets/cursor/verticalSize.gif")]
private const VERTICAL_CURSOR:Class;
[Embed(source="assets/cursor/horizontalSize.gif")]
private const HORIZONTAL_CURSOR:Class;
[Embed(source="assets/cursor/leftObliqueSize.gif")]
private const LEFT_OBLIQUE_CURSOR:Class;
[Embed(source="assets/cursor/rightObliqueSize.gif")]
private const RIGHT_OBLIQUE_CURSOR:Class;
[Embed(source="assets/cursor/mouseMove.gif")]
private const MOVE_CURSOR:Class;

// ------------------------------------------
//
// Variables
//
// ------------------------------------------

/**
* @private
* Identifiant de curseur
*/
private var idCursorResize:int = CursorManager.NO_CURSOR;

// ------------------------------------------
//
// Constructeur
//
// ------------------------------------------

/**
* Constructeur
*/
public function ResizeWindow()
{
super();

this.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
this.addEventListener(MouseEvent.ROLL_OUT, outHandler);
}

// ------------------------------------------
//
// Méthodes
//
// ------------------------------------------

/**
* @private
* Modification du curseur
*/
private function modifyCursor(cursor:Class):void
{
if (idCursorResize == CursorManager.NO_CURSOR)
{
idCursorResize = cursorManager.setCursor(cursor, CursorManagerPriority.HIGH, -10, -10);
}
}

/**
* @private
* Suppression du curseur
*/
private function removeResizeCursor():void
{
if (idCursorResize != CursorManager.NO_CURSOR)
{
cursorManager.removeCursor(idCursorResize);
idCursorResize = CursorManager.NO_CURSOR;
}
}

// ------------------------------------------
//
// Evènements
//
// ------------------------------------------

/**
* @private
* Affichage du curseur de redimensionnement aux bords de la fenêtre.
*/
private function moveHandler(event:MouseEvent):void
{
var gap:Number = this.getStyle("borderThickness") as Number;

// Coin haut gauche
if (mouseX < gap * 2 && mouseY < gap * 2)
{
modifyCursor(LEFT_OBLIQUE_CURSOR);
return;
}
// Coin haut droit
if (mouseX > unscaledWidth - gap * 2 && mouseY < gap * 2)
{
modifyCursor(RIGHT_OBLIQUE_CURSOR);
return;
}
// Coin bas gauche
if (mouseX < gap * 2 && mouseY > unscaledHeight - gap * 2)
{
modifyCursor(RIGHT_OBLIQUE_CURSOR);
return;
}
// Coin bas droit
if (mouseX > unscaledWidth - gap * 2 && mouseY > unscaledHeight - gap * 2)
{
modifyCursor(LEFT_OBLIQUE_CURSOR);
return;
}
// Haut
if (mouseY < gap)
{
modifyCursor(VERTICAL_CURSOR);
return;
}
// Bas
if (mouseY > unscaledHeight - gap)
{
modifyCursor(VERTICAL_CURSOR);
return;
}
// Gauche
if (mouseX < gap)
{
modifyCursor(HORIZONTAL_CURSOR);
return;
}
// Droit
if (mouseX > unscaledWidth - gap)
{
modifyCursor(HORIZONTAL_CURSOR);
return;
}
// Au centre
removeResizeCursor();

}

/**
* @private
* Suppression du curseur si hors fenêtre
*/
private function outHandler(event:MouseEvent):void
{
removeResizeCursor();
}
}
}