|
|
|||||
Регистрация: May 2009
Сообщений: 33
|
Положение курсора в текстовом поле
Здраствуйте уважаемые товарищи! На сцене текстовое поле. При нажатии на него мувик под текстовым полем прнимает координаты _xmouse, как бы указывая на расположение курсора(каретки) в текстовом поле. Далее мышку например сдвинули на пару букв и опять кликнули на текстовом поле и мувик опять должен принять координаты х мыши, как бы указывая на каретку. Собственно как такое моджно реализовать. Пробовал менять фокус и различные другие приемы. Можеть есть аналог SetSelection в AS2
|
|
|||||
Врядли такое можно реализовать стандартными способами. Чтоб получилось всё граматно, нужно узнавать ширину символов в текстовом поле + расстояние между ними. Таких инструментов нет.
Но выход есть всегда ! извращенский способ #1: Можно жестоко извратиться и сделать своё убер универсальное текстовое поле, в котором каждая буква будет вводиться в отдельный контейнер. Тем самым можно будет вычислять кординаты для корретки. Тоесть изобрести велосипед, но по русский ! извращенский способ #2: Чтобы узнавать кординаты для корретки - создать пустой контейнер, в нём текстовое поле. Затем Циклом, перебираем все буквы в слове, вставляя их в контейнер, записывая, складывания их общей ширины. поочереди.
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 27.01.2011 в 16:51. |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Неточный извращенский способ 3:
var tf = this.createTextField("tf", 1, 100, 100, 100, 20); tf._width = 300; tf._height = 300; tf.multiline = true; tf.wordWrap = true; tf.type = "input"; tf.text = "Здраствуйте уважаемые товарищи! На сцене текстовое поле. При нажатии на него мувик под текстовым полем прнимает координаты _xmouse, как бы указывая на расположение курсора(каретки) в текстовом поле."; var center = this.createEmptyMovieClip("center", 2); center.lineStyle(1,0xFF0000); center.moveTo(-5,0); center.lineTo(5,0); center.moveTo(0,-5); center.lineTo(0,5); this.onEnterFrame = function() { if (eval(Selection.getFocus()) == tf) { var origText = tf.text; var origML = tf.multiline; var origWW = tf.wordWrap; var position = Selection.getCaretIndex(); tf.text = tf.text.substr(0, position); var w = tf.textWidth; var h = tf.textHeight; var tformat = tf.getTextFormat(); var metrics_1 = tformat.getTextExtent(tf.text, tf._width); center._y = tf._y+h-metrics_1.descent-metrics_1.ascent; tf.multiline = false; tf.wordWrap = false; var metrics_2 = tformat.getTextExtent(tf.text, tf._width); if (tf.textWidth>metrics_2.width) { center._x = tf._x+tf.textWidth%metrics_2.width; } else { center._x = tf._x+tf.textWidth; } tf.text = origText; tf.multiline = origML; tf.wordWrap = origWW; } };
__________________
hauts.ru |
|
|||||
Модрон-ветеринар
|
Метод SetSelection в AS2 есть.
Например:
__________________
Идите первым! Последний раз редактировалось mooncar; 27.01.2011 в 21:32. |
|
|||||
Регистрация: May 2009
Сообщений: 33
|
Спасибо большое извращенского способо 3 вполне хватило)))))
|
|
|||||
Регистрация: May 2009
Сообщений: 33
|
))
Итак возникла новая проблема)))
Чем длиннее текст тем больше отклонение, причем эта ошибка только у меня, в вашем примере все отлично работает! Может быть это из за шрифта? Вот выложил исходник. |
|
|||||
Регистрация: May 2009
Сообщений: 33
|
Более менее решил проблему так:
Чем больше ширина текста, тем больше отнимаем от координат. Для небольшого текстового поля, как у меня, ничего не заметно))) |
Часовой пояс GMT +4, время: 02:11. |
|
« Предыдущая тема | Следующая тема » |
|
|