• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Пользовательский контрол в панели свойств.

Автор A.n.d.r.e.w, 10.03.25, 14:59:53

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

A.n.d.r.e.w

Привет форум. Делаю свой activex контрол для панели свойств процесса.
Там у меня разные контролы с полем ввода текста.
Все вроде хорошо, но проблема с Esc. Когда ввожу текст например в Edit то нажимая Esc хочу
чтобы прекратилось редактирование и вернулся прежний текст, а вместо этого останавливается процесс.
Мой контрол сообщения о нажатии кнопки не получает. Может кто сталкивался?
Как обработать нажатие Esc своим контролом и не дать остановить процесс?

A.n.d.r.e.w

Администратор, а перенесите мой вопрос в ветку "Программирование приложений" пожалуйста. Чет я зря в "Delphi" написал. Спасибо!

UU

Цитата: A.n.d.r.e.w от 11.03.25, 09:58:16Администратор, а перенесите мой вопрос в ветку "Программирование приложений" пожалуйста. Чет я зря в "Delphi" написал. Спасибо!
Какой от этого смысл?
Тут его контролировать нужно - ButtonClick, надеюсь интерфейс события понятен, дальше сами.

Vi2

Я бы попробовал подцепиться к KeyDown-KeyPress-KeyUp, но не уверен, всё же ESC и ENTER могут быть спецсимволами Компаса.

A.n.d.r.e.w

Цитата: UU от 11.03.25, 11:23:58Тут его контролировать нужно - ButtonClick,
надеюсь интерфейс события понятен, дальше сами.
действительно тут обрабатывается нажатие клавиши Esc
но в данном случае оно дублирует нажатие спецкнопки "Отменить"
такой с красным крестом на спецпанели.
Да это получается ButtonClick. Но во первых как не дать остановиться процессу
может быть даже используя этот обработчик события.
А во вторых все-таки сообщение должен получить Edit моего OCX,
который, как я понимаю работает вообще в другом адресном пространстве,
и получает сообщения напрямую от ОС.
Edit находится в фокусе обрабатывает нажатия других клавиш без проблем.
Так вот событие KeyPress c Key=#27 не происходит.
Так как прерывается процесс и мои OCX уничтожаются.
Как будто Компас перехватывает сообщения KeyPress и решает сам что делать.

UU

Самому обрабатывать и говорить Компасу, что оно обработано.

A.n.d.r.e.w

Цитата: UU от 11.03.25, 12:37:46Самому обрабатывать и говорить Компасу, что оно обработано.
т.е. в обработчике ButtonClick библиотеки я вызываю какой-нибудь метод моего Activex контрола о том что нажата Escape ?
ну ладно, я думал об этом, хотя это похоже на трансректальный подход. Ну а как процесс то не дать остановить?

UU


Vi2

Цитата: A.n.d.r.e.w от 11.03.25, 12:24:04Так вот событие KeyPress c Key=#27 не происходит
Ну есть ещё KeyUp и KeyDown. Нужно бы их проверить.
+ Благодарностей: 1

Doom2

Цитата: A.n.d.r.e.w от 11.03.25, 12:24:04Так вот событие KeyPress c Key=#27 не происходит.
Если уж так хочется использовать эту кнопку тогда нужно позаботится что бы ее нажатие не дошло до самого Компаса.

Скорее всего это можно сделать через SetWindowsHookExA

Или временное переназначение клавиш RegisterHotKey

A.n.d.r.e.w

Цитата: UU от 11.03.25, 13:18:09SDK читайте.
За помощью на форум обращаются когда не хватает времени или/и терпения.
А так-то SDK читаем регулярно.
Часть проблемы решить удалось.
в SDK для событий ksKompasObjectNotify KeyPress, KeyDown, KeyUp написано следующее:
Цитировать3. Если библиотека обработала событие нажатия клавиши
и нужно запретить обработку события другими подписчиками,
то нужно обнулить код клавиши т.е. *key = 0 и вернуть FALSE,
если нужно запретить обработку события системой КОМПАС.
Но событие ksKompasObjectNotify KeyPress не происходит для Escape
как ни старайся, зато происходит KeyDown. И если в обработчике
вернуть false, то процесс не прерывается.
Вторая часть проблемы осталась. Edit внутри моего OCX сообщений
от кнопки Escape так и не получает (.
Понимаю, что можно дергать теперь вручную, или хуки всякие ставить,
но не правильно это как-то.