Просмотр полной версии : TextArea protected property textField
Equalazer
07.09.2009, 11:13
Здравствуйте!!! я создал компонент: http://www.valar.ru/gallery/0909/untitled2_copy.jpg.
мне нужно сделать выделение текста по щелчку в TextArea и вставить выделенное в TextInput. в TextField позволяет это сделать с кучей свойств, и как я понимаю у TextArea есть свойство TextField... подскажите как все это лучше реализовать???
заранее спасибо.
Если нужно реализовать просто выделение текста, то это можно сделать так:
myTextArea.text = "My text";
myTextArea.setSelection(0, myTextArea.text.length);
А если нужно больше функциональности, то лучше всего пронаследовать компонент TextArea и работать с protected свойством textField напрямую.
public class MyTextArea extends TextArea
{
public function MyTextArea
{
addEventListener(Event.ADDED_TO_STAGE, eventAddedToStage);
}
private function eventAddedToStage(e:Event):void
{
textField.text = "My text";
textField.setFocus();
textField.setSelection(0, textField.length);
}
}
Так же protected-свойство textField компонента TextArea можно получить через
var myTextField:TextField = TextField(myTextArea.getChildAt(2));
Equalazer
16.09.2009, 19:16
Видете ли TextArea показавыет только сплошной текст в виде Mazda /n Mitsubishi
и как мне повесить ивент по щелчку на конкретное слово?... результат должен получиться как в гугле... набираешь ма, он предлогает мазда - щелкаешь => вставляется мазда в инпут и директит.
Дело в том, что если я правильно понял, что Вы хотите, то для этой цели в Google используется совсем другой компонент, похожий на компонент ListBox. Немного непонятно, зачем использовать TextArea. Но всё же если очень хочется, то подобный алгоритм можно было бы организовать и в TextArea, только это будет не совсем тривиальная задача.
У компонента textField есть свойство getCharIndexAtPoint, которое может вернуть позицию каретки в textField в том месте, где находится курсор мышки. Например на событие MouseEvent.MOUSE_MOVE возвращаете позицию каретки в текстовом поле. После чего, "собираете" относительно этой позиции слово до разделителей "\r", слева и справа, делать это можно, например с помощью регулярных выражений. После чего у вас будут индексы левой и правой границы слова. Вызываете textField.setSelection(begIndex, endIndex) и слово будет выделено. Само слово можно хранить, например в строке и при событии MouseEvent.CLICK присваивать эту строку в поле ввода.
Но для Вашей цели делать это всё не очень умно, можно использовать ListBox, там для этого уже всё есть.
P.S. Если конечно я правильно понял постановку задачи.
Equalazer
17.09.2009, 16:49
Спасибо большое за совет) почему то захотелось использовать TextArea, но вы правы удобнее использовать листбокс))
Но хотелось бы узнать все таки: TextArea добавляется компонентом через <mx:>, - Могу ли я испозьзуя компонент TextArea достучаться до свойств textfield, не добовляя TextField на экран addChild'ом? Допустим если мне нужен метод getCharIndexAtPoint использовать для TextArea.
Компонент TextArea собран из нескольких элементов. Один из этих элементов - IUITextField. У этого элемента есть все необходимые Вам свойства. Т.к. этот элемент объявлен как protected, достучаться к нему просто так не получится.
Самый лучший способ для Вас это пронаследовать компонент TextArea, как указано в моём первом посте. После этого, Вы сможете из главного файла его подключить так:
<mx:MyTextArea id="myTextAreaLink"> </mx:MyTextArea>
После этого Вы сможете обращаться ко всем свойствам TextArea через id. Одна проблема, textField вы через id не увидите с этого файла. Получить ссылку на textField можно таким способом:
В Вашем пронаследованном от TextArea классе, объявляете свойство:
private var textFieldLink:TextField;
На событие Event.ADDED_TO_STAGE - textFieldLink = TextField(this.textField);
Потом пишите get-ер:
public function getTextFieldLink():TextField
{
return textFieldLink;
}
После всех этих манипуляций, в Вашем главном классе, Вы сможете через id, получить ссылку на textField компонента TextArea и делать с ним всё, что Вам нужно.
var tf:TextField = myTextAreaLink.getTextFieldLink();
var carretPos:uint = tf.getTextFieldLink(mouseX, mouseY);
Equalazer
17.09.2009, 20:46
Спасибо большое!!!))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.