11.10.2002, 15:42 | #1 |
Участник
|
messgeProc и installMessageProc
Добрый день,
Вот понадобилось использовать функция FormRun::messageProc. Простая перегрузка этой функции результата не дает, приложение ведет себя так, как будто бы я ничего не перегружал и функцию не вызывает. Поэтому появилась мысль, что неплохо бы сначала задействовать FormRun::installMessageProc, и тут начались проблемы. В документации прототип этой функции объявлен примерно так: installMessageProc( ,FormControl _c, int _message); Непонятно, какой у нее первый параметр и есть ли он вообще, вызов функции без первого параметра приводит к ошибке. Если попытаться что-нибудь передать, то выдается ошибка несовместимости типов. Может быть кто-нибудь удачно работал с этими функциями? С уважением, программист группы компаний "Счастливый Кроха". |
|
11.10.2002, 16:07 | #2 |
Administrator
|
А можно поподробней? Каким образом ты хочешь ее использовать (в смысле 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 |
Участник
|
Экспериментальным путем было выяснено, что первым параметром надо передавать массив типа int. Но это не сильно прояснило ситуацию, так как теперь вылетает ошибка времени выполнения, о вызове функции с неправильными параметрами.
|
|
11.10.2002, 16:09 | #4 |
Участник
|
2 Maxim Gorbunov:
Мне надо перехватить нажатие кнопок в listviewcontrol'e. Я думаю, что если перегрузить messageProc и отслеживать события WM_KEYDOWN, то это можно реализовать. Вот. |
|
11.10.2002, 16:21 | #5 |
Administrator
|
А, вспомнил. Ты уже писал сюда, только в другой теме.
Так а как твои эксперименты с 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 |
Участник
|
Цитата:
Изначально опубликовано Maxim Gorbunov
А, вспомнил. Ты уже писал сюда, только в другой теме. Так а как твои эксперименты с task прошли? |
|
11.10.2002, 16:52 | #7 |
Administrator
|
Цитата:
Изначально опубликовано 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 |
Administrator
|
Пробился на 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  messagehook 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 |
Banned
|
Рекомендую посмотреть метод TableLookup_RU.waitAndSearch().
Очень познавательно. |
|
17.10.2002, 09:10 | #10 |
Участник
|
Спасибо. Действительно очень познавательно.
|
|