Всем привет, столкнулся с проблемой
Форма списка справочника, перехватываю клавиатуру.
После того, как "слышу" определенный символ, включаю Флаг стандартной обработки = 0, думал это спасет от интерактивного поиска элементов. Но не помогло (((
Так и скачет курсор по списку...
Существует ли способ обхода? Пытаюсь таким способом использовать сканер ШК
Перем мКлава;
Перем мВведенныйКод;
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Если мСлушаемКод = 1 тогда
мВведенныйКод=мВведенныйКод+ Символ;
КОнецЕсли;
Если КодКлавиши = 118 тогда
мСлушаемКод = 1;
ФСО = 0;
КОнецЕсли;
Если мСлушаемКод = 1 тогда
Если КодКлавиши = 119 тогда
сообщить("Введена такая строка: " + мВведенныйКод);
мВведенныйКод = "";
мСлушаемКод=0;
ФСО = 1;
КОнецЕсли;
КОнецЕсли;
КонецПроцедуры
мВведенныйКод = "";
мСлушаемКод = 0;
ПриНажатии и ПриОтжатии, насколько я помню, работают в паре. Если отменяется одно, то надо отменять и второе.
У меня в форме подбора справочника ПриНажатииКнопкиКлавиатуры() с ФСО=0 нажатия дальше не отрабатывают. Ничего не скачет. Без использования ПриОтжатии совсем. Перехватываю курсор (с модификаторами в том числе), таб, дел, функциональные, грей+ и т.д.
Цитата: Arbuz от 18 марта 2024, 17:57У меня в форме подбора справочника ПриНажатииКнопкиКлавиатуры() с ФСО=0 нажатия дальше не отрабатывают. Ничего не скачет. Без использования ПриОтжатии совсем. Перехватываю курсор (с модификаторами в том числе), таб, дел, функциональные, грей+ и т.д.
Аналогично.
Столько форм и решений на этом уже построено...
Цитата: GRUNGO от 18 марта 2024, 16:40Пытаюсь таким способом использовать сканер ШК
Опиши конкретнее задачу - что надо сделать/что хочется сделать?
пинок: сканирование от ручного ввода отличается интервалами между приходами символов. вот готсюда если надо - можно и танцевать...
или настрой префикс у сканера Ф7 - по префиксу открывай форму с одним единственным полем, принимай в него скан полный, и возвращай с поиском или что там надо... На ИС как минимум одно готовое решение лежит на этом принципе - принимает нажатия клавиш и если это идет со сканера (быстрый набор) - то генерит обработку внешнего события, то есть является драйвером клавиатурного сканера, PUBID 75804
всё оказалось проще ))
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Если мСлушаемКод = 1 тогда
ФСО = 0; // <<<<<============= ВОТ ТУТ ЗАБЫЛ ВОТКУНТЬ ФСО )))
мВведенныйКод=мВведенныйКод+ Символ;
КОнецЕсли;
Цитата: Злоп от 18 марта 2024, 20:55Цитата: GRUNGO от 18 марта 2024, 16:40Пытаюсь таким способом использовать сканер ШК
Опиши конкретнее задачу - что надо сделать/что хочется сделать?
да как обычно... подключить сканер ШК
нормальным путем пройти не удалось, пользователи сидят в VDI на raspberry, база в терминале на 2016 винде
с пробросом COM порта проблемы
1) они тупо не создаются и не эмулируются в VDI (чую, что еще и админы что-то недоговаривают ;D )
2) библиотеки на оф. ресурсах не нашел, сам с торговым оборудованием не работал лет 20, а друзей семерошников не осталось, я в городе походу краснокнижный
пойду сейчас по пути перехвата клавиатуры, попробую без открытия формы (гуляет в интернете пример)
на самом деле, каюсь, что многие годы не уделял внимания formex, у меня только раскраска работала
недавно переежали на вин2016, решая конфликт с 1с++ зашел в давно не посещаемую кладовочку и был в шоке от количества скачивания последней версии библиотеки, спасибо АЛьФу и всем кто причастен
https://infostart.ru/1c/tools/75804/ - смотрел?
посмотрю, вариант хороший, спасибо
Цитата: Злоп от 19 марта 2024, 08:48https://infostart.ru/1c/tools/75804/ - смотрел?
Я тоже посмотрел. Там есть такое:
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) Экспорт
Если ФСО=0 тогда Возврат; КонецЕсли;
На кой это? Зачем проверять ФСО при входе в процедуру и в каком случае условие может соблюстись (т.е. бывает так, что на входе ФСО=0)?
Похоже на воркэраунд какого-то бага.
Процедуру и искуственно можно вызвать
Цитата: Злоп от 21 марта 2024, 16:55Процедуру и искуственно можно вызвать
Ага, ещё и рекурсивно ;D
Всё равно не вижу смысл проверки ФСО=0 первой строкой.
Если уж зашел вопрос про клавиши, чуть ОФФ, не хочу плодить темы, напишу сюда.
А можно добавить метод, возвращающий текущее состояние клавиши?
Я сейчас использую для этого ВК KeyState от trdm, все работает, нет проблем. Но, это лишняя загружаемая ВК... А ФормЕкс уже и так загружен, зачем "плодить сущности" - ?
Цитата: MWW_Ruza от 21 марта 2024, 19:08Если уж зашел вопрос про клавиши, чуть ОФФ, не хочу плодить темы, напишу сюда.
А можно добавить метод, возвращающий текущее состояние клавиши?
Я сейчас использую для этого ВК KeyState от trdm, все работает, нет проблем. Но, это лишняя загружаемая ВК... А ФормЕкс уже и так загружен, зачем "плодить сущности" - ?
Это?
СостояниеКлавиатуры(<?>,)
Синтаксис:
СостояниеКлавиатуры(<ИмяКнопки>,<Состояние>)
Параметры:
<ИмяКнопки> - строка с именем кнопки (возможные значения: "CapsLock","NumLock","ScrollLock")
<Состояние> - устанавливаемое состояние кнопки 1 - включено, 0 -выключено.
Цитата: АЛьФ от 21 марта 2024, 20:10СостояниеКлавиатуры(<?>,)
Это как-бы простое СостояниеКлавиатуры, а ещё неплохо было иметь функцию типа РасширенноеСостояниеКлавиатуры()
Что-то типа https://learn.microsoft.com/ru-ru/dotnet/api/system.windows.forms.sendkeys?view=windowsdesktop-7.0 SendKeys Класс
И конечно, чтобы можно было получить сочетание одновременно нажатых/отжатых клавиш.
А если ещё сразу будет возвращаться данные в каком месте диалогового окна было произведено нажатие, то наверное такой функционал на 99% закроет все "хотелки".
Цитата: Forum123 от 21 марта 2024, 20:45Цитата: АЛьФ от 21 марта 2024, 20:10СостояниеКлавиатуры(<?>,)
Это как-бы простое СостояниеКлавиатуры, а ещё неплохо было иметь функцию типа РасширенноеСостояниеКлавиатуры()
Что-то типа https://learn.microsoft.com/ru-ru/dotnet/api/system.windows.forms.sendkeys?view=windowsdesktop-7.0 SendKeys Класс
И конечно, чтобы можно было получить сочетание одновременно нажатых/отжатых клавиш.
Опять не понял. Аналог SendKeys это:
ЭмулироватьКлавиатуру(<?>,,)
Синтаксис:
ЭмулироватьКлавиатуру(<Строка>,<Ждать>,<Раскладка>)
Назначение:
Метод предназначен для программной эмуляции нажатий кнопок на клавиатуре.
Параметры:
<Строка> - строка для отсылки в буфер клавиатуры (подробнее см. документацию по методу SendKeys из WSH);
<Ждать> - необязательный флаг: 1 - продолжать программу только после обработки сообщения клавиатуры Windows; 0 - продолжить выполнение, не дожидаясь обработки сообщения (по умолчанию).
<Раскладка> - Необязательный параметр. Строка с наименованием раскладки или число, соответствующее следующим раскладкам:
1 - "English (United States)" (по умолчанию);
2 - "Russian";
3 - "Ukrainian";
4 - "Belarusian";
5 - "German (Germany)";
6 - "French (France)".
ПРИМЕР:
Процедура МаксимизироватьОкно()
Сервис = СоздатьОбъект("Сервис");
Сервис.SendKeys("%");
Сервис.SendKeys("{LEFT}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}");
КонецПроцедуры
Цитата: АЛьФ от 21 марта 2024, 20:54ЭмулироватьКлавиатуру(<?>,,)
Как по мне, то как для C++-ника, но учитывая что программа 1С 7.7, то наверное функционал для а-ля 1С.
Надеюсь форумчане в комментах уточнят какую информация им нужна.
Не исключаю, что лучше иметь несколько функций.
Типа одна коды и названия клавиш возвращает, другая тип области диалогового окна, ...
Цитата: АЛьФ от 21 марта 2024, 20:10Это?
СостояниеКлавиатуры(<?>,)
Синтаксис:
СостояниеКлавиатуры(<ИмяКнопки>,<Состояние>)
Параметры:
<ИмяКнопки> - строка с именем кнопки (возможные значения: "CapsLock","NumLock","ScrollLock")
<Состояние> - устанавливаемое состояние кнопки 1 - включено, 0 -выключено.
Похоже... Только возможных значений маловато... Только капс, нум, и скрол? А шифт, альт, контрол - ?
А.... Понял, это только кнопки с " фиксацией" А те, которые "удерживать надо" - ?
Не, ТС хочет чтобы получать текущее состояние шифт, контрол, альт и еще может какие служебные...
https://infostart.ru/1c/tools/1787209/ - пост 10, там же и определение через 1С++ есть
Цитата: Злоп от 22 марта 2024, 00:13https://infostart.ru/1c/tools/1787209/ (https://infostart.ru/1c/tools/1787209/) - пост 10, там же и определение через 1С++ есть
19-й пост также интересен
Из документации к ВК TableDoc:
Раздел VI
Класс Клавиатура / Keyboard
Свойства
<ИмяВиртуальнойКлавиши>
Доступ: чтение
Тип: число
Описание: Значение виртуальной клавиши.
Примеры доступа к значениям виртуальных клавиш:
Клавиатура.VK_SHIFT
Клавиатура.VK_CONTROL
Клавиатура.VK_ESCAPE
Клавиатура.VK_UP
Клавиатура.VK_DOWN
С полным списком имен виртуальных клавиш можно ознакомится в MSDN.
Например тут http://msdn.microsoft.com/en-us/library/ms645540.aspx
или тут http://msdn.microsoft.com/en-us/library/ms927178.aspx
Методы
ПолучитьСостояниеКлавиши / GetKeyState
Синтаксис: ПолучитьСостояниеКлавиши(<ВиртКод>, <ВклРежим>)
Параметры: <ВиртКод> - Код виртуальной клавиши.
<ВклРежим> - Возвращаемый. Необязательный. Имеет смысл для переключаемых клавиш таких как CAPS LOCK.
1 - клавиша включена (toggled), 0 - клавиша выключена (untoggled).
Возврашает: Текущее состояние клавиши: 1-нажата, 0-не нажата.
Описание: Позволяет определить состояние любой клавиши. Например в момент обработки события нажатия одной из клавиш.
ПолучитьИмяКлавиши / GetKeyNameText
Синтаксис: ПолучитьИмяКлавиши(<Данные>, <Режим>)
Параметры: <Данные> - Число, в двоичном коде которого: биты 16-23 - сканкод, 24-флаг расширенной клавиатуры.
В качестве значения можно передавать параметр <Данные> клавиатурных событий таких как ПриНажатииКлавиши().
<Режим> - включает режим безразличия к расположению клавиши на клавиатуре.
Например левый или правый CTRL и SHIFT.
Возврашает: Строку-представление имени клавиши.
Описание: Строка может зависеть от текущей локали.
Цитата: Злоп от 22 марта 2024, 00:13Не, ТС хочет чтобы получать текущее состояние шифт, контрол, альт и еще может какие служебные.
Ещё добавить события типа: "ДетальнаяСтрока", "Заголовок", ...
Тогда код модуля будет проще.
Ещё бы в 1С 7.7 добавить (если это возможно) функционал для работы с диалоговыми формами наподобие как в восьмёрке (настройки пользователем, ...).
Цитата: Forum123 от 22 марта 2024, 08:34Цитата: Злоп от 22 марта 2024, 00:13Не, ТС хочет чтобы получать текущее состояние шифт, контрол, альт и еще может какие служебные.
Ещё добавить события типа: "ДетальнаяСтрока", "Заголовок", ...
Тогда код модуля будет проще.
Цитата: Forum123 от 22 марта 2024, 08:57Ещё бы в 1С 7.7 добавить (если это возможно) функционал для работы с диалоговыми формами наподобие как в восьмёрке (настройки пользователем, ...).
Я вот уже вообще потерялся о чем это и как должно выглядеть.
Цитата: АЛьФ от 22 марта 2024, 09:06Я вот уже вообще потерялся о чем это и как должно выглядеть.
Чтобы пользователь мог сделать меньше/больше ширину поля, переместить поле в другое место формы, поменять шрифт. форматирование, ...
Конечно эту информацию нужно как-то сохранять и при открытии формы применять.
Посмотреть какие новые свойства полей в восьмёрку добавили и для для начала реализовать их в 1С 7.7.
Цитата: Forum123 от 22 марта 2024, 09:12Чтобы пользователь мог сделать меньше/больше ширину поля,
Честно говоря у меня всё предложенное реализовано (и его совершенно не сложно реализовать).
Сохраняются свойства полей диалоговой формы в xml файлах и при открытии диалоговой формы применяются.
В глобальном модуле имеются две процедуры: "Сохранить свойства диалоговой формы" и восстановить.
Если в formex добавить аналогичный функционал, то было бы просто удобнее.
Цитата: Forum123 от 22 марта 2024, 09:12Цитата: АЛьФ от 22 марта 2024, 09:06Я вот уже вообще потерялся о чем это и как должно выглядеть.
Чтобы пользователь мог сделать меньше/больше ширину поля, переместить поле в другое место формы, поменять шрифт. форматирование, ...
Конечно эту информацию нужно как-то сохранять и при открытии формы применять.
Посмотреть какие новые свойства полей в восьмёрку добавили и для для начала реализовать их в 1С 7.7.
если я правильно понял, все это реализуемо существующими средствами компоненты.
Цитата: Forum123 от 22 марта 2024, 09:35Цитата: Forum123 от 22 марта 2024, 09:12Чтобы пользователь мог сделать меньше/больше ширину поля,
Честно говоря у меня всё предложенное реализовано (и его совершенно не сложно реализовать).
Сохраняются свойства полей диалоговой формы в xml файлах и при открытии диалоговой формы применяются.
В глобальном модуле имеются две процедуры: "Сохранить свойства диалоговой формы" и восстановить.
Если в formex добавить аналогичный функционал, то было бы просто удобнее.
Боюсь, что нет.
Цитата: АЛьФ от 22 марта 2024, 10:07Боюсь, что нет.
У меня этот функционал реализован и для восьмёрки.
Так что он как бы расширяет возможности для восьмёрки.
Диалоговые формы 1С 7.7 без всяких доработок с использованием xml можно перенести в восьмёрку.
Через какое-то время поделюсь ActiveX, который корректно функционирует с диалоговыми формами в 1С 7.7 и восьмёрке.
Ныне пока публиковать не буду потому, что планирую добавить разную новую функциональность.
Посты были не для хвастовства, а для обмена опытом.
Для каждого пользователя имеется свой набор xml.
Также в xml имеется node для установки прав на использование полей и формы.
Весьма удобно!
Цитата: Arbuz от 21 марта 2024, 17:52Ага, ещё и рекурсивно ;D
Всё равно не вижу смысл проверки ФСО=0 первой строкой.
ну, может действительно там от отладки какой-нибудь осталось.
Код подробно там не смотрел, одну ошибку нашел, поправили, у себя проверил - вроде работает - ну и положил в запасники.