Keyboard input [в COMBOBOX]

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Keyboard input [в COMBOBOX]

AiK » 15 авг 2004, 14:19

Нашёл затычку: ловлю конструкцию CTRL+C и отправляю комбику WM_COPY. Чую, что бесовщина, а обосновать не могу © :(

AiK » 15 авг 2004, 03:10

Опять возвращаюсь к своим баранам :(

Казалось бы нашёл решение, которое, увы, полечило не совсем все проблемы.

К сожалению, всё кухню понимаю о-о-чень приблизительно, поэтому объясняю на пальцах:
мой комбик живёт внутри IE. Т.е. моё приложение - это COM объект, реализующий несколько обязательных интерфейсов.
В данном случае, интерес представляет метод TranslateAcceleratorIO интерфейса IInputObject. Соответственно у меня нет привычного цикла

Код: Выделить всё

while (GetMessage()) do
begin
    TranslateMessage();
    DispatchMessage();
end;
Зато IE вызывает мой метод TranslateAcceleratorIO в своём подобном цикле.

Опытным путём я установил, что я должен транслировать и диспетчеризовать нажатие клавиш типа VK_DELETE, VK_INSERT и т.п. чтобы мой комбик нормально обрабатывал стандартные сочетания вроде shift-insert, ctrl-insert, ctrl-c, ctrl-v, ctrl-x и т.д.

Итого, у меня есть такая имплементация TranslateAcceleratorIO :

Код: Выделить всё

if (lpMsg.WParam in [VK_BACK,
                      VK_ESCAPE,
                      VK_LEFT,
                      VK_RIGHT,
                      VK_HOME,
                      VK_END,
                      VK_UP,
                      VK_DOWN,
                      VK_DELETE,
                      VK_INSERT,
                      VK_RETURN,
                      VK_CONTROL])  then begin
    TranslateMessage(lpMSg);
    DispatchMessage(lpMsg);
    Result := S_OK;
  end
  else
  begin
  Result := S_FALSE;
  end;
end;
Всё вроде бы работает как надо. За исключением единственного сочетания ctrl-c.
Это меня просто убивает: ctrl-x работает, ctrl-insert тоже, а ctrl-c - не желает.
Как бы это печальное событие отрихтовать?

Да, вот ещё нашли такое сочетание: ctrl+back. Должно удалять последнее введённое слово... Тоже не пашет :(
И где бы полный список глянуть всех этих сочетаний?

Заранее 10x.

Romeo » 27 апр 2004, 12:40

Классно, не знал.

AiK » 27 апр 2004, 12:38

Romeo, См. MSDN. В статье про тулбары есть раздел: Embedding Nonbutton Controls in Toolbars. В двух словах - под окно резервируется место тулбаровым сепаратором, и поверх него кладётся это окно.

Romeo » 27 апр 2004, 12:29

А что, на обычный Toolbar можно спокойно кинуть Combo Box? Научи, о учитель. :)

AiK » 26 апр 2004, 16:16

Rebar ты имел в виду, наверное
Да нет, если я вызываю CreateWindowEx c именем класса TOOLBARCLASSNAME aka ToolbarWindow32, то вряд ли тулбар ребаром становится.

С backspace вроде как всё заборол - в реализации интерфейса IInputObject небольшой косяк был. Но зато в полный рост проявилась проблема с русскими буквами. Выводится не гречка, а английские буквы и цифры. Причём при отслеживании сообщений, получаемых комбиком видно, что WM_CHAR приходит какое-то левое именно для русских букв...

Romeo » 22 апр 2004, 16:48

Rebar ты имел в виду, наверное. Ну не важно, всё равно я с таким глюками не сталкивался.

AiK » 22 апр 2004, 15:45

Вот такая ситуация: если создавать тулбар без указания стиля WS_CHILD, то комбик на нём расположенный ведёт себя как положено, т.е. BackSpace к примеру отрабатывает. А вот если указать WS_CHILD, то перестаёт. Где-то тут собака порылась..

Eugie » 21 апр 2004, 16:46

Да, и задать среди прочих стиль WS_TABSTOP

Romeo » 21 апр 2004, 16:24

Порядком расположения элементов диалога в rc файле :)

Вернуться к началу