-
imp (31.08.11 14:00) [0]В главном окне создаю листбокс.
листбокс создатеся и обрабатывается нормально.
Вопрос: как научить листбокс реагировать на нажатия клавиш клавиатуры, например Delete или Ctrl+O ??? -
Cobalt © (31.08.11 15:35) [1]Рекомендую обратить внимание на обработчики данного компонента. Уверен, ты узнаешь много нового и интересного.
-
imp (31.08.11 16:51) [2]Создаю:hList:=NewListBox(hListWnd,'',True, R.Bottom,R.Right,0,0,idList);
//SetWindowLong(hList, GWL_USERDATA, SetWindowLong(hList, GWL_WNDPROC, LongInt(@ListControlProc)));
Сабклассинг не использую так как ловлю в обработчике окна влядельца (hListWnd)
WM_CTLCOLORLISTBOX:
begin
Result:=GetSysColorBrush(6);
end;
WM_DRAWITEM:
begin
....
// мое рисование
end;
а если включаю сабклассинг то туда не приходит WM_DRAWITEM -
imp (31.08.11 16:52) [3]Вопрос открыт
-
Игорь Шевченко © (31.08.11 17:46) [4]Подменой оконной процедуры. Стандартная процедура ListBox не умеет обрабатывать клавиши DELETE и Ctrl+O
Более того, и пользователь не ждет от ListBox обработки этих клавиш -
imp (31.08.11 18:07) [5]
> Игорь Шевченк
Подменой оконной процедуры - не сабклассинг ли это? или я ошибаюсь ?!?! -
Игорь Шевченко © (31.08.11 20:43) [6]
> Подменой оконной процедуры - не сабклассинг ли это?
сабклассинг.
Это что-то меняет ?
> а если включаю сабклассинг то туда не приходит WM_DRAWITEM
в VCL с включенным сабклассингом приходит. Очевидно что-то не так с включением. -
imp (01.09.11 08:14) [7]ЛЮДИ, МАСТЕРА
я забыл поставить в начале сообщения что все это без ВЦЛ
чистый и голый WINAPI
ПОМОГИТЕ КТО ЗНАЕТ И МОЖЕТ -
imp (01.09.11 09:37) [8]Проблема решилась после прочтения статьи
"Сабклассинг и суперклассинг в Delphi, Для начинающих"
с сайта vingrad.ru
(http://base.vingrad.ru/view/2819-Sabklassing-i-superklassing-v-Delphi)
В оконную процедуру окна владельца listbox нужно было добавить
Result := CallWindowProc(Pointer(GetWindowLong(hWnd, GWL_USERDATA)),
hWnd, uMsg, wParam, lParam);
Всем СПАСИБО.
Тема закрыта.