|   |   | 
| 
 | v7: Перенос курсора в конец строки поля ввода (sendkeys("{END}"). Почему не работает? | ☑ | ||
|---|---|---|---|---|
| 0
    
        jah1111 13.08.20✎ 22:31 | 
        Нужно, чтобы функция после каждого вводимого символа ставила курсор в конец строки (ну или после символа, еще не решил. тогда будет эмуляция не END а "стрелка вправо"). Но... не работает, курсор постоянно мигает в начале строки
 Функция ПриВыбореЗначения(Об="") Енд = СоздатьОбъект("Wscript.Shell"); Если Об = "" Тогда Об = Форма.АктивныйЭлемент(); КонецЕсли; Если Об="кнЙ" Тогда // ввод бувы "Й" Поле=СокрЛП(Поле)+"Й"; ПошукПоБукв(); активизировать("Поле"); енд.SendKeys("{END}"); КонецЕсли; в чем не так? | |||
| 1
    
        Злопчинский 13.08.20✎ 23:05 | 
        ээээ...
 в поле ввода принаборе значения СТРОКА - курсор сдвигается по мере набора смволов | |||
| 2
    
        Злопчинский 13.08.20✎ 23:06 | 
        сначала дождись активизации поля, а потом уже двигай в нем курсор     | |||
| 3
    
        jah1111 13.08.20✎ 23:23 | 
        а как дождаться? задержку ставить?     | |||
| 4
    
        jah1111 13.08.20✎ 23:24 | 
        (1) да, но форма для сенсора     | |||
| 5
    
        Злопчинский 14.08.20✎ 00:12 | 
        (4) xчто значит для сенсора? железной клавы нет? если виртуальная клавиатура - и что-то не получается (хотя нихера непонятно почему) - набирай нажимаемые символы в переменную в строку и показывай ее на экране без всяких полей ввода.     | |||
| 6
    
        Злопчинский 14.08.20✎ 00:14 | 
        (4) xчто значит для сенсора? железной клавы нет? если виртуальная клавиатура - и что-то не получается (хотя ничего непонятно почему) - набирай нажимаемые символы в переменную в строку и показывай ее на экране без всяких полей ввода.     | |||
| 7
    
        jah1111 14.08.20✎ 00:36 | 
        (6) Есть резон в Ваших словах. но с Полем ввода можна работать двумя способами  - и виртуальной и железной клавой (на всякий случай).     | |||
| 8
    
        Ёпрст гуру 14.08.20✎ 00:42 | 
        (7) И ? поведение там одинаковое - курсор всегда в конце строки после ввода     | |||
| 9
    
        jah1111 14.08.20✎ 00:53 | 
        (8) ну в моем случае курсор остается в начале строки и сендкей(енд) не помагает
 реализуется клава для ввода в строку поиска на тач скрин | |||
| 10
    
        Ёпрст гуру 14.08.20✎ 01:17 | 
        (9) ты в поле ввода сам что -ле символы затаскиваешь, перехватывая нажатия кнопок ? Или что ?     | |||
| 11
    
        uno-group 14.08.20✎ 08:15 | 
        чет мне кажется что он в 1с свою виртуальную клавиатуру рисует     | |||
| 12
    
        HawkEye 14.08.20✎ 08:19 | 
        (9) код покажь ))     | |||
| 13
    
        Калиостро 14.08.20✎ 10:36 | 
        (0) А точно у тебя в коде:
 активизировать("Поле"); а не активизировать(Поле); ?? | |||
| 14
    
        jah1111 14.08.20✎ 13:01 | 
        (10) без перехвата. просто добавляю символ в поле ввода кодом Поле=СокрЛП(Поле)+"здесь сивол";     | |||
| 15
    
        jah1111 14.08.20✎ 13:03 | 
        (11) да, именно. простенькую, под полем ввода, которое явлется строкой поиска.     | |||
| 16
    
        jah1111 14.08.20✎ 13:03 | 
        (12) а код, собственно такой же:     | |||
| 17
    
        jah1111 14.08.20✎ 13:12 | 
        каждой кнопке виртуальной клав. присвоена функция ПриВыбореЗначения(Об="")
 Функция ПриВыбореЗначения(Об="") Енд = СоздатьОбъект("Wscript.Shell"); //подключаем сендкейс для эмуляции клавиши END Если Об = "" Тогда Об = Форма.АктивныйЭлемент(); // определяем активный элемент КонецЕсли; Если Об="кнЙ" Тогда // ввод бувы "Й" при нажатии на кнопку "кнЙ" к примеру Поле=СокрЛП(Поле)+"Й"; ПошукПоБукв(); // процедура в модуле которая выполняет поиск в справочнике после ввода каждого символа активизировать("Поле"); // после справочника возвращаемся назад в поле ввода с буквой Й енд.SendKeys("{END}"); // эмулируем нажатие END для переноса курсора в конец строки КонецЕсли; | |||
| 18
    
        Salimbek 14.08.20✎ 13:58 | 
        (8) в 7-ке при активизации поля курсор в начало строки лезет и весь текст обычно выделяется
 (0) Скорее всего дело в том, что в этой процедуре ты активизируешь поле, но фактически оно активизируется только _после_ выхода из этой процедуры. Т.е. ты дал команду 1С-ке - "Активизировать", и сразу же отправил ей sendkeys, но 1С-ка сначала выполнила этот самый СендКейс, потом вышла из этой процедурки и только потом активизировала поле. После чего курсор убежал в начало. Если я прав, то тут проще всего сделать так: делаешь "Активизировать" и сразу же подключаешь ОбработкаОжидания на минимум, и потом, в этой уже ОбработкеОжидания, отправляешь СендКейс и отключаешь эту самую Обработку ожидания. | |||
| 19
    
        uno-group 14.08.20✎ 14:21 | 
        чет как то все сложно. У меня цифровая клавиатура както так выглядит куча кнопок на них типа Цифра(1)
 //----------------------------------------------------------------------- Процедура Цифра(Режим); Если (Режим="+")или(Режим="-") Тогда Вычислить(); КонецЕсли; Если Режим="С" Тогда ЧислоСтр=""; Форма.Число.Заголовок(ЧислоСтр); Возврат; КонецЕсли; Если СокрЛП(ЧислоСтр)="0" Тогда ЧислоСтр=""; КонецЕсли; ЧислоСтр=ЧислоСтр+Режим; Форма.Число.Заголовок(ЧислоСтр); КонецПроцедуры //----------------------------------------------------------------------- Процедура Дел(); ЧислоСтр=Лев(ЧислоСтр,СтрДлина(ЧислоСтр)-1); Форма.Число.Заголовок(ЧислоСтр); КонецПроцедуры //----------------------------------------------------------------------- Процедура Ввод(); Вычислить(); Форма.Параметр=ЧислоСтр; Форма.Закрыть(); КонецПроцедуры | |||
| 20
    
        uno-group 14.08.20✎ 14:24 | 
        А для отлова обычной клавы.
 //------------------------------------------------ Процедура ПриНажатииКнопкиКлавиатуры(конт, код, _а, _ш, _к) Если Конт=125 Тогда //зеленая клавиша откроем документ // Сформировать(); ВыбТребование(); ИначеЕсли Конт=126 Тогда // Красная клавиша обновим список требований Форма.Закрыть(); КонецЕсли; КонецПроцедуры //******************************************* ЗагрузитьВнешнююКомпоненту("FormEx.dll"); Раскраска=СоздатьОбъект("Сервис"); Раскраска.ВключитьРаскраскуТаблиц(); Эдди=СоздатьОбъект("ADDY.ADD"); | |||
| 21
    
        jah1111 14.08.20✎ 14:53 | 
        (18)ну если вы правы то просто надо SendKeys прописать в отдельной процедуре. 
 типо: ПроцедураКурсорЕнд () Енд = СоздатьОбъект("Wscript.Shell"); енд.SendKeys("{END}"); КонецПроцедуры Функция ПриВыбореЗначения(Об="") Если Об = "" Тогда Об = Форма.АктивныйЭлемент(); КонецЕсли; Если Об="кнЙ" Тогда // ввод бувы "Й" Поле=СокрЛП(Поле)+"Й"; ПошукПоБукв(); активизировать("Поле"); ПроцедураКурсорЕнд () КонецЕсли; тогда СендКей уж точно должен после активизации выполняться или нет? | |||
| 22
    
        jah1111 14.08.20✎ 14:59 | 
        ай сори, нифига.....     | |||
| 23
    
        jah1111 14.08.20✎ 15:03 | 
        разве что прописать ПроцедураКурсорЕнд () в формуле кнопки после ПриВыбореЗначения()     | |||
| 24
    
        Salimbek 14.08.20✎ 15:23 | 
        (21) Конечно же нет. Ничего этого не сработает. По простой причине - есть Код, для выполнения, он вот и будет выполняться, с процедурами, вызовами и прочим. А вот когда он закончит выполняться, тогда и отработает "Сервисный" код. И вам надо вызвать свою команду _после_ этого "сервисного" кода.
 Для этого и пишу вам - ОбработкаОжидания. | |||
| 25
    
        Salimbek 14.08.20✎ 15:24 | 
        (23) Это тоже не поможет     | |||
| 26
    
        jah1111 14.08.20✎ 15:26 | 
        (25) почему?
 я понимаю что Вы пишете, но куда эту обработкаожидания вставить мне невдомек | |||
| 27
    
        Salimbek 14.08.20✎ 15:38 | 
        (26) В твоем коде последним пишешь:
 Форма.ОбработкаОжидания("ПроцедураКурсорЕнд",1); в этой самой ПроцедураКурсорЕнд - отправляешь свой СендКейс и отключаешь (чтобы оно каждую секунду не слало нажатие), Форма.ОбработкаОжидания("ПроцедураКурсорЕнд",0); | |||
| 28
    
        Ёпрст гуру 14.08.20✎ 16:48 | 
        В ложном закрытии формы двигай свой курсор     | |||
| 29
    
        Ёпрст гуру 14.08.20✎ 16:49 | 
        И..не помню, в какой то вк был вообще метод управления курсором, вспоминать лень     | |||
| 30
    
        jah1111 14.08.20✎ 19:06 | 
        (29) вспомните - отпишитесь     | |||
| 31
    
        jah1111 14.08.20✎ 19:06 | 
        (27) не пашет....     | |||
| 32
    
        jah1111 14.08.20✎ 19:28 | 
        (28) в двух словах, если можно...     | |||
| 33
    
        Ёпрст гуру 14.08.20✎ 19:33 | 
 | |||
| 34
    
        jah1111 14.08.20✎ 19:46 | 
        (33) Работает!!!! но слетели все примочки фрмекс из формы, шрифты.... это наверно потому что у меня при закрытии глСервис.УдалитьШрифт     | |||
| 35
    
        Злопчинский 14.08.20✎ 19:50 | 
        (34) При закрытии - да, шрифт удалить
 Если у тебя ложное закрытие - то зачем ты удаляешь шрифт? | |||
| 36
    
        Злопчинский 14.08.20✎ 19:51 | 
        капец сколько ТС нагородил...     | |||
| 37
    
        Ёпрст гуру 14.08.20✎ 20:10 | 
        (34) Возврат поставь в код     | |||
| 38
    
        Ёпрст гуру 14.08.20✎ 20:11 | 
        Если ПустоеЗначение(Вася)=0 Тогда
 Вася=""; активизировать("Поле"); ПроцедураКурсорЕнд () СтатусВозврата(0); Возврат; КонецЕсли; | |||
| 39
    
        jah1111 14.08.20✎ 20:30 | 
        (38) спасибо большое человеческое! 
 и теперь абсолютно дилетантский вопрос... Ежели Поле=СокрЛП(Поле)+"Й"; дает нам "Й" то как правильно написать "пробел"? | |||
| 40
    
        Ёпрст гуру 14.08.20✎ 20:53 | 
        (39) Поле = Поле+" ";     | |||
| 41
    
        MWWRuza гуру 14.08.20✎ 20:59 | 
        Ээээ... Или я вопрос не понял? А так:
 Поле=СокрЛП(Поле)+" "; чем не устраивает? PS Ну, в принципе - понятно чем... При вводе следующего символа таким-же методом, СокрЛП уберет пробел... Ну, тогда запоминайте пробел(точнее его наличие и количество в конце строки), в отдельной переменной, и при вводе следующего символа добавляйте перед ним пробелы в количестве, равном этой переменной. После ввода очередного символа, отличного от пробела, переменную обнуляйте... Немного через жо... Но, что делать. | |||
| 42
    
        acht 14.08.20✎ 21:05 | 
        (39) Начать вспоминать, зачем ты написал СокрЛП, не вспомнить и стереть его нахрен.     | |||
| 43
    
        jah1111 14.08.20✎ 21:10 | 
        (42) сначала надо чтоб он ввелся, експерементально доказано что он нифига не появляется в строке     | |||
| 44
    
        jah1111 14.08.20✎ 21:11 | 
        (40) записано правильно, пробел в поле ввода не появляется...     | |||
| 45
    
        Ёпрст гуру 14.08.20✎ 21:38 | 
        (44) храни строку в переменной, потом выводи в своё поле на форме     | |||
| 46
    
        Ёпрст гуру 14.08.20✎ 21:38 | 
        Тогда не надо быдет сокрЛП пихать в код     | |||
| 47
    
        Злопчинский 14.08.20✎ 21:45 | 
        я так и не понял нахрена эти все извращения...
 1. обычное поле ввода. 2. топчут клавой железной или виртуальной 3. ПриНажатииКлавиши (или ПриОтжатии...) - скулайтом получаем нужное множество 4. нужное множество из п.3 показываем на форме В ТЗ. (ТЗ - недоступная, на форме всего один активный элемент - ПОЛЕ ВВОДА, листание ТЗ - перехватом кнопок курсора, хоуменд пейджап/даун) 5. пользюк быстрее из ТЗ выберет если надо или продолжит по пп.2-5 | |||
| 48
    
        jah1111 14.08.20✎ 22:05 | ||||
| 49
    
        Злопчинский 14.08.20✎ 22:14 | 
        (48) угу, примерно так.
 правдв непонятно почему при наборе "гра" в таблице видно "апельсин" | |||
| 50
    
        jah1111 14.08.20✎ 22:20 | 
        (49) видно апельсин, но фокус на "Гранат"     | |||
| 51
    
        Злопчинский 14.08.20✎ 22:21 | 
        (50) а зачем апельчин если пользюк ищет чтото с "гра"..?     | |||
| 52
    
        Злопчинский 14.08.20✎ 22:22 | 
        (50) на таких фейсах принцип простой - не показывать и не давать пользюку лишнего. они И БЕЗ ЭТОГО КОСЯЧАТ будь здоров. а если им еще и помогать в этом...     | |||
| 53
    
        jah1111 14.08.20✎ 22:25 | 
        (51) ищет и находит.  я не делал выборку, подбор идет в стандартной таблице справочника, точно так как обычной клавой жмякать по елементам     | |||
| 54
    
        jah1111 14.08.20✎ 22:28 | 
        (52) в общем вы правы, а я - ленив...  и второй месяц как одинЭсю :) надо писать процедуру выборки из справочника всего что с "гра"     | |||
| 55
    
        Ёпрст гуру 15.08.20✎ 00:00 | 
        (48) 
 Повыкидывай везде СокрЛП, тип реквизита на форме - строка неогр длины, на кнопку пробела повесь Симв(160) потом в коде подменяй на Симв(32) через СтрЗаменить при поиске и усё. Курсорчик будет ка надо | |||
| 56
    
        Ёпрст гуру 15.08.20✎ 00:04 | 
        Ну и проще надо код писать..
 В формулах кнопок пишешь типа 
 | |||
| 57
    
        Ёпрст гуру 15.08.20✎ 00:04 | 
        ну и там, можешь хоть CapsLock через переменную, и т.д..     | |||
| 58
    
        Ёпрст гуру 15.08.20✎ 00:05 | 
        Но..если надо красиво, чтоб еще и положение курсора отслеживалось, то тут только активикс на форме, штатный контрол этого не умеет     | |||
| 59
    
        Ёпрст гуру 15.08.20✎ 00:05 | 
        какой нить текстбокс или ричтекст на форме     | |||
| 60
    
        Злопчинский 15.08.20✎ 00:11 | 
        (59) ага, к таврии прилепить сидушки от мерса и мигалку от полиции.     | |||
| 61
    
        jah1111 16.08.20✎ 15:14 | 
        Хлопцы, я так понимаю в 7.7 размеры формы програмно не меняются?     | |||
| 62
    
        Salimbek 16.08.20✎ 19:58 | 
        (61) Меняются через FormEX.     | |||
| 63
    
        jah1111 26.09.20✎ 08:51 | 
        почему  такой код работает
 ИначеЕсли Об="кнЙ" Тогда // Й Поле=СокрЛП(Поле)+"Й"; а такой нет: ИначеЕсли Об="кнЙ" Тогда // Й Поле=Поле+"Й"; напомню: Поле - поле поиска, пишется простенькая виртуальная клава для поиска в справочниках. СокрЛП стирает пробелы между словами, а иногда в запросе нужен пробел | |||
| 64
    
        jah1111 26.09.20✎ 09:27 | 
        (56) Процедура Пробел()
 Поле = Поле+Симв(160); КонецПроцедуры не знаю. не взлетает. как этот пробел реализовать? | |||
| 65
    
        trdm 26.09.20✎ 12:09 | 
        А FormEx не умет SendMessage или PostMessage?     | |||
| 66
    
        jah1111 26.09.20✎ 16:05 | 
        (65) впервые слышу и документации не нашел. 
 просто нужен пробел в рамках такого кода. или кода предложеного Йпрст | |||
| 67
    
        jah1111 26.09.20✎ 16:08 | 
        А вообще, кто может подсказать простенький алгоритм написания (или код) цифровой виртуальной клавы? как у калькулятора. Нужна такая клава для удобного ввода  в поля типа "число", особенно если точность числа>0.     | |||
| 68
    
        jah1111 27.09.20✎ 22:21 | ||||
| 69
    
        Злопчинский 27.09.20✎ 22:40 | ||||
| 70
    
        Злопчинский 27.09.20✎ 22:42 | 
        (67) в поле для ввода числа с педалькой нажим Ф4     | |||
| 71
    
        Злопчинский 27.09.20✎ 23:00 | 
        (68) это что?
 поле на форме примет значение после отработки кода. если ты к полю длиной 30 символов прибавишь еще символ - поле останется всего 30 символов, 31 пойдет в пешее эротическое. вроде уже писали выше сто раз всё... ? | |||
| 72
    
        Злопчинский 27.09.20✎ 23:01 | 
        (70) если хоочешь чтобы встроенный калбкулятор было большой - формексом на поле ввода с педалькой назначь большой шрифт     | |||
| 73
    
        alyuev 28.09.20✎ 12:20 | 
        (66) Версия FormEx 147. Объект "Окна". 
 ОтправитьКоманду(<?>) Синтаксис: ОтправитьКоманду(<wParam>,<lParam>) Назначение: Метод отсылает главному окну сообщение WM_COMMAND с заданными параметрами через функцию SendMessage(). Параметры: <wParam>, <lParam> - Параметры отправляемого окну сообщения. ПослатьКоманду(<?>) Синтаксис: ПослатьКоманду(<wParam>,<lParam>) Назначение: Метод отсылает главному окну сообщение WM_COMMAND с заданными параметрами через функцию PostMessage(). Параметры: <wParam>, <lParam> - Параметры отправляемого окну сообщения. | |||
| 74
    
        jah1111 28.09.20✎ 12:54 | 
        (69) ага, типа так. Хочу свою обработку с цифровой вирт клавой. но чтобы умела в поле ввода типа "число" цифры после запятой и бекспейс"
 Вариант "по педальке" не очень нравится, потому что там надо нажать сначала "ок", тогда значение попадает в поле ввода, а потом еще раз ок, чтоб сохранить и закрыть обработку. хочу чтобы такая обработка работала в определенном порядке, типа: заголовок "введите брутто" - вводим "450" - ок // брутто присваивается знач 450 и сразу: заголовок "введите кол. ящ." - вводим 43 - ок // кол. ящиков = 43 и т.д. когда последний параметр заполнен, последние ок закрывает форму обработки. | |||
| 75
    
        jah1111 28.09.20✎ 12:57 | 
        (71) может тысячу раз я тупой но как надо написать то? меня и так все этой самописной клаве устраивает, но иногда очень нужен пробел, а я не знаю как его реализовать в рамках моего алгоритма клавы.     | |||
| 76
    
        Злопчинский 28.09.20✎ 13:43 | 
        пробел и пробел, чего его реализовывать?
 РеквизитПолеВводаСтрокаНаФорме = СокрЛП(РеквизитПолеВводаСтрокаНаФорме)+ЧтоТо; ЧтоТо - символ(ы), которые добавляешь в поле. Если надо именно пробел добавить то добавляешь Симв(160), потом для обработки подменяешь на пробел. или добавляешь спробел с постфиксными символами если сразу понятно | |||
| 77
    
        trdm 28.09.20✎ 14:02 | 
        (73) Ну так то главному окну. А можно было и активному послать.     | |||
| 78
    
        trdm 28.09.20✎ 14:02 | 
        вернее нужно.     | |||
| 79
    
        jah1111 28.09.20✎ 14:09 | 
        (76) спасибо
 ребят, кому не жалко поделится цифровой клавой, напишите. моя, с простым добавление символом в строку не очень подходит. я так мыслю, нужен какойто математический алгоритм ввода в числовое поле | |||
| 80
    
        jah1111 28.09.20✎ 18:37 | 
        покумекав, соорудил такое:
 Функция ПриВыбореЗначения(Об="") Если Об = "" Тогда Об = Форма.АктивныйЭлемент(); КонецЕсли; //Клавиатура Если (СтрДлина(Об)=3)и(Найти("0123456789",Сред(Об,3,1))>0) Тогда // (0..9) КолЦифр = СтрДлина(Формат(Число(Поле), "ЧГ=")); Если Поле < 0 Тогда КолЦифр = КолЦифр -1; КонецЕсли; Если Поле = 0 тогда Поле=Поле+Сред(Об,3,1); ИначеЕсли Поле > 0 тогда Поле = Поле*10+ Сред(Об,3,1); Активизировать("Поле"); КонецЕсли; ИначеЕсли Об="кнЗабой" Тогда // BackSpace Поле = Число(Лев(Поле, СтрДлина(Поле)-1)); КонецЕсли; КонецФункции поделитесь мыслями, как замутить ввод после запятой (дробное число) и ввод отрицательных чисел. | |||
| 81
    
        Злопчинский 28.09.20✎ 22:17 | 
        ввод отрицательных - клавиша смены знака.
 ввод после запятой - определяешь что введена запятая, вводишь число символов после запятой - проблема в чем? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |