Keyboard input [в COMBOBOX]
Модераторы: Duncon, Hawk, Romeo, Eugie
Вот такая ситуация: если создавать тулбар без указания стиля WS_CHILD, то комбик на нём расположенный ведёт себя как положено, т.е. BackSpace к примеру отрабатывает. А вот если указать WS_CHILD, то перестаёт. Где-то тут собака порылась..
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Rebar ты имел в виду, наверное. Ну не важно, всё равно я с таким глюками не сталкивался.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Да нет, если я вызываю CreateWindowEx c именем класса TOOLBARCLASSNAME aka ToolbarWindow32, то вряд ли тулбар ребаром становится.Rebar ты имел в виду, наверное
С backspace вроде как всё заборол - в реализации интерфейса IInputObject небольшой косяк был. Но зато в полный рост проявилась проблема с русскими буквами. Выводится не гречка, а английские буквы и цифры. Причём при отслеживании сообщений, получаемых комбиком видно, что WM_CHAR приходит какое-то левое именно для русских букв...
Даже самый дурацкий замысел можно воплотить мастерски
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А что, на обычный Toolbar можно спокойно кинуть Combo Box? Научи, о учитель. 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, См. MSDN. В статье про тулбары есть раздел: Embedding Nonbutton Controls in Toolbars. В двух словах - под окно резервируется место тулбаровым сепаратором, и поверх него кладётся это окно.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Классно, не знал.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Опять возвращаюсь к своим баранам 
Казалось бы нашёл решение, которое, увы, полечило не совсем все проблемы.
К сожалению, всё кухню понимаю о-о-чень приблизительно, поэтому объясняю на пальцах:
мой комбик живёт внутри IE. Т.е. моё приложение - это COM объект, реализующий несколько обязательных интерфейсов.
В данном случае, интерес представляет метод TranslateAcceleratorIO интерфейса IInputObject. Соответственно у меня нет привычного цикла
Зато IE вызывает мой метод TranslateAcceleratorIO в своём подобном цикле.
Опытным путём я установил, что я должен транслировать и диспетчеризовать нажатие клавиш типа VK_DELETE, VK_INSERT и т.п. чтобы мой комбик нормально обрабатывал стандартные сочетания вроде shift-insert, ctrl-insert, ctrl-c, ctrl-v, ctrl-x и т.д.
Итого, у меня есть такая имплементация TranslateAcceleratorIO :
Всё вроде бы работает как надо. За исключением единственного сочетания ctrl-c.
Это меня просто убивает: ctrl-x работает, ctrl-insert тоже, а ctrl-c - не желает.
Как бы это печальное событие отрихтовать?
Да, вот ещё нашли такое сочетание: ctrl+back. Должно удалять последнее введённое слово... Тоже не пашет
И где бы полный список глянуть всех этих сочетаний?
Заранее 10x.

Казалось бы нашёл решение, которое, увы, полечило не совсем все проблемы.
К сожалению, всё кухню понимаю о-о-чень приблизительно, поэтому объясняю на пальцах:
мой комбик живёт внутри IE. Т.е. моё приложение - это COM объект, реализующий несколько обязательных интерфейсов.
В данном случае, интерес представляет метод TranslateAcceleratorIO интерфейса IInputObject. Соответственно у меня нет привычного цикла
Код: Выделить всё
while (GetMessage()) do
begin
TranslateMessage();
DispatchMessage();
end;
Опытным путём я установил, что я должен транслировать и диспетчеризовать нажатие клавиш типа 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-x работает, ctrl-insert тоже, а ctrl-c - не желает.
Как бы это печальное событие отрихтовать?
Да, вот ещё нашли такое сочетание: ctrl+back. Должно удалять последнее введённое слово... Тоже не пашет

И где бы полный список глянуть всех этих сочетаний?
Заранее 10x.
Даже самый дурацкий замысел можно воплотить мастерски
Нашёл затычку: ловлю конструкцию CTRL+C и отправляю комбику WM_COPY. Чую, что бесовщина, а обосновать не могу © 

Даже самый дурацкий замысел можно воплотить мастерски