Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: A.n.d.r.e.w от 10.03.25, 14:59:53

Название: Пользовательский контрол в панели свойств.
Отправлено: A.n.d.r.e.w от 10.03.25, 14:59:53
Привет форум. Делаю свой activex контрол для панели свойств процесса.
Там у меня разные контролы с полем ввода текста.
Все вроде хорошо, но проблема с Esc. Когда ввожу текст например в Edit то нажимая Esc хочу
чтобы прекратилось редактирование и вернулся прежний текст, а вместо этого останавливается процесс.
Мой контрол сообщения о нажатии кнопки не получает. Может кто сталкивался?
Как обработать нажатие Esc своим контролом и не дать остановить процесс?
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: A.n.d.r.e.w от 11.03.25, 09:58:16
Администратор, а перенесите мой вопрос в ветку "Программирование приложений" пожалуйста. Чет я зря в "Delphi" написал. Спасибо!
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: UU от 11.03.25, 11:23:58
Цитата: A.n.d.r.e.w от 11.03.25, 09:58:16Администратор, а перенесите мой вопрос в ветку "Программирование приложений" пожалуйста. Чет я зря в "Delphi" написал. Спасибо!
Какой от этого смысл?
Тут его контролировать нужно - ButtonClick, надеюсь интерфейс события понятен, дальше сами.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: Vi2 от 11.03.25, 12:02:08
Я бы попробовал подцепиться к KeyDown-KeyPress-KeyUp, но не уверен, всё же ESC и ENTER могут быть спецсимволами Компаса.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: A.n.d.r.e.w от 11.03.25, 12:24:04
Цитата: UU от 11.03.25, 11:23:58Тут его контролировать нужно - ButtonClick,
надеюсь интерфейс события понятен, дальше сами.
действительно тут обрабатывается нажатие клавиши Esc
но в данном случае оно дублирует нажатие спецкнопки "Отменить"
такой с красным крестом на спецпанели.
Да это получается ButtonClick. Но во первых как не дать остановиться процессу
может быть даже используя этот обработчик события.
А во вторых все-таки сообщение должен получить Edit моего OCX,
который, как я понимаю работает вообще в другом адресном пространстве,
и получает сообщения напрямую от ОС.
Edit находится в фокусе обрабатывает нажатия других клавиш без проблем.
Так вот событие KeyPress c Key=#27 не происходит.
Так как прерывается процесс и мои OCX уничтожаются.
Как будто Компас перехватывает сообщения KeyPress и решает сам что делать.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: UU от 11.03.25, 12:37:46
Самому обрабатывать и говорить Компасу, что оно обработано.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: A.n.d.r.e.w от 11.03.25, 12:42:33
Цитата: UU от 11.03.25, 12:37:46Самому обрабатывать и говорить Компасу, что оно обработано.
т.е. в обработчике ButtonClick библиотеки я вызываю какой-нибудь метод моего Activex контрола о том что нажата Escape ?
ну ладно, я думал об этом, хотя это похоже на трансректальный подход. Ну а как процесс то не дать остановить?
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: UU от 11.03.25, 13:18:09
Цитата: A.n.d.r.e.w от 11.03.25, 12:42:33Ну а как процесс то не дать остановить?
SDK читайте.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: Vi2 от 11.03.25, 22:17:41
Цитата: A.n.d.r.e.w от 11.03.25, 12:24:04Так вот событие KeyPress c Key=#27 не происходит
Ну есть ещё KeyUp и KeyDown. Нужно бы их проверить.
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: Doom2 от 11.03.25, 22:30:51
Цитата: A.n.d.r.e.w от 11.03.25, 12:24:04Так вот событие KeyPress c Key=#27 не происходит.
Если уж так хочется использовать эту кнопку тогда нужно позаботится что бы ее нажатие не дошло до самого Компаса.

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

Или временное переназначение клавиш RegisterHotKey
Название: Re: Пользовательский контрол в панели свойств.
Отправлено: A.n.d.r.e.w от 12.03.25, 11:58:20
Цитата: 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 так и не получает (.
Понимаю, что можно дергать теперь вручную, или хуки всякие ставить,
но не правильно это как-то.