![]() |
|
||||||||||
|
|||||
|
...Ну или на худой конец координаты последней буквы в Text field
Я програмно создаю текст-филд, тама пишу кой-какой текст и мне надо динамически отслеживать координаты курсора (х,у). Я тута перелопатил весь Хелп по флэшу но чет не наткунлся =(.Кто-нить знает возможно ли такое вообще ? (речь идет о ФлэшМХ естесенно) Заранее благодарен.
__________________
Все что не делается - все к лучшему Все что к лучшему - то не делается |
|
|||||
|
Координаты мыши можно определить зарезервированными переменными _xmouse и _ymouse. А вот, как определить координаты букв, не знаю.
|
|
|||||
|
Хех, возможно я несколько некорректно поствил вопрос. Имелись ввиду координаты не того курсора который бегает за мышью а того которым мы пишем в текст-филд (ну палочка такая вертикальная, если видел кто =)
__________________
Все что не делается - все к лучшему Все что к лучшему - то не делается |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
![]() this.createTextField("tst", 1, 10, 10, 0, 0);
tst.autoSize=true, tst.type="input", tst.variable="test";
noMargins = new TextFormat();
noMargins.leftMargin=0, noMargins.rightMargin=0;
tst.setTextFormat(noMargins);
_root.moveTo(10, 30);
tst.onChanged = function() {
_root.lineStyle(1);
_root.lineTo(10+this.textWidth, 30);
};
Selection.setFocus("test");
все зависит от конкретной задачи: например, можно брать Selection.getCaretIndex, загонять сабстринг до этого индекса в поле с авторесайзом и смотреть textWidth ...но наверняка для конкретного случая можно придумать более оптимальный способ... зы: а в пятерке с рассчетом ширины такой геморрой был... вспомнить страшно... |
|
|||||
|
Вот мой конкретный случай:
Я прогрмано создаю текст-филд (параметры: Динамик-филд,авторесайз,мультилайн,вордврап), туда время от времени записывается различная чушь. Скрипт в этой чуши ищет сабстринги типа " =) " ну или " =( " и т.д. Далее не место этих смайлов вставляется мувиклип с соответсвующей рожой. Только вот определить координаты для него оказалось сложнее чем я думал. ЗЫ Метод который описан выше конечно хитёр, но думаю не совсем подходит тута.... ЗЫЫ Интересно а возможно ли чисто теоретически определить ширину символов в 5-ке.Тама ведь для этого средствов совсем нету. Хотелось-бы по подробней углубится в т.н. геморрой =)
__________________
Все что не делается - все к лучшему Все что к лучшему - то не делается |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
в пятерке он не "так называемый"... это он и есть во всей красе
![]() там динамически рассчитать длину строки, набранной известным шрифтом можно только приблизительно... очень приблизительно... даже если измерить в пикселях каждую букву шрифта... по теме: вообще, проще наверное текст побить на кусочки... чтобы между каждой парой смайлов было свое текстовое поле... но можно попробовать так: – ищешь индексОфом свою строку. (получаешь первый ее индекс) – берешь сабстринг от нуля до этого индекса – этот сабстринг помещаешь в пустое текстовое поле с авторесайзом и с такими же параметрами марджинов – берешь textWidth от этого поля (и получаешь искомое смещение относительно левого края строки) – чтобы вставить следующий смайл, меряешь то же самое, но уже относительно смайла предыдущего правда будет заморочка с многострочным полем... придется сначала проверить в какой строке находится найденный смайл... это можно сделать тоже через тестовое поле: поле точно такой же ширины, с вордврапом, но суженное по вертикали до одной строки... грузишь нужную строку и смотришь максскроллу сколько там строчек... зы: а вообще я не спал давно... может зря таких сложностей нагородил ![]() Последний раз редактировалось Nox Noctis; 02.06.2002 в 22:39. |
|
|||||
|
Сразу хочу поблагодарить за столь опретивную реакцию на мои реплики
.Насчет сабжа дискуссии: Вся запара уперается именно в то КАК ОПРЕДЕЛИТЬ СМЕЩЕНИЕ ОТНОСИТЕЛЬНО ЛЕВОГО КРАЯ СТРОКИ. Смайл в полне может стоять после 3-4 строчек текста (не забываем у нас мультилайн), где-нибудь в середине строки. Если мы вставим текст в текст-филд от начала до смайла то в свой-ве textwidth у нас будет ДЛИНА САМОЙ ДЛИНОЙ СТРОЧКИ но вовсе не смещение от начала строки до смайла Насчет смещения по вертикали - тута все бонально , т.к. сначала пишется часть текста до смайла, потом сама рожа, далее остаток текста...
__________________
Все что не делается - все к лучшему Все что к лучшему - то не делается |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
все гениальное просто, обратное неверно
)– ищешь индексОфом свою строку. (получаешь первый ее индекс) – берешь сабстринг от нуля до этого индекса – берешь ластИндексОф(chr(13)) от полученного сабстринга – берешь сабстр от полученого в предыдущем пункте индекса – с помощью авторесайзового поля без вордврапа определяешь ширину полученного поля. – теперь находишь остаток от деления на ширину исходного поля ––– это и будет твое смещение !.. если кодом, то: strt = MainString.indexOf("=)", current_index); victim = MainString.substring(0, strt); victim = victim.substr(victim.lastIndexOf(chr(13))+1); // делаем тестовое поле this.createTextField("tst", 1, 0, -100, 0, 0); tst.autoSize=true, tst.type="dynamic", tst.variable="test"; noMargins = new TextFormat(); noMargins.leftMargin=0, noMargins.rightMargin=0; tst.setTextFormat(noMargins); // поле готово test = victim; OFFSET = tst.textWidth - int(tst.textWidth/MainTextfield._width)*MainTextfield._width; что-то громоздко как-то... но должно работать ![]() Последний раз редактировалось Nox Noctis; 03.06.2002 в 02:01. |
|
|||||
|
Ну что я могу сказать....ГЕНИАЛЬНО (хотя может и не совсем просто). Сделал вроде все пашет....СПАСИБА
зы Идея конечно класная но способ не единственный.Можно слегка заоптимизировать =)
__________________
Все что не делается - все к лучшему Все что к лучшему - то не делается |
![]() |
Часовой пояс GMT +4, время: 05:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|