2009-03-11 10 views
2

Je crée un éditeur de texte à l'aide de la zone de texte. Quel utilisateur peut changer la taille de police, famille, etc
Ceci est mon code en tant que:Flex: Modification de la zone de texte

private function ChangeFont(event: Event):void 
     { 
     var mySelectedTextRange:TextRange = new TextRange(thistxtarea,true, 
               thistxtarea.selectionBeginIndex, 
               thistxtarea.selectionEndIndex); 
     mySelectedTextRange.fontSize = int(cmbbxFntSze.text); 
     thistxtarea.setFocus(); 
     } 

j'ai cette zone de liste déroulante pour saisir la taille de police souhaitée:

<mx:ComboBox x="78" y="8" width="114" id="cmbbxFntFam" close="ChangeFont(event)"></mx:ComboBox> 

Comment puis-je changer la police propriétés si le texte à l'intérieur n'est pas en surbrillance? Par exemple, je place le pointeur de la souris sur le dernier index du texte dans ma zone de texte et je sélectionne dans ma combo la taille de la police désirée. La taille de police suivante de la lettre qui a été entrée dans la zone de texte doit être la taille de police sélectionnée dans la zone de liste déroulante. Le code que je poste ne fonctionne que si je sélectionne le texte souhaité.

Répondre

1

Ceci pour définir le style

private function setTextStyles(type:String, value:Object = null):void 
     { 
      if(thisindex != -1) 
      { 
       var tf:TextFormat; 

       var beginIndex:int = textArea.getTextField().selectionBeginIndex; 
       var endIndex:int = textArea.getTextField().selectionEndIndex; 

       textArea.getTextField().alwaysShowSelection = true; 

       if (beginIndex == endIndex) 
       { 
        tf = previousTextFormat; 
       } 
       else  
        tf = new TextFormat(); 


       if (type == "bold" || type == "italic" || type == "underline") 
       { 
        tf[type] = value; 
       } 
       else if (type == "align") 
       { 
        if (beginIndex == endIndex) 
        { 
         tf = new TextFormat(); 
        } 

        // Apply the paragraph styles to the whole paragraph instead of just 
        // the selected text 
        beginIndex = textArea.getTextField().getFirstCharInParagraph(beginIndex) - 1; 
        beginIndex = Math.max(0, beginIndex); 
        endIndex = textArea.getTextField().getFirstCharInParagraph(endIndex) + 
         textArea.getTextField().getParagraphLength(endIndex) - 1; 
        tf[type] = value; 
        previousTextFormat[type] = value; 
        if (!endIndex) 
         textArea.getTextField().defaultTextFormat = tf; 
       } 
       else if (type == "font") 
       { 
        tf[type] = cmbbxFntFam.text; 
       } 
       else if (type == "size") 
       { 
        var fontSize:uint = uint(cmbbxFntSze.text); 
        if (fontSize > 0) 
         tf[type] = fontSize; 
       } 
       else if (type == "color") 
       { 
        tf[type] = uint(clrpckerFontColor.selectedColor); 
       } 


       textFormatChanged = true; 

       if (beginIndex == endIndex) 
       {      
        previousTextFormat = tf; 
       } 
       else 
       { 
        textArea.getTextField().setTextFormat(tf,beginIndex,endIndex);//textArea.setTextFormat(tf,beginIndex,endIndex); 
       } 

       dispatchEvent(new Event("change")); 

       var caretIndex:int = textArea.getTextField().caretIndex; 
       var lineIndex:int = textArea.getTextField().getLineIndexOfChar(caretIndex); 

       textArea.invalidateDisplayList(); 
       textArea.validateDisplayList(); 
       textArea.validateNow(); 

       // Scroll to make the line containing the caret under viewable area 
       while (lineIndex >= textArea.getTextField().bottomScrollV) 
       { 
        textArea.verticalScrollPosition++; 
       } 

       callLater(textArea.setFocus); 

      } 
     } 

Ce code est utilisé pour obtenir le style de la textArea

private function getTextStyles():void 
     {    

      if (!textArea) 
       return; 

      var tf:TextFormat; 

      var beginIndex:int = textArea.getTextField().selectionBeginIndex; 
      var endIndex:int = textArea.getTextField().selectionEndIndex; 

      if (textFormatChanged) 
       previousTextFormat = null; 

      if (beginIndex == endIndex) 
      { 
       tf = textArea.getTextField().defaultTextFormat; 
       if (tf.url != "") 
       { 
        var carIndex:int = textArea.getTextField().caretIndex; 
        if (carIndex < textArea.getTextField().length) 
        { 
         var tfNext:TextFormat=textArea.getTextField().getTextFormat(carIndex, carIndex + 1); 

         if (!tfNext.url || tfNext.url == "") 
          tf.url = tf.target = ""; 
        } 
        else 
         tf.url = tf.target = ""; 
       } 
      } 
      else 
       tf = textArea.getTextField().getTextFormat(beginIndex,endIndex);     


      if (cmbbxFntSze.text != tf.font) 
       setComboSelection(cmbbxFntFam, tf.font); 
      if (int(cmbbxFntSze.text) != tf.size) 
       setComboSelection(cmbbxFntSze,String(tf.size)); 
      if (clrpckerFontColor.selectedColor != tf.color) 
       clrpckerFontColor.selectedColor = Number(tf.color); 

      if (btnBold.selected != tf.bold) 
       btnBold.selected = tf.bold;//Alert.show("bold"); 
      if (btnItalic.selected != tf.italic) 
       btnItalic.selected = tf.italic; 
      if (btnUnderline.selected != tf.underline) 
       btnUnderline.selected = tf.underline; 


      if (tf.align == "left") 
       alignButtons.selectedIndex = 0; 
      else if (tf.align == "center") 
       alignButtons.selectedIndex = 1; 
      else if (tf.align == "right") 
       alignButtons.selectedIndex = 2; 
      else if (tf.align == "justify") 
       alignButtons.selectedIndex = 3; 



      if (textArea.getTextField().defaultTextFormat != tf) 
       textArea.getTextField().defaultTextFormat = tf; 
      previousTextFormat = tf; 
      textFormatChanged = false; 

      lastCaretIndex = textArea.getTextField().caretIndex;     
      thishtmltxt = textArea.htmlText; 
      textArea.validateNow(); 
     } 

S'il vous plaît vérifier les erreurs mineures, coz quand je code ce que j'ai quelques commentaires traces

0

Avez-vous regardé comment mx.controls.RichTextEditor fait cela? Vous pouvez le trouver dans ... \ cadres \ projects \ framework \ src \ mx \ contrôles

Si vous analysez ce code, vous verrez que le RichTextEditor conserve les paramètres de style de texte dans la variable TextFormat il maintient, puis applique ce style au texte nouvellement entré. Cette variable est mise à jour lorsque l'utilisateur modifie les polices/tailles ou lorsque la sélection est modifiée pour saisir le style voisin. Il y a une considération spéciale pour le cas de selectionBeginIndex == selectionEndIndex.

+0

Bonjour. Je revois ce que vous avez suggéré mais il y a du code que je ne comprends pas comme ceci textArea.getTextField(). SetTextFormat textArea n'a pas de propriétés getTextField.Where il vient? S'il vous plaît, aidez-moi à le comprendre. Merci. – Jejad

+0

getTextField() se trouve dans l'espace de noms mx_internal. Vous devrez importer cet espace de noms dans votre classe, et l'ouvrir, ou préfixer explicitement getTextField() (c'est-à-dire, mx_internal :: getTextField()) –

+0

bonjour. Quelqu'un a-t-il implémenté ceci lors de la création de TextArea à l'exécution? S'il vous plaît donnez-moi un exemple sur la façon de le faire? J'ai du mal à tracer dans override function.thank u – Jejad

Questions connexes