Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > нажатие кнопки на форме


Автор: Imidazol 13.1.2009, 10:24
Добрый день!
У меня проблема такая, что по поверхности всей  главной Form1 стоит Image1, и на её Canvasе происходят все действия. Но мне надо улавливать нажатие клавиши, а ни один из методов Form1::OnKeyPressed, Form1::OnKeyUp не срабатывает при нажатии (я там маячок поставил). А у TImage такого метода, как OnKeyPressed нету. Как можно было бы отловить нажатие клавиши, никто не подскажет?
Спасибо.

Автор: mrbrooks 13.1.2009, 10:47
Цитата(Imidazol @  13.1.2009,  10:24 Найти цитируемый пост)
А у TImage такого метода, как OnKeyPressed нету. Как можно было бы отловить нажатие клавиши, никто не подскажет?

тут есть два способа. описать новое событие через карту событий, либо перегрузить функцию WindowProc компонента.

Автор: xvr 13.1.2009, 13:16
Проперть KeyPreview в true не забыл поставить у формы?

Автор: mrbrooks 13.1.2009, 13:41
xvr, камрад а при чем тут форма - он же про TImage говорил.

Автор: Imidazol 13.1.2009, 14:24
Цитата(mrbrooks @ 13.1.2009,  10:47)
тут есть два способа. описать новое событие через карту событий, либо перегрузить функцию WindowProc компонента.

KeyPreview у меня стояла true. 
Я именно и хочу разобраться, почему у меня форма не получает KeyPress, ведь она родитель, через неё в первую очередь все нажатия идут.
А про кату событий и WindowProc мне не понятно, я глубже интерфейса Borlandского не залазил ешё.

Добавлено через 8 минут и 43 секунды
Oй! всем спасибо! У меня до этого уже Release был в Compilere, а я обратно FullDebug поставил и всё чудесным образом заработало!!!

Автор: xvr 13.1.2009, 15:23
Цитата(mrbrooks @ 13.1.2009,  13:41)
xvr, камрад а при чем тут форма - он же про TImage говорил.

Угу, только события он ловит на форме, а не у TImage (ибо нет их там  smile )

Автор: mrbrooks 13.1.2009, 15:36

Цитата(xvr @  13.1.2009,  15:23 Найти цитируемый пост)
Угу, только события он ловит на форме, а не у TImage (ибо нет их там  smile ) 

обожди. как это нет smile просвети. или ты имеешь ввиду наследование?

Автор: Imidazol 13.1.2009, 15:49
Эй, ребята! Я уже разобрался! Хватит здесь продолжать без меня!!! smile 

Автор: xvr 13.1.2009, 15:57
Цитата(mrbrooks @ 13.1.2009,  15:36)
Цитата(xvr @  13.1.2009,  15:23 Найти цитируемый пост)
Угу, только события он ловит на форме, а не у TImage (ибо нет их там  smile ) 

обожди. как это нет smile просвети. 

Так. Вот события у TImage:
Код

    __property OnClick ;
    __property OnContextPopup ;
    __property OnDblClick ;
    __property OnDragDrop ;
    __property OnDragOver ;
    __property OnEndDock ;
    __property OnEndDrag ;
    __property OnMouseDown ;
    __property OnMouseMove ;
    __property OnMouseUp ;
    __property OnProgress;
    __property OnStartDock ;
    __property OnStartDrag ;
 Как видим, OnKeyPressed нету  smile 

Автор: mrbrooks 13.1.2009, 15:59
Цитата(xvr @  13.1.2009,  15:57 Найти цитируемый пост)
Как видим, OnKeyPressed нету  smile  

дык не кто и не спорит что оно есть. яж что писал то
Цитата(mrbrooks @  13.1.2009,  10:47 Найти цитируемый пост)
тут есть два способа. описать новое событие через карту событий, либо перегрузить функцию WindowProc компонента. 

то бишь самому написать.

Автор: xvr 13.1.2009, 16:14
Цитата(mrbrooks @ 13.1.2009,  15:59)
Цитата(xvr @  13.1.2009,  15:57 Найти цитируемый пост)
Как видим, OnKeyPressed нету  smile  

дык не кто и не спорит что оно есть. яж что писал то
Цитата(mrbrooks @  13.1.2009,  10:47 Найти цитируемый пост)
тут есть два способа. описать новое событие через карту событий, либо перегрузить функцию WindowProc компонента. 

то бишь самому написать.

Или ловить его на форме, куда оно в конце концов упадет, если у формы стоит проперть KeyPreview, о чем собственно я и писал.
Вопрос в том, где надо ловить клавиши - только на TImage (тогда твой вариант предпочтительнее) или везде по форме (тогда ловить на форме предпочтительнее, не говоря уже о том, что это проще  smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)