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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
По умолчанию Как узнать положение каретки в текстовом поле?

Все мы знаем(надеюсь) о существовании класса Selection, а у него — метода getCaretIndex(). Он хороший, но он возвращает значение с начала строки в поле. Это удобно, если текстовое поле однострочное. Но у меня многострочное поле и мне нужен номер строки, в которой находится каретка, а еще лучше — ее координаты на сцене.
Кто-нибудь сталкивался с этим? Как решать?
Спасибо.

Старый 03.07.2008, 19:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Как часто надо узнавать? Теоретически есть способ с битмапдатой, но несколько раз в секунду наверно тяжеловато будет))
__________________
Reality.getBounds(this);

Старый 03.07.2008, 19:15
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 3  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
*артистично*
С битмапдатой? Да это же извращение! Рассказывайте поподробней.

А классических поз способов нет?

Старый 03.07.2008, 20:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от crazyone Посмотреть сообщение
С битмапдатой? Да это же извращение! Рассказывайте поподробней.
Классом Selection выбирается символ (он принимает квадратный черную рамку), снимается скрин и детектится рамка.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 03.07.2008, 20:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Аксакалы говорили, что если, узнав положение каретки в строке и сделав предварительно весь текст белым, выделить из сего текста символ перед кареткой, а потом сфотать эту красоту в битмапдату, можно будет увидеть черный прямоугольник на белом фоне! Так говорят. Еще говорят, что знающие люди могут догадаться по форме этого прямоугольника, где была каретка - в точности до пикселя, чтоб мне провалиться! Говорят, они используют для этого инструмент с дьявольским названием getColorBoundsRect()! Я сказал всё что знаю.

А нет, не всё. Номер строки можно узнать maxscroll-ом, но чето он гонит ошибку.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 03.07.2008 в 20:49.
Старый 04.07.2008, 16:42
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 6  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Клевый способ. Мне нравится. Нет, правда. Спасибо за него.
А еще варианты есть?
maxscroll'ом можно количество строк узнать, а не номер строки.

Старый 04.07.2008, 16:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
maxscroll'ом можно количество строк узнать, а не номер строки.
Копируем текст до каретки, создаем временное текстовое поле высотой в одну строку но такой же ширины, забиваем туда проверяемый текст, вешаем на него формат исходного поля и спрашиваем maxscroll. Достаточно извращенно? К сожалению ошибается уже примерно к пятой стоке, и далее ошибка накапливается.
Пока не поборол((((
__________________
Reality.getBounds(this);

Старый 04.07.2008, 17:00
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 8  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Нужно знать что содержит твое поле. Например если бы каждая строка заканчивалась переводом строки то все было бы легко -_-

Старый 04.07.2008, 17:07
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 9  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Цитата:
Сообщение от qazwsx Посмотреть сообщение
Нужно знать что содержит твое поле. Например если бы каждая строка заканчивалась переводом строки то все было бы легко -_-
У меня, кстати, в каком-то проекте был недометод в классе, ставящий переносы в конец строк текстового поля:

Код:
	private function correctSting(str){
		return str;
		var tmpstr=this.body_tf.text;
		this.body_tf.text=str;
		var lines=this.body_tf.bottomScroll+this.body_tf.maxscroll;
		var i=this.body_tf.text.length;
		while(i!=-1){
			var str=this.body_tf.text;
			i=String(this.body_tf.text).lastIndexOf(" ",i-1);
			this.body_tf.text=String(this.body_tf.text).slice(0,i+1)+"\n"+String(this.body_tf.text).slice(i+1,this.body_tf.text.length);
			if(lines!=this.body_tf.bottomScroll+this.body_tf.maxscroll){
				this.body_tf.text=str;
			}
		}
		var res=this.body_tf.text;
		this.body_tf.text=tmpstr;
		return res;
	}
Цитата:
Копируем текст до каретки, создаем временное текстовое поле высотой в одну строку но такой же ширины, забиваем туда проверяемый текст, вешаем на него формат исходного поля и спрашиваем maxscroll. Достаточно извращенно? К сожалению ошибается уже примерно к пятой стоке, и далее ошибка накапливается.
Пока не поборол((((
О, тема. Сейчас буду делать.

Старый 04.07.2008, 17:17
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 10  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Ну также можно поле сделать однострочныйм туда забить весь текст, затем сделать селекшен и посмотреть значение scroll >_<

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

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

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


 


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


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