|
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
|
ввод отрицательных - клавиша смены знака.
ввод после запятой - определяешь что введена запятая, вводишь число символов после запятой - проблема в чем? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |