AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2002, 15:42   #1  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
? messgeProc и installMessageProc
Добрый день,
Вот понадобилось использовать функция FormRun::messageProc. Простая перегрузка этой функции результата не дает, приложение ведет себя так, как будто бы я ничего не перегружал и функцию не вызывает. Поэтому появилась мысль, что неплохо бы сначала задействовать FormRun::installMessageProc, и тут начались проблемы. В документации прототип этой функции объявлен примерно так:

installMessageProc( ,FormControl _c, int _message);

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

Может быть кто-нибудь удачно работал с этими функциями?

С уважением, программист группы компаний "Счастливый Кроха".
Старый 11.10.2002, 16:07   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
А можно поподробней? Каким образом ты хочешь ее использовать (в смысле messageProc)? Если честно, то просто интересно.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 11.10.2002, 16:07   #3  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Экспериментальным путем было выяснено, что первым параметром надо передавать массив типа int. Но это не сильно прояснило ситуацию, так как теперь вылетает ошибка времени выполнения, о вызове функции с неправильными параметрами.
Старый 11.10.2002, 16:09   #4  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
2 Maxim Gorbunov:
Мне надо перехватить нажатие кнопок в listviewcontrol'e. Я думаю, что если перегрузить messageProc и отслеживать события WM_KEYDOWN, то это можно реализовать. Вот.
Старый 11.10.2002, 16:21   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
А, вспомнил. Ты уже писал сюда, только в другой теме.

Так а как твои эксперименты с task прошли?

А по поводу messageProc. Цитата из руководства разработчика:
Цитата:
messageProc - Do not use. For internal use only.
Подумай, надо ли тебе это.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 11.10.2002, 16:46   #6  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Цитата:
Изначально опубликовано Maxim Gorbunov
А, вспомнил. Ты уже писал сюда, только в другой теме.

Так а как твои эксперименты с task прошли?

В task удается отловить Shift-Enter, а мне хочется ctrl-Enter :))) Пока использую task как черновой вариант :), но messageProc дает поистине безграничные возможности :))))
Старый 11.10.2002, 16:52   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано rumpleteazer

но messageProc дает поистине безграничные возможности )))
Откуда такая уверенность?

Вообще-то здесь тебе вряд ли кто-то ответит. Пиши на TechNet. А лучше просто поищи там инфу по messageProc. Если повезет - найдешь ответ Technet Author.

Попробуй. Я что-то сегодня не могу туда простучаться. Админы душат.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 11.10.2002, 17:32   #8  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Пробился на TechNET!!!!

В одном сообщении про installMessageProc у них в discussions есть интересные слова:
Цитата:
I've got an answer from service system. The method seems to be not usable. It will be correctly implemented in version 3.
Вот так.

А вот другое обсуждение.
Цитата:
This is a classic Axapta problem.
It is as far as I know not possible to override Axapta shortcuts.
The suggested "SysSetupFormRun.task()" approach is not an option for your problem unless you want to use and override the existing Axapta tasks (e.g. New Record, Next Record ...)
The other suggested approach using TDC's DLL used in the SFC module is not an option either. What the DLL do is that it maps the F-keys with the appropiate ALT keys (e.g. F1 = ALT1, F2 = ALT2). Furthermore you can not catch the ALT keys anyway. They need to be Axapta auto generated shotcuts. This can be achieved on bottons but not in your grid.
So if you prefer to use the AFC DLL you need to create a button with a caption that automatically unserlines (auto shortcuts) a number (1 to 9).

I can suggest a possible solution to your problem though:
You need to have an ActiveX control that implements a Windows message hook wich triggers an event whenever a key is pressed. This event you will be able to handle in Axapta.
If you choose to write the ActiveX component yourself remember to forward the messages you hook to the system. Otherwise Axapta will not get the messages.
I also think you might run in to trouble or should I say that you should be aware that a Windows &nbspmessagehook can only take the actual Axapta instance as a parameter and not the Windows handle of your form thus you can only catch messages in Axapta general and not filter it to only be messages directed to your specific form.

If you're not able to write the ActiveX yourself try to find one on the internet.
You can start at http://www.avenir.net/downloads/products/aveactivex.htm
I have not tried it myself but it seems to do almost what you need.

I think in future versions of Axapta we will be able to do catch Windows messages. The class SysSetupFormRun has the methods "messageProc" and "installMessageProc" which do not seem to be fully implemented yet.
Уррра! Вам предлагают решение.

Только вот сам факт того, что его предлагают, кажется, свидетельствует о том, что более простого решения не существует.

Смотрите. Вам решать
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.10.2002, 11:59   #9  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Рекомендую посмотреть метод TableLookup_RU.waitAndSearch().
Очень познавательно.
Старый 17.10.2002, 09:10   #10  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
:)
Спасибо. Действительно очень познавательно.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:48.