Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Принудительный перенос каретки при клике на текст (http://www.flasher.ru/forum/showthread.php?t=101700)

chingachgoog 26.09.2007 17:36

Принудительный перенос каретки при клике на текст
 
Ставилась задача, при клике на динамическое текстовое поле (ввода), переместить каретку (курсор) не туда, куда произвольно ткнул пользователь, а в строго определенное место.

В целом задача решена
Код:

this.createTextField("pole", this.getNextHighestDepth(), 20, 20, 300, 22);
pole.border=true
pole.type="input";
pole.text="мой текст тут-><- курсор";
au=true
wait=100 // менее 100 начинает работать нестабильно
pole.onSetFocus=function(){
        if (au){
                au=false
                setTimeout(function(){
                                                        Selection.setFocus(null)
                                                        Selection.setFocus(pole)
                                                        Selection.setSelection(15,15)
                                                        au=true
                                                        },wait)
        }
}

Но смущает величина необходимой задержки - wait=100!
Т.е. целую десятую секунды. Думается это весьма много.
Вопрос: это данность или как-нибудь можно убыстрить процесс?

etc 26.09.2007 18:16

Делать это в следующем отрисованном кадре.

chingachgoog 26.09.2007 18:39

Цитата:

Сообщение от __etc
Делать это в следующем отрисованном кадре.

Нет, это не срабатывает.
Вернее тут та же самая зависимость: если прошло около 100 мс, то результат скорее всего будет корректным (например 4-5 кадров при 25 fps),
если меньше 100 мс, то скорее всего выделиться строка от нужной позиции до кликнутого фрагмента.

etc 26.09.2007 23:07

Код:

this.createTextField("pole", this.getNextHighestDepth(), 20, 20, 300, 22);
pole.border=true
pole.type="input";
pole.text="мой текст тут-><- курсор";
pole.onSetFocus=function(){
        onEnterFrame = function() {
                Selection.setSelection(15,15);
                delete onEnterFrame;
        }
}

Вполне себе замечательно работает.

Mr. Fixit 27.09.2007 05:01

а зачем тут вообще юзать setTimeout ?

etc 02.10.2007 01:18

Потому что сразу нельзя ставить выделение.

CorC 02.10.2007 10:28

Да, почему то нужно дожидаться следующего кадра...

chingachgoog 14.11.2007 12:23

Цитата:

Сообщение от __etc
Код:

this.createTextField("pole", this.getNextHighestDepth(), 20, 20, 300, 22);
pole.border=true
pole.type="input";
pole.text="мой текст тут-><- курсор";
pole.onSetFocus=function(){
        onEnterFrame = function() {
                Selection.setSelection(15,15);
                delete onEnterFrame;
        }
}

Вполне себе замечательно работает.

У меня этот код работает так: выделяется строка от точки клика до указанного места, тогда как мой код работал иначе: просто ставился курсор на указанное место.


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

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