Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125

    [AS3] TexField dinamico:mostrare la parte finale del testo senza autosize

    Dunque, ho un textField creato dinamicamente che deve avere una larghezza fissa. Il testo contenuto in alcuni casi eccede la larghezza del textField. Nei casi in cui eccede vorrei attivare un listener che visualizzi la parte finale del testo.

    es.:
    testo = " il mio testo è troppo lungo"
    visualizzazione base = |il mio testo è|
    passandoci sopra (visto che eccede la larghezza) vorrei che visualizzasse: | è troppo lungo|.

    Ovviamente cambiando l'allineamento del testo non funziona. Usando l'autosize si allarga il campo (cosa non voluta).
    Il testo assegnato al textBox deve rimanere lo stesso, deve solo partire la visualizzazione da destra mostrando gli ultimi caratteri.

    Codice PHP:
    private var myTextField_2:TextField = new TextField();
    private var 
    originalFormat:TextFormat = new TextFormat();
    private var 
    newFormat:TextFormat = new TextFormat(); 

    originalFormat myTextField.getTextFormat(0);
    newFormat.align TextFormatAlign.RIGHT;
    myTextField_2.width 80;
    myTextField_2.height 20;
    myTextField_2.appendText("frase moolto lunga per il textField");

    this.addChild(myTextField_2);

    var 
    lungh:int myTextField_2.text.length;
    var 
    lastShowedChr:int myTextField_2.getCharIndexAtPoint(myTextField_2.width-3myTextField_2.height/2);
                
    if (
    lungh lastShowedChr ) {
      
    myTextField_2.border true;
      
    myTextField_2.addEventListener(MouseEvent.MOUSE_OVERclickHandler2); 
      
    myTextField_2.addEventListener(MouseEvent.MOUSE_OUTclickHandler2); 
    }

    private function 
    clickHandler2(e:MouseEvent):void {   
      if (
    myTextField_2.getTextFormat(1).align == originalFormat.align) {
        
    myTextField_2.setTextFormat(newFormat);
      }else {
        
    myTextField_2.setTextFormat(originalFormat);
      }


  2. #2
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    In mancanza di suggerimenti sono riuscito a risolvere in questo modo non elegantissimo... ma efficace. Ho potuto usare questa soluzione perchè nel mio caso il testo non è mai più lungo del doppio della larghezza del campo. Se così non fosse alcuni caratteri non verrebbero comunque visualizzati con questo codice.
    tralasciando tutti gli import...
    Codice PHP:
    private var myTextField_2:TextField = new TextField();
    private var 
    originalFormat:TextFormat = new TextFormat();
    private var 
    newFormat:TextFormat = new TextFormat();
    private var 
    originalText:String;
    private var 
    textA:String;
    private var 
    textB:String

    originalFormat myTextField.getTextFormat(0);
    newFormat.align TextFormatAlign.RIGHT;
    myTextField_2.width 80;
    myTextField_2.height 20;
    myTextField_2.appendText("frase moolto lunga per il textField");

    this.addChild(myTextField_2);

    var 
    lungh:int myTextField_2.text.length;
    var 
    lastShowedChr:int myTextField_2.getCharIndexAtPoint(myTextField_2.width-3myTextField_2.height/2);
                
    if (
    lungh lastShowedChr ) {
      
    myTextField_2.border true;
      
    originalText myTextField_2.text;
      
    textA originalText.substring(0lastShowedChr-2)+"...";
      
    textB "..."+originalText.substring(lastShowedChr-2);
      
    myTextField_2.text textA;
      
    myTextField_2.addEventListener(MouseEvent.MOUSE_OVERclickHandler2); 
      
    myTextField_2.addEventListener(MouseEvent.MOUSE_OUTclickHandler2); 
    }

    private function 
    clickHandler2(e:MouseEvent):void {   
      if (
    myTextField_2.text == textA) {
        
    myTextField_2.text textB;
        
    myTextField_2.setTextFormat(newFormat);
      } else {
        
    myTextField_2.text textA;
        
    myTextField_2.setTextFormat(originalFormat)
      }

    Saluti al forum

  3. #3
    codice:
    var myTextField_2:TextField = new TextField();
    var originalFormat:TextFormat = new TextFormat();
    var newFormat:TextFormat = new TextFormat(); 
    
    
    newFormat.align = TextFormatAlign.RIGHT;
    
    var larghezza:Number = 80
    
    myTextField_2.width = larghezza;
    myTextField_2.height = 20;
    myTextField_2.appendText("frase moolto lunga per il textField");
    
    
    this.addChild(myTextField_2);
    
    var lungh:int = myTextField_2.text.length;
    var lastShowedChr:int = myTextField_2.getCharIndexAtPoint(myTextField_2.width-3, myTextField_2.height/2);
                
    if (lungh > lastShowedChr ) {
      myTextField_2.border = true;
      myTextField_2.addEventListener(MouseEvent.MOUSE_OVER, mostra); 
      myTextField_2.addEventListener(MouseEvent.MOUSE_OUT, nascondi); 
    }
    
    function mostra(e:MouseEvent):void {   
    	e.target.width = Math.ceil(e.target.textWidth)+5
    }
    
    function nascondi(e:MouseEvent):void {   
    	e.target.width = larghezza
    }
    C'è un + 5 perché altrimenti l'ultima parte del testo viene mangiata

    (Ho tolto i riferimenti alla classe per far funzionare il codice nella prova che ho fatto, basta che cambia le funzioni finali)

  4. #4
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    Ciao Stan, guarda che l'ultimo codice che ho scritto funziona benissimo.
    La mia esigenza (come scritto all'inizio del post) era che il box di testo NON cambiasse di dimensioni ma rimanesse di quelle originarie.
    Non capisco quindi il tuo codice che su ROLL_OVER , ROLL_OUT modifica le dimensioni del textField. A quel punto era sufficiente un nomeTextField.autosize = ...

    Dario

  5. #5
    Scusa, allora non ho capito che volevi fare.

  6. #6
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    Ma di nulla, anzi grazie dell'interessamento.

    Dario

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.