Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OleContainer ms word сменить раскладку, не меняется никак 
:(
    Опции темы
rith2
Дата 19.5.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Привет!

Ситуация - гружу в OleContainer ms word, как только делаю OleContainer.DoVerb(ovShow) и в контейнере появляется ms word, то раскладка клавые перестает меняться в том числе средствами винды (alt+shift например)

Код

  OleContForm.OleCont.CreateObjectFromFile('G:\Doc1.doc',False);
  OleContForm.OleCont.DoVerb(ovShow);


Пробовал регистрировать в приложении собственный hotkey

Код

procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
  var
    idHotKey: integer;
    fuModifiers: word;
    uVirtKey: word;
begin

  idHotkey:= Message.wParam;
  fuModifiers:= LOWORD(Message.lParam);
  uVirtKey:= HIWORD(Message.lParam);

  if (fuModifiers = mod_alt) and (uVirtKey = VK_RIGHT) then
    begin
       caption:='Alt- ->> нажата';
       ActivateKeyboardLayout(0,HKL_NEXT); //переключаю раскладку
    end;
  inherited;
end;


Вариат срабатывает, то есть hotkey работает, но раскладку никак не меняет (проверял в приложении без OleContainer - работает )

Перехватывал нажатие  с помощью hook:

Код

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
  idHotKey:integer;
  fumod:WORD;
  ukey:word;
begin
    Wnd:=TMsg(Pointer(lParam)^).hwnd;
    if TMsg(Pointer(lParam)^).message = wm_rbuttondown  then //щелчок правой кнопкой мыши
      begin
       ActivateKeyboardLayout(0,HKL_NEXT); //переключаю раскладку
       ShowMessage('событие хука');
      end;
    Result:= CallNextHookEx(SysHook, Code, wParam, lParam);
end;

procedure hook(switch : Boolean) export; stdcall;
begin
  if switch=true then
    begin
      SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
      if SysHook <> 0 then
          MessageBox(0, 'HOOK1 установлен !', 'Message from Exampel1/Process1', 0)
      else
          MessageBox(0, 'HOOK1 установить не удалось !', 'Message from Exampel1/Process1', 0);
    end
  else
     begin
       if UnhookWindowsHookEx(SysHook) then
            MessageBox(0, 'HOOK1 снят !', 'Message from Exampel1/Process1', 0)
       else
            MessageBox(0, 'HOOK1 снять не удалось !', 'Message from Exampel1/Process1', 0);

   SysHook := 0;
   end;
end;
exports hook;
begin
end.


Щелчок правой кнопкой перехватывается, но на раскладку это никак не влияет (проверял в приложении без olecontainer - все работает).
Если перед сменой раскладки сделать например 

Код

OleContainer.Visible := False 
//Смена раскладки
OleContainer.Visible := True

 или просто свернуть работающее приложение, то раскладка тогда меняется, НО в этот момент приложение некрасиво моргает, а после появления у ms word в контейнере отсутствует панель инструментов.

Состояние близкое к отчанию.....     smile 

Пжлста помогите!


Это сообщение отредактировал(а) rith2 - 19.5.2009, 20:41
PM MAIL   Вверх
rith2
Дата 20.5.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Тут мысль была - отобрать у OleContainer Focus - фокус отбирается, но раскладка все равно не менятся...
PM MAIL   Вверх
Rrader
  Дата 20.5.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Наблюдаю такое в Delphi7. В 2007-2009 это исправлено. Сравнил исходники компонента в разных версиях - отличий нет (только одно свойство для мыши и комментарий вверху). Причина где-то в недрах VCL. Где, надо поискать smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
rith2
Дата 20.5.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



И впрямь... в Делфи 2009 все отлично работает....    smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.