Делаю свой модифицированный TreeView. Требуется выполнения некой операции по нажатию на пробел. Перехватывал событие по разному — во всех случаях, перед перехватом обязательно раздается "Бамп!" — звук неверной операции. Как его удушить? Подозреваю, что при отсутствии звуковухи будет пищать спикер, что вовсе неприемлемо!
Вот куски кода:
Файл CheckTreeView.h
class PACKAGE TCheckTreeView : public TTreeView
{
public:
__fastcall TCheckTreeView(TComponent* Owner);
protected:
//DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift); // Пробовал и так - результат аналогичен
void __fastcall WMKeyDown(TWMKey Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_KEYDOWN, TWMKey, WMKeyDown)
END_MESSAGE_MAP(TPersistent) // Добрался до TPersistent-а начиная с TTreeView, все так же.
...
Файл CheckTreeView.cpp
void __fastcall TCheckTreeView::WMKeyDown(TWMKey Message)
{
DEBUG_PRINT("Перехватили событие нажатия на клавишу"); // Трям есть. DEBUG_PRINT - макрос пишущий сообщения в Event Log
}
// Пытался удушить у предка - фиг вам
void __fastcall TWinControl::KeyDown(Word &Key, Classes::TShiftState Shift)
{
if(VK_SPACE == Key)
{
DEBUG_PRINT("TWinControl: Нажали на пробел");
}
}
Ваще не пойму на какую тему гуглить :-)
сам то я по delphi и от сишного кода у меня волосы дыбом

но по-моему ты вот тут key=0; напиши. Тогда дальше нажатие не пойдет.
[code]
V> // Пытался удушить у предка — фиг вам
V> void __fastcall TWinControl::KeyDown(Word &Key, Classes::TShiftState Shift)
V> {
V> if(VK_SPACE == Key)
V> {
V> DEBUG_PRINT("TWinControl: Нажали на пробел");
V> }
V> }
V> [/ccode]
V>
V> Ваще не пойму на какую тему гуглить
--
С уважением
Кочмин Александр
Firebird Foundation associate member #257
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, kochmin_alexandr, Вы писали:
_>сам то я по delphi и от сишного кода у меня волосы дыбом
_>но по-моему ты вот тут key=0; напиши. Тогда дальше нажатие не пойдет.
не поможет это. если вызвать прямо в OnKeyDown Application.ProcessMessages, то бип все равно услышим. Ставил бряк на функцию MessageBeep в дельфе, однако резалта тоже не получал, из чего сделал вывод, что такую гадость делает винда.
Здравствуйте, saturas, Вы писали:
S>не поможет это.
Угу. Вот правильное решение. Сам нашел :)
virtual void __fastcall DefaultHandler(void *Message);
В этом обработчике ловим все, что нужно и разруливаем. "Бип"вылазил по сообщению WM_CHAR.