|
v7: Позиция в многострочной строке | ☑ | ||
---|---|---|---|---|
0
MiracMC
11.09.18
✎
14:02
|
Добрый день.
Есть элемент формы "Строка" с размером "Не ограничено" и галочкой "Многострочный". При вводе\редактировании текста в этот элемент формы надо понимать позицию курсора. Иными словами точно знать в какой строке и на каком символе он установлен в текущий момент. Есть решение такой задачи? Такое вообще возможно? Заранее благодарен за оперативный ответ. Спасибо. |
|||
1
serpentt
11.09.18
✎
14:13
|
"Зачем"?
Что потом хотите сделать, проанализировать и в какой момент. |
|||
2
MiracMC
11.09.18
✎
14:23
|
(1) Собственно цель в том что б потом, когда поставили курсов в нужное место, нажать на кнопку на форме и, к примеру, вставить что то заранее заготовленное в текст... спец сивлол, знак табуляции... да что угодно...
просто не всегда Ctr+V помогает... |
|||
3
ADirks
11.09.18
✎
14:28
|
(0) я нашёл единственный более-менее вразумительный вариант - вкрутить tiny MCE
например так: http://www.1cpp.ru/forum/YaBB.pl?num=1253809274 пробовал всякие Active-X'ы, так они либо слишком примитивные, либо за деньги |
|||
4
Злопчинский
11.09.18
✎
14:47
|
(2) Мутачное решение. Неограниченная строка это как правило НЕФОРМАЛИЗОВАННЫЕ данные. поэтому что куда ставить - похреню это все только для глазок, а не для автоматизированной обработки.
Как вариант В ЛЮБОЕ МЕСТО пишите типа "%Ключ=Значение%" гже процент - знак-ограничитиель "формализованных" данных. Ключ - какоето предпределенной значение. Значение - содержимое по ключу. |
|||
5
Peltik
11.09.18
✎
14:48
|
(2) а почему Ctr+V не всегда помогает?
|
|||
6
vova1122
11.09.18
✎
14:50
|
можно и штатно сделать, но через большую "Ж..". Имеется готовый теккст (многострочный, однострочный) неважно. Сохранить его во временный текст. Потом в нужном месте вставить например пробел. Потом проанализировать в каком месте текст изменился. И в этом месте заменить пробел на свой заготовленный текст
|
|||
7
uno-group
11.09.18
✎
14:53
|
Делаете строку не ограниченной длины на форме. и при перемещении по таблице обновляете ее. редактируется соответственно тоже она при окончании редактирования обновляете нужный реквизит в табличной части.
|
|||
8
MiracMC
11.09.18
✎
14:53
|
(3) Спасибо.. раскуриваю)
(5) как раз вариант с tiny MCE это, по идее, все то что и надо реализовать... задача, по сути, некая верстка текста... примитивная по идее но все же... (6) тут все равно та же проблема возникнет. не понятно какая позиция поменялась... ну или не пробел а что то другое писать по тексту как "признак курсора"... |
|||
9
vova1122
11.09.18
✎
14:57
|
(8) почему непонятно? Имеете старый текст (до редактирования) и новый текст (после вставки пробела). Проблема сравнить посимвольно два текста и найти в какой позиции отличие?
|
|||
10
Злопчинский
11.09.18
✎
14:58
|
(3) вот он http://catalog.mista.ru/public/22237/
|
|||
11
ADirks
11.09.18
✎
15:02
|
(10) это для восьмёрки, там проще
|
|||
12
Peltik
11.09.18
✎
15:02
|
(8) tiny MCE многабукаф, тут задача проще:
1. Залить в буфер обмена вставляемый текст 2. Имитировать нажатие Ctrl+V и первое и второе, решается в две строки |
|||
13
ADirks
11.09.18
✎
15:04
|
(12) ты забыл п.3: поставить курсор туда, где он был
речь идёт об интерактивном редактировании а букаф много, тут не поспоришь |
|||
14
uno-group
11.09.18
✎
15:05
|
Вставлять тильду, ё, ** при окончании редактирования заменять их на нужное
|
|||
15
Peltik
11.09.18
✎
15:07
|
(13) посчитать количество символов во вставляемом тексте и имитировать нажатие клавиши "вправо" N раз :)
|
|||
16
Peltik
11.09.18
✎
15:08
|
(15) сори "влево", у меня эта, сено-солома :)
|
|||
17
MiracMC
11.09.18
✎
15:28
|
(3) Вполне рабочее. И применимо для моих целей.
Единственное не удобно, или я пока не понял как... Автор этого чуда сохраняет и открывает html файлы... то есть передать на вход содержимое поля многострочного без превращения его в html не возможно. Ну и обратно только сохранив в html и потом считав его в поле можно хранить.. Но и это можно пережить. Спасибо! |
|||
18
ADirks
11.09.18
✎
16:54
|
(17) немножко кода по этому поводу
в принципе, могу накинуть классов, которые всю эту шляпу обслуживают ///******************************** ADirks 23.12.2013 ************ Функция IsHTML(стр) Экспорт Если Найти(стр, "<br />") > 0 Тогда Возврат 1; ИначеЕсли Найти(стр, "<table") > 0 Тогда Возврат 1; ИначеЕсли Найти(стр, "<tbody>") > 0 Тогда Возврат 1; КонецЕсли; Возврат 0; КонецФункции ///******************************** ADirks 23.12.2013 ************ ///******************************** ADirks 20.02.2014 ************ Функция LineBreak(н = 1) Export стр = ""; Пока н >= 1 Цикл стр = стр + "<br />"; н = н - 1; КонецЦикла; Возврат стр; КонецФункции Функция HTML_LineBreaks(стр) Export Возврат СтрЗаменить(стр, РазделительСтрок, "<br />"); КонецФункции Функция ToPlainText(Знач стр) Экспорт стр = СтрЗаменить(стр, "<br />", РазделительСтрок); стр = СтрЗаменить(стр, " ", " "); стр = СтрЗаменить(стр, "<p>", ""); стр = СтрЗаменить(стр, "</p>", РазделительСтрок); Возврат стр; КонецФункции ///******************************** ADirks 20.02.2014 ************ ///******************************** ADirks 22.11.2016 ************ Функция стрЭкранироватьСпецСимволы(стр) Экспорт ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl"); ScrptCtrl.Language = "jscript"; ScrptCtrl.AddCode( "function quote(str) |{ | str = str.replace(/\r\n/g, '<br>'); | str = str.replace(/\n\r/g, '<br>'); | str = str.replace('\r', '<br>'); | str = str.replace('\n', '<br>'); | str = str.replace('\'', '\\\''); | str = str.replace('\""', '\\\""'); | return str; |} |"); Возврат ScrptCtrl.CodeObject.quote(стр); КонецФункции ///******************************** ADirks 22.11.2016 ************ ///******************************** ADirks 07.04.2016 ************ Функция AddHeaderAndFooter(стр) Экспорт Возврат "<html><head> |<META http-equiv=Content-Type content=""text/html; charset=windows-1251""> |<title></title> |</head> |<body>"+стр+"</body> |</html>"; КонецФункции ///******************************** ADirks 07.04.2016 ************ |
|||
19
Salimbek
11.09.18
✎
19:51
|
(3) Я когда-то тоже сталкивался с такой проблемой. Решил стандартным АктивИкс-ом. Результат выкладывал тут: http://www.1cpp.ru/forum/YaBB.pl?num=1207118421/7#7
|
|||
20
ADirks
12.09.18
✎
06:44
|
(19) вроде бы то что нужно, но в многострочном режиме ведёт себя крайне странно :(
|
|||
21
Peltik
12.09.18
✎
08:10
|
(20) видимо внешние факторы влияют :)
|
|||
22
Salimbek
12.09.18
✎
08:23
|
(20) Я попробовал сунуться в тот код, но он у меня отругался, что Forms.TextBox.1 не смог создать. Х.з. что там с тех пор поменялось уже...
|
|||
23
ADirks
12.09.18
✎
08:29
|
(22) винда поменялась, наверное :)
MS Forms 2.0 (FM20.dll) отсутствует, либо не зарегано, либо версия не 2.0 |
|||
24
ADirks
12.09.18
✎
08:33
|
(22) + но в твоём коде смотреть особо нечего - ActiveX создали, а дальше он сам. Я только добавил Флешка.MultiLine = -1;
И вот в таком режиме оно вроде как многострочное, но визуальное положение курсора вообще не совпадает с тем, куда текст пишется. И перевод строки по Ctrl-Enter - тоже не то что нужно (хотя это может и настраивается, там свойств много). |
|||
25
ADirks
12.09.18
✎
08:59
|
(24) мда... я же говорю, странные они все какие-то ...
фигушки он сам - вставлять буковки то он и не умеет. Удалять - пожалуйста, курсором возить - тоже может, а редактировать - нет. А принудительно в многострочном режиме получается фигня. |
|||
26
Salimbek
12.09.18
✎
10:04
|
(25) А... это... Я помню такой трабл. Там дело в том, что я тогда был молод и глуп :-) Т.е. АктивИкс создается на Кнопке - и поэтому события определенные туда просто не прилетают. На создавать на поле ввода и тогда будут и кнопки нажиматься, и буковки прилетать.
|
|||
27
Salimbek
12.09.18
✎
10:09
|
(23) Ага, у меня с 7.7 где-то сервер с 2003-й стоит, на нем и балуюсь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |