79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
1

Положение каретки в поле ввода

29.07.2013, 15:28. Показов 15033. Ответов 12
Метки нет (Все метки)

Версия платформы 8.2.17 конфигурация на управляемых формах

Есть форма с многострочным полем ввода(Формула) и кучей кнопочек под ней, нажимая на которые вставляется некий текст в текущую позицию каретки ввода в поле ввода

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
нс = 0; нк = 0; кс = 0; кк = 0;
    Элементы.Формула.ПолучитьГраницыВыделения(нс, нк, кс, кк); 
    
    Результат = "";
    Данные = Формула;
    
    сч = 1;
    Пока сч < нс цикл
        результат = результат + СтрПолучитьСтроку(Данные, сч) + Символы.ПС;
        сч = сч + 1;
    КонецЦикла;
    
    Если нк > 1 Тогда
        результат = результат + Лев(СтрПолучитьСтроку(Данные, нс), нк-1);   
    КонецЕсли;
    
    результат = результат +  Реквизит(ЭтаФорма[Элемент.Имя], "ПредставлениеВФормуле");
    нс = СтрДлина(результат);
    
    результат = результат + Сред(СтрПолучитьСтроку(Данные, кс), кк);
    сч = кс + 1;
    нк = СтрЧислоСтрок(Данные);
    
    Пока сч <= нк Цикл
        результат = результат + Символы.ПС + СтрПолучитьСтроку(Данные, сч);
        сч = сч + 1;
    КонецЦикла;   
    
    Формула = результат;
    Элементы.Формула.УстановитьГраницыВыделения(нс, нс);
все работает нормально за исключением одного момента, после этого каретка перемещается в начало строки.
при этом каретка перемещается в начало уже после выхода с процедуры, я так понимаю что после того как я присваиваю Формула = результат; идет обновление поля ввода и уже в это время сбрасывается позиция каретки, как можно это обойти?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2013, 15:28
Ответы с готовыми решениями:

Неправильное положение каретки в поле EDIT
Здравствуйте, уважаемые форумчане. Столкнулся с проблемой, даже не знаю как правильно ее назвать в...

Положение каретки в консоли
Доброй ночи всем. Заинтересовал вопрос как можно это сделать. если конечно можно. В си есть гоуту...

Определить положение каретки в TextBox
Как определить положение каретки в ТекстБоксе? Дело в том, что мне нужно выставлять число в...

Вставить текст в RichTextBox в положение каретки
Доброго врмени суток! Вот такая проблема: На форме есть rtb и button. Код для button ...

12
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
29.07.2013, 15:49 2
по-моему никак. Только если right-arrow засовывать. Так для этого позицию надо знать

Добавлено через 58 секунд
хотя позиция известна...
0
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.07.2013, 16:26  [ТС] 3
Цитата Сообщение от duk337 Посмотреть сообщение
right-arrow
а это что такое?
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
29.07.2013, 17:56 4
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
Элементы.Формула.УстановитьГраницыВыделения(нс, нс);
Это так работает эта хрень... Попробуй вот так

1C
1
Элементы.Формула.УстановитьГраницыВыделения(нс, нс+1);
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
29.07.2013, 20:41 5
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
а это что такое?
вот что мне поведал переводчик гугл: "стрелка вправо"... А то я уже было засомневался
0
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
30.07.2013, 16:47  [ТС] 6
Цитата Сообщение от Dethmontt Посмотреть сообщение
Это так работает эта хрень... Попробуй вот так

1C
1
Элементы.Формула.УстановитьГраницыВыделения(нс, нс+1);
да что так, что так, все равно не выходит, дело в том что каретка передвигается в начало уже после того как срабатывает эта строка


duk337, а можно подробнее свои домыслы объяснить??
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
30.07.2013, 18:33 7
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
да что так, что так, все равно не выходит, дело в том что каретка передвигается в начало уже после того как срабатывает эта строка
Проверял, отлично работает при условии если
- Начальная позиция <(меньше) Конечной позиции
и числа позиций не выходят за границы длинны текста

Добавлено через 1 минуту
Цитата Сообщение от Dethmontt Посмотреть сообщение
и числа позиций не выходят за границы длинны текста
Т.е. число начальной позиции не может быть больше предпоследнего символа
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
30.07.2013, 20:24 8
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
duk337, а можно подробнее свои домыслы объяснить??
эмуляция нажатия кнопки. Вариант с отчаяния
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
30.07.2013, 23:32 9
В твоем случае работать будет вот так: (Но будет выделяться последняя буква)
1C
1
Элементы.Формула.УстановитьГраницыВыделения(нс-1, нс);
P.S. Как это побороть не прибегая к сторонним объектам и не добавляя пробел в конец строки - НЕЗНАЮ.
Но скажу спасибо если разберешься!
0
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
05.08.2013, 13:14  [ТС] 10
Проверял, отлично работает при условии если
- Начальная позиция <(меньше) Конечной позиции
и числа позиций не выходят за границы длинны текста
а проверь еще раз не забывая о том что перед установкой выделения строка элемента тоже меняется Формула = результат;.... если получится прошу выложить весь код!
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
05.08.2013, 15:21 11
да пожалуйста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&НаКлиенте
Процедура Команда1(Команда)
    
    Строкаформулы = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    
    Строкаформулы = Строкаформулы+ГСЧ.СлучайноеЧисло(1,9999999);
    Строкаформулы = Строкаформулы+"-"+ГСЧ.СлучайноеЧисло(1,9999999);
    
    Результат = Строкаформулы;
    ЭтаФорма.ТекущийЭлемент = Элементы.Результат;
    ЭтаФорма.ОбновитьОтображениеДанных();
    Элементы.Результат.УстановитьГраницыВыделения(СтрДлина(Результат),СтрДлина(Результат)+1);
    
    
КонецПроцедуры
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
05.08.2013, 15:22 12
Сама обработка ВыделениеПоследнегоСимвола.rar
0
Модератор
Эксперт 1С
3709 / 2906 / 572
Регистрация: 10.03.2011
Сообщений: 11,442
Записей в блоге: 1
05.08.2013, 15:26 13
И что бы поставить курсор в конец строки у меня получилось только добавляя пробел в конец строки. Если знаешь как по другому поделись =)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2013, 15:26
Помогаю со студенческими работами здесь

Есть ли в классе TextArea метод для установки каретки в нужное положение?
Вот тут у меня такое. Написал прогу для поиска слов из текста, а переставить курсор в нужное...

HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его оставить в этом же поле?
HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его...

Сдвиг каретки ввода в TextBox
пытаюсь создать свой TextBox, в котором можно изменять цвет границ using System; using...

Как программно изменить цвет текста в поле ввода и как выделить весь текст в поле ввода по умолчанию
Как программно изменить цвет текста в поле ввода и как выделить весь текст в поле ввода по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru