2009-03-11 2 views
2

Я создаю текстовый редактор, используя текстовую область. Какой пользователь может изменить размер шрифта, семьи и т.д.
Это мой код на как:Flex: Изменение области текста

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

у меня есть этот выпадающий ввести желаемый размер шрифта:

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

Как изменить шрифт свойства, если текст внутри не выделяется? Например, я помещаю указатель мыши на последний индекс текста внутри моей текстовой области, и я выбираю в своем поле со списком нужный размер шрифта. Следующий размер шрифта, который вводится в текстовой области, должен быть выбранным размером шрифта в поле со списком. Код, который я публикую, работает только в том случае, если я выделяю нужный текст.

ответ

1

Это установить стиль

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

      } 
     } 

Этот код использовать для получения стиля от 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(); 
     } 

Пожалуйста, проверьте незначительные ошибки, кузен, когда я закодировать это я некоторые комментированные отслеживание

0

Возможно, вы посмотрели, как mx.controls.RichTextEditor делает это? Вы можете найти его в ... \ рамки \ проекты \ рамки \ SRC \ тх \ управления

Если вы просканировать этот код, вы увидите, что RichTextEditor сохраняет текущие настройки стиля текста в переменной TextFormat он поддерживает, и затем применяет этот стиль к вновь введенному тексту. Эта переменная обновляется, когда пользователь меняет шрифты/размеры или когда выбор изменяется, чтобы захватить соседний стиль. Особого внимания заслуживает выбор selectionBeginIndex == selectionEndIndex.

+0

привет. Я просматриваю то, что вы предложили, но есть код, который я не понимаю, как этот textArea.getTextField(). SetTextFormat textArea не имеет свойств getTextField.Where? Пожалуйста, помогите мне, как это выяснить. Спасибо – Jejad

+0

getTextField() находится в пространстве имен mx_internal. Вам нужно будет импортировать это пространство имен в свой класс и либо открыть его, либо явно префикс getTextField() (т. Е. Mx_internal :: getTextField()) –

+0

привет. Кто-нибудь реализовал это во время создания TextArea во время выполнения? Пожалуйста, дайте мне пример о том, как это сделать? У меня есть трудное отслеживание в функции переопределения. – Jejad

Смежные вопросы