2009-03-11 8 views
2

Ich mache einen Texteditor Textbereich verwenden. Welche Benutzer Schriftgröße ändern, Familie usw.
Dies ist mein Code auf wie:Flex: Ändern von Textbereich

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

ich dieses Kombinationsfeld haben, um die gewünschte Schriftgröße eingeben:

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

Wie kann ich Schriftart ändern Eigenschaften, wenn der Text nicht hervorgehoben ist? Zum Beispiel positioniere ich den Mauszeiger auf den letzten Index von Text in meinem Textbereich und wähle in meinem Kombinationsfeld die gewünschte Schriftgröße aus. Die folgende Schriftgröße des Buchstabens, der im Textbereich eingegeben wird, sollte die ausgewählte Schriftgröße im Kombinationsfeld sein. Der Code, den ich poste, funktioniert nur, wenn ich den gewünschten Text hervorhebe.

Antwort

1

Dies ist der Stil zu setzen

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); 

      } 
     } 

Dieser Code wird die Verwendung für das Erhalten des Stils aus der 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(); 
     } 

Bitte überprüfen Sie für kleinere Fehler, Coz, wenn ich diesen Code i einige kommentiert hat Spuren

0

Haben Sie vielleicht einen Blick darauf geworfen, wie mx.controls.RichTextEditor dies tut? Sie können es in finden ... \ Frameworks \ projects \ Framework \ src \ mx \ controls

Wenn Sie diesen Code scannen Sie werden sehen, dass der Richtexteditor die aktuellen Textstil-Einstellungen in Textformat-Variable behält es unterhält, und wendet diesen Stil auf neu eingegebenen Text an. Diese Variable wird aktualisiert, wenn der Benutzer Schriftarten/-größen ändert oder wenn sich die Auswahl ändert, um den benachbarten Stil zu übernehmen. Bei selectionBeginIndex == selectionEndIndex gibt es auch eine besondere Berücksichtigung.

+0

hallo. Ich überprüfe, was Sie vorgeschlagen haben, aber es gibt Code, den ich nicht verstehe, wie dieser textArea.getTextField(). SetTextFormat textArea hat keine Eigenschaften getTextField.Woher kommt er? Bitte helfen Sie mir, es herauszufinden. Dankeschön – Jejad

+0

getTextField() ist im mx_internal Namespace. Sie werden feststellen, dass Namespace in Ihrer Klasse importieren müssen und entweder öffnen oder explizit Präfix getTextField() (das heißt, mx_internal :: getTextField()) –

+0

hallo. Jeder hat dies bei der Laufzeit-Erstellung von TextArea implementiert? Bitte geben Sie mir ein Beispiel dafür, wie es geht? Ich habe eine harte Zeit in Override-Funktion Trace.thank u – Jejad