Элемент управления ActiveX неправильно обрабатывает клавиши со стрелками при размещении в приложении Delphi - PullRequest
3 голосов
/ 08 февраля 2010

У меня есть элемент управления ActiveX, размещенный в нашем приложении. Элемент управления был импортирован с помощью меню компонента Delphi Import.

Элемент управления ActiveX содержит поле для ввода данных пользователем. Когда я запускаю элемент управления в своем собственном приложении для песочницы (не в приложении Delphi), клавиши со стрелками работают, как и ожидалось, перемещая курсор в пределах элемента управления редактирования. Однако, когда я запускаю свое приложение Delphi, поведение клавиш со стрелками, кажется, меняется. Кажется, вместо этого он работает как клавиша табуляции.

Я предполагаю, что это происходит из-за того, как VCL обрабатывает нажатия клавиш. Есть идеи как обойти это?

1 Ответ

0 голосов
/ 09 февраля 2010

Элемент управления должен обрабатывать WM_GETDLGCODE и включать в результат не менее DLGC_WANTARROWS.

Кроме того, если элемент управления ActiveX написан на Delphi и использует csReflector в его ControlStyle, его следует перестроить с помощью обработчиков сообщений WM_KEYDOWN и WM_KEYUP (и любых других необходимых), добавленных к TReflectorWindow класс в AxCtrls блоке для делегирования сообщений в элемент управления VCL:

procedure TReflectorWindow.WMKeyDown(var Message: TMessage);
begin
  Message.Result := FControl.Perform(Message.Msg, Message.WParam, Message.LParam);
end;

procedure TReflectorWindow.WMKeyUp(var Message: TMessage);
begin
  Message.Result := FControl.Perform(Message.Msg, Message.WParam, Message.LParam);
end;

Этого вполне достаточно для работы в моих тестах с использованием D2007.

...