Конференция "WinAPI" » ListBox и сообщения от клавиатуры
 
  • 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);

    Всем СПАСИБО.

    Тема закрыта.
 
Конференция "WinAPI" » ListBox и сообщения от клавиатуры
Есть новые Нет новых   [134431   +10][b:0][p:0.001]