x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #5 : 14-12-2005 07:35 » |
|
всё правильно. следует различать две вещи: событие, которое генерит винда, и событие, которое обрабатывает прога. допустим, в проге есть обработчик на OnKeyUp. в этом случае при нажатии клавиши винда сгенерит три сообщения: WM_KEYDOWN, WM_KEYUP, WM_KEYPRESS (или как его там, по матери?). но прога отработает только то, на которое у неё назначен обработчик, в нашем случае - WM_KEYUP. вот именно в этом заключаются ваши грабли. что вы делаете? вы:
1. говорите окну, что нажат Ctrl. (вы не нажимаете его в действительности! вы просто говорите окну, что он был нажат! если обработчик в проге висит только на OnKeyUp - он просто пропустит это сообщение мимо ушей!) 2. говорите окну, что был нажат Enter. и т.д.
в действительности, я подозреваю, что в программе всего один обработчик, какой-нибудь OnKeyPress, который и получает два Enter'a.
Сочетание некоторых клавиш с функциональной иногда имеет свой собственный код, отличный от кодов самих клавиш. для Enter - это 13, для Ctrl+Enter - это 10. сделайте вот так:
PostMessage(h,WM_KEYUP, 10, 0);
и, я думаю, будет счастье.
|