Имя: Пароль:
1C
1C 7.7
v7: Обработка. Поле ввода неограниченной длины. Как определить что текст в поле изменен..?
0 Злопчинский
 
31.08.19
00:17
Простая обработка.
На обработке поле строка, неограниченная многострочная.
При открытии обработки в поле кладем текст (не сильно большой, краткое описание товара).
Как определить что в поле текст изменен (клавишами, мышкой) - сразу после изменения (фокус остается на этом же поле)?
(максимально приближено к штатно, формекс присутствует) - т.е. по сути смоделировать Модифицированность()..?
.
?
1 Злопчинский
 
31.08.19
00:22
2 Злопчинский
 
31.08.19
00:33
Пока в качестве теста извернулся так

Процедура ПриОтжатииКнопкиКлавиатуры(код, _а, _ш, _к, символ, ФСО)
    
    //а=фуМодифицированность();
    //Если флТекстИзменен=1 Тогда РасширениеФормы.Обновить(); КонецЕсли;

    флТекстИзменен=1;
    Если флТекстИзменен=1 Тогда
        Форма.кнЗакрыть.Заголовок("Закрыть ( ИЗМЕНЕНИЯ НЕ СОХРАНЕНЫ )");
        РасширениеФормы.Обновить();
    КонецЕсли;

    
КонецПроцедуры //ПриОтжатииКнопкиКлавиатуры()

Работает, но экран промаргивает после каждого нажатия кнопки...
И.. как-то не сильно красиво...
3 Злопчинский
 
31.08.19
00:49
предварительно так, усовершенстовано предыдущее несущественно

    Если Форма.АктивныйЭлемент()<>"ОписаниеТовара" Тогда Возврат; КонецЕсли;
    Если (код<32) И (код<13) Тогда Возврат; КонецЕсли; //непечатные символы
        
    флТекстИзменен=1;
    Если флТекстИзменен=1 Тогда
        Форма.кнЗакрыть.Заголовок("&Закрыть ( ИЗМЕНЕНИЯ НЕ СОХРАНЕНЫ )");
        РасширениеФормы.Обновить();
    КонецЕсли;
4 Злопчинский
 
31.08.19
00:56
но, как например отследить операции вставки вырезания мышкой?
как понять, какая операция выполнялась мышкой?
5 GreyK
 
31.08.19
01:39
(0) А что, формула не передает в модуль изменения?
6 Злопчинский
 
31.08.19
02:11
(5) какая формула? штатно пока фокус с реквизита не ушел - хрен ты что получишь по содержимому этого реквизита.
7 GreyK
 
31.08.19
02:29
(6) Формула скрытого текстового поля, которая сравнивает значение объявленной переменной, в которой хранится предыдущее значение этого текста, заметь не "крайнее", а то работать не будет.
8 Злопчинский
 
31.08.19
02:35
(7) пробовал. не катит. пока фокус с этого поля ввода не уйдет - хрен ты получишь измененной значение
9 Злопчинский
 
31.08.19
02:36
это я самое первое попробовал, хотя и знал что не взлетит ;-)
10 GreyK
 
31.08.19
02:42
(9) Ну подвесь обработку ожидания.
11 Злопчинский
 
31.08.19
02:45
и что она делать будет?
вдобавок с обработкой ожидания и активным полем ввода тоже не все хорошо, текст насколько мне помнится будет выделяться полностью
12 GreyK
 
31.08.19
02:50
(11) Будет сравнивать изменения поля формы с предыдущим значением. Я с формексом не работаю, может там можно получить выделенный текст, не знаю короче.
13 GreyK
 
31.08.19
03:00
(11) А зачем делать отклик программы на редактирование диалога ввода.
Я сдаюсь, с обработкой у меня не получается, может сделать фейковый справочник, ну или специальную форму к существующему справочнику.
14 Злопчинский
 
31.08.19
03:43
(12) не будет. пока фокус с поля не уйдет - новое значение в это поле не "запомнится". хотя на экране как бы оно набито и видно его
15 Злопчинский
 
31.08.19
03:43
(13) " может сделать фейковый справочник, ну или специальную форму к существующему справочнику."
- это я тоже с самого начала подумал. но это - некузяво.
16 Злопчинский
 
31.08.19
03:45
(13) "А зачем делать отклик программы на редактирование диалога ввода. "
- шоб было!! открыл текст в поле. отвлекся. вернулся. курсор все еще в поле. уже нихера не помню правил что-то или нет. ХОЧУ ВИДЕТЬ ПРИЗНАК ЭТОГО - правил или нет.
17 Злопчинский
 
31.08.19
03:46
(13) я сделал по кнопкам реагирует норм, промаргивает правда, но не сильно напрягает, с учетом того, что редактирвоание будет редко и мало.
18 Злопчинский
 
31.08.19
03:48
можно конечно тупо. при жмаке на кнопку закрыть - сравнивать текущий текст с исходным. если различие - вопрос...
но хотелось красиво...
19 Ёпрст
 
гуру
31.08.19
03:53
(0) Штатно, только обновлением формы и шанец потери текста.
А так, любой активикс на форме решает проблему. Типа ActiveX TextBox
20 Злопчинский
 
31.08.19
04:27
(19) не, активикс это излишества.
21 Ёпрст
 
гуру
31.08.19
04:29
(20) тогда мучайся
22 Ёпрст
 
гуру
31.08.19
04:30
можно конечно, либо tabledoc на форму кинуть, или йоксель и там ловить
23 Ёпрст
 
гуру
31.08.19
04:30
где-то там, точно ловит
24 Злопчинский
 
31.08.19
04:32
В итоге - отслеживание нажатий клавиш убрал, сделал типа как в (18).

При нажатии на кнопку "закрыть"
- если не взведен флаг изменения - сравниваю текущий текст с исходным, взвожу флаг, надпись на кнопке закрытия  - с флагом;
- проверяю флаг изменения - вопрос 1. сохранить и выйти 2. выйти без сохранения 3.остаться в редактировании

При перерисовке формы
- если не взведен флаг изменения - сравниваю текущий текст с исходным, взвожу флаг, надпись на кнопке закрытия  - с флагом;

.

В итоге получилось вполне ок.
Что-то я в (0) перемудрил с хотелкой... ;-)

Спсб. закрыто.
25 Ёпрст
 
гуру
31.08.19
08:27
(24) хрень же.. У тебя текст на кнопке меняется только в момент её нажатия ?
))
26 Сияющий в темноте
 
31.08.19
12:24
у поля ввода можно запросить его текст,через системные вызовы,но не факт,что 1с корректно их отработает,хотя и должна.

SendMessage(hctrl,WM_GETTEXT,...
вопрос только,откуда его вызывать.
и,если "подогнать" dll к процессу,то можно все события окна перехватить через SubClassing,но это уже системное программирование.

я для ввода текста открывал окно "осла" поверх 1с и в нем все события работали прекрасно,и текст в переменной менялся сразу,а не как в 1с,по окончании.
27 Злопчинский
 
31.08.19
12:40
(25) Норм получислоь! вот видео https://www.screencast.com/t/k4Zgaq6tae
28 Злопчинский
 
31.08.19
12:40
(26) была мысль и такая, но я во вне1Сных приблудах не силен. да и явное излишество в этой задаче.
29 Ёпрст
 
гуру
31.08.19
13:11
(27) :)))

А вот разместил бы табледок, и получил бы текст на кнопке сразу
30 Злопчинский
 
31.08.19
13:14
Эта, пиплы...
никто не делал "расширение" механизма подключения ВПФ как в ТиС, чтобы типовой код и механизм ВПФ юзать для подключения ВПФ к внешним ОБРАБОТКАМ.

https://content.screencast.com/users/Che66/folders/Jing/media/6b5c321b-d58b-4a75-aacf-69475dcc81f3/2019-08-31_1250.png
31 Злопчинский
 
31.08.19
13:14
(29) ну... ;-)
32 Ёпрст
 
гуру
31.08.19
13:16
(30) ща я посмотрю, вроде было у нас так
33 Ёпрст
 
гуру
31.08.19
13:17
прикручивали впф ко всему
34 Ёпрст
 
гуру
31.08.19
13:27
Не соврамши, для встроенных обработок тока прикручивал, для внешних, как-то и так можно было допилить любую форму печати
35 Ёпрст
 
гуру
31.08.19
13:28
для встроенных, там чутка кода в ВнешниеПечатныеФормы прикрутить и всё
36 Злопчинский
 
31.08.19
14:10
(35) ага, посмотри если можно и скинь если не в лом.
37 Злопчинский
 
31.08.19
14:10
e.meil@mail.ru