Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.09.2009, 11:13
Equalazer вне форума Посмотреть профиль Отправить личное сообщение для Equalazer Найти все сообщения от Equalazer
  № 1  
Ответить с цитированием
Equalazer

Регистрация: Jul 2009
Сообщений: 23
По умолчанию TextArea protected property textField

Здравствуйте!!! я создал компонент: .
мне нужно сделать выделение текста по щелчку в TextArea и вставить выделенное в TextInput. в TextField позволяет это сделать с кучей свойств, и как я понимаю у TextArea есть свойство TextField... подскажите как все это лучше реализовать???
заранее спасибо.

Старый 14.09.2009, 14:31
Касеал вне форума Посмотреть профиль Отправить личное сообщение для Касеал Найти все сообщения от Касеал
  № 2  
Ответить с цитированием
Касеал

Регистрация: Dec 2008
Сообщений: 17
Если нужно реализовать просто выделение текста, то это можно сделать так:
Код AS3:
myTextArea.text = "My text";
myTextArea.setSelection(0, myTextArea.text.length);
А если нужно больше функциональности, то лучше всего пронаследовать компонент TextArea и работать с protected свойством textField напрямую.

Код AS3:
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 можно получить через
Код AS3:
var myTextField:TextField =  TextField(myTextArea.getChildAt(2));


Последний раз редактировалось Касеал; 14.09.2009 в 14:34.
Старый 16.09.2009, 19:16
Equalazer вне форума Посмотреть профиль Отправить личное сообщение для Equalazer Найти все сообщения от Equalazer
  № 3  
Ответить с цитированием
Equalazer

Регистрация: Jul 2009
Сообщений: 23
Видете ли TextArea показавыет только сплошной текст в виде Mazda /n Mitsubishi
и как мне повесить ивент по щелчку на конкретное слово?... результат должен получиться как в гугле... набираешь ма, он предлогает мазда - щелкаешь => вставляется мазда в инпут и директит.

Старый 16.09.2009, 19:36
Касеал вне форума Посмотреть профиль Отправить личное сообщение для Касеал Найти все сообщения от Касеал
  № 4  
Ответить с цитированием
Касеал

Регистрация: Dec 2008
Сообщений: 17
Дело в том, что если я правильно понял, что Вы хотите, то для этой цели в Google используется совсем другой компонент, похожий на компонент ListBox. Немного непонятно, зачем использовать TextArea. Но всё же если очень хочется, то подобный алгоритм можно было бы организовать и в TextArea, только это будет не совсем тривиальная задача.
У компонента textField есть свойство getCharIndexAtPoint, которое может вернуть позицию каретки в textField в том месте, где находится курсор мышки. Например на событие MouseEvent.MOUSE_MOVE возвращаете позицию каретки в текстовом поле. После чего, "собираете" относительно этой позиции слово до разделителей "\r", слева и справа, делать это можно, например с помощью регулярных выражений. После чего у вас будут индексы левой и правой границы слова. Вызываете textField.setSelection(begIndex, endIndex) и слово будет выделено. Само слово можно хранить, например в строке и при событии MouseEvent.CLICK присваивать эту строку в поле ввода.
Но для Вашей цели делать это всё не очень умно, можно использовать ListBox, там для этого уже всё есть.
P.S. Если конечно я правильно понял постановку задачи.

Старый 17.09.2009, 16:49
Equalazer вне форума Посмотреть профиль Отправить личное сообщение для Equalazer Найти все сообщения от Equalazer
  № 5  
Ответить с цитированием
Equalazer

Регистрация: Jul 2009
Сообщений: 23
Спасибо большое за совет) почему то захотелось использовать TextArea, но вы правы удобнее использовать листбокс))
Но хотелось бы узнать все таки: TextArea добавляется компонентом через <mx:>, - Могу ли я испозьзуя компонент TextArea достучаться до свойств textfield, не добовляя TextField на экран addChild'ом? Допустим если мне нужен метод getCharIndexAtPoint использовать для TextArea.

Старый 17.09.2009, 18:49
Касеал вне форума Посмотреть профиль Отправить личное сообщение для Касеал Найти все сообщения от Касеал
  № 6  
Ответить с цитированием
Касеал

Регистрация: Dec 2008
Сообщений: 17
Компонент TextArea собран из нескольких элементов. Один из этих элементов - IUITextField. У этого элемента есть все необходимые Вам свойства. Т.к. этот элемент объявлен как protected, достучаться к нему просто так не получится.
Самый лучший способ для Вас это пронаследовать компонент TextArea, как указано в моём первом посте. После этого, Вы сможете из главного файла его подключить так:

Код:
<mx:MyTextArea id="myTextAreaLink"> </mx:MyTextArea>
После этого Вы сможете обращаться ко всем свойствам TextArea через id. Одна проблема, textField вы через id не увидите с этого файла. Получить ссылку на textField можно таким способом:

В Вашем пронаследованном от TextArea классе, объявляете свойство:

Код AS3:
private var textFieldLink:TextField;
На событие Event.ADDED_TO_STAGE -
Код AS3:
textFieldLink = TextField(this.textField);
Потом пишите get-ер:
Код AS3:
public function getTextFieldLink():TextField
{
    return textFieldLink;
}
После всех этих манипуляций, в Вашем главном классе, Вы сможете через id, получить ссылку на textField компонента TextArea и делать с ним всё, что Вам нужно.

Код AS3:
var tf:TextField = myTextAreaLink.getTextFieldLink();
var carretPos:uint = tf.getTextFieldLink(mouseX, mouseY);


Последний раз редактировалось Касеал; 17.09.2009 в 19:00.
Старый 17.09.2009, 20:46
Equalazer вне форума Посмотреть профиль Отправить личное сообщение для Equalazer Найти все сообщения от Equalazer
  № 7  
Ответить с цитированием
Equalazer

Регистрация: Jul 2009
Сообщений: 23
Спасибо большое!!!))

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.