Филипп Салганник показал, как перехватывать ключи из окна данных в сообщении
sybase.public.powerbuilder.datawindow на 2004-04-27. Это действительно фильтрует ключи, а не отменяет их.
Объявление внешней функции для PeekMessage (для более старых PB используйте PeekMessageA):
:
function boolean PeekMessage( Ref blob lpMsg, long hWnd, UINT uMsgFilterMin, UINT uMsgFilterMax, UINT wRemoveMsg ) Library "USER32.dll" alias for "PeekMessageW"
//WM_KEYFIRST = 0x0100 // 256
//WM_KEYLAST = 0x0108 // 264
//PM_REMOVE = 1
Отобразите событие pbm_dwnkey и назовите его key
или ue_key
в соответствии с вашей философией. Добавьте этот код к событию:
if 0 = keyflags and (key = KeyDash! or key = KeySubtract!) then
choose case ls_col
case "col_1", "col_2" // ... we have many columns in the list
PeekMessage( Msg, 0, 256, 264, 1 ) // see the declaration for values. this removes the message.
message.processed=TRUE
message.returnvalue=1
return
case else
// nothing else
end choose
end if
Я несколько раз пытался заставить его правильно отформатировать, но безуспешно.
Я не уверен, что настройка message.processed и message.returnvalue имеет какой-либо эффект. Обычно это не от этого события. Я сохранил их, когда использовал код, потому что у меня не было времени на эксперименты.