Вопрос

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

    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>

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

Это было полезно?

Решение

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

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

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

Другие советы

Возможно, вы ознакомились с тем, как mx.controls.RichTextEditor это делает? Вы можете найти его в ... \ frameworks \ projects \ framework \ src \ mx \ controls

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top