Forums Développement Multimédia

Aller au contenu

Position y du curseur dans un TextField

CODE Actionscript

14 réponses à ce sujet

#1 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 30 November 2008 - 14:42 PM

Bonjour, est-ce qu'il est possible de connaitre les coordonnées x y du curseur dans un textField ?


#2 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 30 November 2008 - 15:08 PM

salut, je ne sais pas si c'est accessible directement mais il suffit sinon d'obtenir l'index d'entrée du curseur et après tu récupère les limites du caractère à ce point...
genre :

Action Script

var carRect:Rectangle = monTxt.getCharBoundaries(monTxt.caretIndex);
var curseurX = carRect.x;
var curseurY = carRect.y;
var curseurH = carRect.height;

enfin comme ça à vue de nez!!

#3 0900.am

  • Members
  • PipPipPipPipPipPipPipPip
  • 1505 messages

Posté 30 November 2008 - 15:37 PM

ou alors

Action Script



var curseur:Point = new Point (0,0);
montexte.addEventListener (MouseEvent.MOUSE_MOVE, recupCurseur);

function recupCurseur (e:MouseEvent):void
{

curseur.x = e.localX;
curseur.y = e.localY;

}



ou alors avec des variables Number qui récupèrent localX et localY

enfin comme ça à vue de nez aussi

#4 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 30 November 2008 - 15:45 PM

Citation (G. @ Nov 30 2008, 03:37 PM) Voir le message
ou alors

Action Script



var curseur:Point = new Point (0,0);
montexte.addEventListener (MouseEvent.MOUSE_MOVE, recupCurseur);

function recupCurseur (e:MouseEvent):void
{

curseur.x = e.localX;
curseur.y = e.localY;

}

ou alors avec des variables Number qui récupèrent localX et localY

enfin comme ça à vue de nez aussi


je ne crois pas que l'on parle de la même chose!! je pense que AurelR souhaite récupérer la position du caret et non du pointeur de la souris...

#5 0900.am

  • Members
  • PipPipPipPipPipPipPipPip
  • 1505 messages

Posté 30 November 2008 - 15:53 PM

oups, j'avais cru qu'il voulait la position du curseur de la souris icon_mrgreen.gif

G.sort();

#6 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 30 November 2008 - 16:22 PM

Oui la pieuvre a raison je parle du caret.

La pieuvre, ta méthode ne marche pas getCharBoundaries renvoie null à chaque fois. Il faut faire

_text.getCharBoundaries(_text.caretIndex - 1);

mais le probleme c'est que ça ne prends pas en compte les sauts de lignes

Modifié par AurelR, 30 November 2008 - 16:25 PM.


#7 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 30 November 2008 - 17:27 PM

?

Action Script

var _txt:TextField = new TextField();
_txt.type=TextFieldType.INPUT;
_txt.width=250;
_txt.multiline=true;
_txt.wordWrap=true;
_txt.autoSize=TextFieldAutoSize.LEFT;
_txt.text="dividimus quidquid cognosci potest in propositiones simplices, et quaestiones. Ad propositiones simplices non alia praecepta tradimus, quam quae vim cognoscendi praeparant ad objecta quaevis distinctius intuenda et sagacius perscrutanda, quoniam hae sponte occurrere debent, nec quaeri possunt; quod in duodecim prioribus praeceptis complexi sumus, ac quibus nos ea omnia exhibuisse existimamus, quae rationis usum aliquomodo faciliorem reddere posse arbitramur. Ex quaestionibus autem aliae intelliguntur perfecte, etiamsi illarum solutio ignoretur, de quibus solis agemus in duodecim regulis proxime sequentibus; aliae denique non perfecte intelliguntur, quas ad duodecim posteriores regulas reservamus.";
_txt.x=100;
_txt.y=100;
this.addChild(_txt);

_txt.addEventListener(MouseEvent.CLICK, traceIn);

var selec_mc:MovieClip = new MovieClip();
selec_mc.graphics.lineStyle(2,0xff0000)
this.addChild(selec_mc);

function traceIn(e:MouseEvent):void {
var carRect:Rectangle=_txt.getCharBoundaries(_txt.caretIndex);
var curseurX=_txt.x+carRect.x;
var curseurY=_txt.y+carRect.y;
var curseurH=carRect.height;
trace(curseurX, curseurY, curseurH);


selec_mc.graphics.clear();
selec_mc.graphics.lineStyle(2,0xff0000)
selec_mc.graphics.moveTo(0,0);
selec_mc.graphics.lineTo(0, curseurH);

selec_mc.x=curseurX;
selec_mc.y= curseurY;
}


#8 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 30 November 2008 - 17:37 PM

et même pour être perfectionniste on peut rajouter

Action Script

_txt.addEventListener(KeyboardEvent.KEY_UP, traceIn);
après le premier addEventListener.

soit :

Action Script

var _txt:TextField = new TextField();
_txt.type=TextFieldType.INPUT;
_txt.width=250;
_txt.multiline=true;
_txt.wordWrap=true;
_txt.autoSize=TextFieldAutoSize.LEFT;
_txt.text="dividimus quidquid cognosci potest in propositiones simplices, et quaestiones. Ad propositiones simplices non alia praecepta tradimus, quam quae vim cognoscendi praeparant ad objecta quaevis distinctius intuenda et sagacius perscrutanda, quoniam hae sponte occurrere debent, nec quaeri possunt; quod in duodecim prioribus praeceptis complexi sumus, ac quibus nos ea omnia exhibuisse existimamus, quae rationis usum aliquomodo faciliorem reddere posse arbitramur. Ex quaestionibus autem aliae intelliguntur perfecte, etiamsi illarum solutio ignoretur, de quibus solis agemus in duodecim regulis proxime sequentibus; aliae denique non perfecte intelliguntur, quas ad duodecim posteriores regulas reservamus.";
_txt.x=100;
_txt.y=100;
this.addChild(_txt);

_txt.addEventListener(MouseEvent.CLICK, traceIn);
_txt.addEventListener(KeyboardEvent.KEY_UP, traceIn);

var selec_mc:MovieClip = new MovieClip();
selec_mc.graphics.lineStyle(2,0xff0000)
this.addChild(selec_mc);

function traceIn(e:Event):void {
var carRect:Rectangle=_txt.getCharBoundaries(_txt.caretIndex);
var curseurX=_txt.x+carRect.x;
var curseurY=_txt.y+carRect.y;
var curseurH=carRect.height;
trace(curseurX, curseurY, curseurH);


selec_mc.graphics.clear();
selec_mc.graphics.lineStyle(2,0xff0000)
selec_mc.graphics.moveTo(0,0);
selec_mc.graphics.lineTo(0, curseurH);

selec_mc.x=curseurX;
selec_mc.y= curseurY;
}

Fichier(s) joint(s)


Modifié par la pieuvre, 30 November 2008 - 17:38 PM.


#9 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 30 November 2008 - 17:45 PM

bon allé cette fois c'est la bonne, avec la prise en compte du dernier caractère wink.gif

Action Script

var _txt:TextField = new TextField();
_txt.type=TextFieldType.INPUT;
_txt.width=250;
_txt.multiline=true;
_txt.wordWrap=true;
_txt.autoSize=TextFieldAutoSize.LEFT;
_txt.text="dividimus quidquid cognosci potest in propositiones simplices, et quaestiones. Ad propositiones simplices non alia praecepta tradimus, quam quae vim cognoscendi praeparant ad objecta quaevis distinctius intuenda et sagacius perscrutanda, quoniam hae sponte occurrere debent, nec quaeri possunt; quod in duodecim prioribus praeceptis complexi sumus, ac quibus nos ea omnia exhibuisse existimamus, quae rationis usum aliquomodo faciliorem reddere posse arbitramur. Ex quaestionibus autem aliae intelliguntur perfecte, etiamsi illarum solutio ignoretur, de quibus solis agemus in duodecim regulis proxime sequentibus; aliae denique non perfecte intelliguntur, quas ad duodecim posteriores regulas reservamus.";
_txt.x=100;
_txt.y=100;
this.addChild(_txt);

_txt.addEventListener(MouseEvent.CLICK, traceIn);
_txt.addEventListener(KeyboardEvent.KEY_UP, traceIn);

var selec_mc:MovieClip = new MovieClip();
selec_mc.graphics.lineStyle(2,0xff0000)
this.addChild(selec_mc);

function traceIn(e:Event):void {
var carRect:Rectangle
var curseurX:Number;
if(_txt.length < _txt.caretIndex+1){
carRect=_txt.getCharBoundaries(_txt.caretIndex-1);
curseurX=_txt.x+carRect.x + carRect.width;
}else{
carRect=_txt.getCharBoundaries(_txt.caretIndex);
curseurX=_txt.x+carRect.x;
}
var curseurY:Number =_txt.y+carRect.y;
var curseurH:Number =carRect.height;
trace(curseurX, curseurY, curseurH);


selec_mc.graphics.clear();
selec_mc.graphics.lineStyle(2,0xff0000)
selec_mc.graphics.moveTo(0,0);
selec_mc.graphics.lineTo(0, curseurH);

selec_mc.x=curseurX;
selec_mc.y= curseurY;
}

Fichier(s) joint(s)



#10 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 01 December 2008 - 09:31 AM

Le probleme est toujours le meme, les lignes vides ne sont pas prises en compte.

Le textField est de text de saisie, l'utilisateur peut donc sauter des lignes. Cela creer une erreur car sur ces lignes il n'y a pas de caractere.


#11 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 01 December 2008 - 10:31 AM

Il n'y aurait pas une méthode magique du genre

monTextField.getCaretBounds():Rectangle;

#12 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 01 December 2008 - 17:10 PM

bon faut tout te faire si j'ai bien compris !! wink.gif

alors une vieille ruse de sioux :

Action Script

var _txt:TextField = new TextField();
_txt.type=TextFieldType.INPUT;
_txt.width=250;
_txt.multiline=true;
_txt.wordWrap=true;
_txt.autoSize=TextFieldAutoSize.LEFT;
_txt.text="dividimus quidquid cognosci potest in propositiones simplices, et quaestiones. Ad propositiones simplices non alia praecepta tradimus, quam quae vim cognoscendi praeparant ad objecta quaevis distinctius intuenda et sagacius perscrutanda, quoniam hae sponte occurrere debent, nec quaeri possunt; quod in duodecim prioribus praeceptis complexi sumus, ac quibus nos ea omnia exhibuisse existimamus, quae rationis usum aliquomodo faciliorem reddere posse arbitramur. Ex quaestionibus autem aliae intelliguntur perfecte, etiamsi illarum solutio ignoretur, de quibus solis agemus in duodecim regulis proxime sequentibus; aliae denique non perfecte intelliguntur, quas ad duodecim posteriores regulas reservamus.";
_txt.x=100;
_txt.y=100;
this.addChild(_txt);

_txt.addEventListener(MouseEvent.CLICK, traceIn);
_txt.addEventListener(KeyboardEvent.KEY_UP, traceIn);

var selec_mc:MovieClip = new MovieClip();
selec_mc.graphics.lineStyle(2,0xff0000)
this.addChild(selec_mc);

function traceIn(e:Event):void {
var carRect:Rectangle
var curseurX:Number;
if(_txt.getCharBoundaries(_txt.caretIndex) == null){
_txt.setSelection(_txt.caretIndex,_txt.caretIndex);
_txt.replaceSelectedText(" ");
_txt.setSelection(_txt.caretIndex-1,_txt.caretIndex-1);
carRect=_txt.getCharBoundaries(_txt.caretIndex);
curseurX=_txt.x+carRect.x;
_txt.setSelection(_txt.caretIndex,_txt.caretIndex+1);
_txt.replaceSelectedText("");
}else{
carRect=_txt.getCharBoundaries(_txt.caretIndex);
curseurX=_txt.x+carRect.x;
}
var curseurY:Number =_txt.y+carRect.y;
var curseurH:Number =carRect.height;
trace(curseurX, curseurY, curseurH);


selec_mc.graphics.clear();
selec_mc.graphics.lineStyle(2,0xff0000)
selec_mc.graphics.moveTo(0,0);
selec_mc.graphics.lineTo(0, curseurH);

selec_mc.x=curseurX;
selec_mc.y= curseurY;
}

Fichier(s) joint(s)



#13 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 01 December 2008 - 17:30 PM

J'y avais pensé à cette gruge de code (ajouté un caratere pour l'enlever apres). Je trouvais juste ça vraiment crade. Mais ça a le mérite de marché. C'est bizarre qu'il n'ya pas de methode toute faite. De mon coté, j'avias pensé à recuperer la ligne sur laquelle on est et multiplié le resultat par la hauteur d'une ligne, supposant que toutes les lignes fassent la meme taille.

#14 aurelien.ruaro

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 02 December 2008 - 19:00 PM

J'ai oublié de te remercier pour le temps passé sur mon probleme et pour m'avoir m'aider.

Merci

#15 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 02 December 2008 - 19:02 PM

you'r wellcome wink.gif



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)