iarspider писал(а):
Ну положим, CBM_SETFOCUS есть нотифай, посылаемый только CBox-ом, и поэтому думается мне, что место ему - в hiComboBox.pas, а не в Win.pas. Наверное.Ну вы чего, действительно не владеете искусством контекстного поиска, что-ли
Излагаю последовательнось действий, на которые у меня потребовалось минут 10 (с почесыванием в репе)
1) ищу CBM_SETFOCUS
2) вижу единственное его вхождение как константу в поле aEnter таблицы ComboActions: TCommandActions
3) ищу использование aEnter
4) наблюдаю значения этих полей в таблицах (перечисляю ненулевые):
ButtonActions.aEnter=BN_SETFOCUS
EditActions.aEnter=EN_SETFOCUS
ListActions.aEnter=LBN_SETFOCUS
ComboActions.aEnter=CBN_SETFOCUS
RichEditActions.aEnter=EN_SETFOCUS
function WndProcCtrl
....
case Msg.message of
....
CM_COMMAND:
begin
Result := True;
Cmd := HiWord( Msg.wParam );
if Cmd = fCommandActions.aClick then
begin
if Integer( fClickDisabled ) <= 0 then
DoClick;
end else
if Cmd = fCommandActions.aEnter then
begin
if Assigned( fOnEnter ) then fOnEnter( Self_ );
end else
if Cmd = fCommandActions.aLeave then
begin
if Assigned( fOnLeave ) then fOnLeave( Self_ );
end else
....
а) в fCommandActions стоит адрес одной из наблюдаемых ранее табличек (что и так понятно впрочем)
б) CM_COMMAND - это сообщение посланное парентом нужному контролу в ответ на WM_COMMAND, чтобы каждый занимался своими делами, а не чужими (и плевали они с высокой колокольни на отмеченный tsdima параметр DlgID)
То пишу в пост:
CBN_SETFOCUS возвращается KOL-ом как OnEnter
А теперь честно: я что, Америку открыл, или неведомое никому ранее боевое искусство
Типа: ну именно такое и называется, наверное - учить матчасть...