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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильно работают горячие клавиши, WebBrowser 
V
    Опции темы
aktuba
Дата 15.5.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Делаю программу WYSIWYG редактора для блога.
В следующем коде: 
Код

procedure TfrmMain.MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
  Range: IHTMLTxtRange;
  CtrlRange: IHTMLControlRange;
  tag: IHTMLElement;
begin
  if Editor_Mode then
    begin
      if WebBrowser=nil then
       begin
         Handled:=False;
         Exit;
       end;
    Handled:=(IsDialogMessage(WebBrowser.Handle,Msg)=true);
    if (Handled) and (not WebBrowser.Busy) then
      begin
        if FOleInPlaceActiveObject=nil then
          begin
            Dispatch:=WebBrowser.Application;
            if Dispatch<>nil then
              begin
                Dispatch.QueryInterface(IOleInPlaceActiveObject,iOIPAO);
                if iOIPAO<>nil then FOleInPlaceActiveObject:=iOIPAO;
              end;
          end;
        if FOleInPlaceActiveObject<>nil then
          begin
            //FOleInPlaceActiveObject.TranslateAccelerator(Msg);
            if ((Msg.message=WM_LBUTTONDOWN) or (Msg.message=WM_LBUTTONUP) or
                (((Msg.message=WM_KEYDOWN) or (Msg.message=WM_KEYUP)))) then
            if (Editor.Selection.Type_='Text') or (Editor.selection.type_='None') then //Text
            begin
              Range:=(editor.selection.createRange as IHTMLTxtRange);
              tag:=Range.parentElement;
             // Обработка текстового выделения
            end else if Editor.Selection.Type_='Control' then
              begin
              // Object
                CtrlRange:=(editor.selection.createRange as IHTMLControlRange);
                tag:=CtrlRange.commonParentElement;
                // Обработка графического выделения
              end else FOleInPlaceActiveObject.TranslateAccelerator(Msg);
          end;
      end;
    end else
     begin
     // Code
     end;
end;


какаято ошибка. Если раскоментировать строку
Код

//FOleInPlaceActiveObject.TranslateAccelerator(Msg);

то работают горячие клавиши, но перемещение по тексту происходит через два символа, а если оставить закоментированной-перемещение нормально, но горячие клавиши не работают. В чем проблема? Помогите... smile  


--------------------
user posted image
PM MAIL WWW Skype   Вверх
December
Дата 17.5.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

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



была у меня схожая проблема
как точно решил - не помню smile кажется, ручками фильтровал сообщения, проходящие через эту функцию и блокировал управление курсором 


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
December
Дата 17.5.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

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



Ага, вот моя строчка smile
Код

if not (Msg.wParam in [VK_BACK, VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN]) then//first check, somewhy keystrokes are doubled
 


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
aktuba
Дата 17.5.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Я решил примерно также:

Код

function TfrmMain.WebBrowserTranslateAccelerator(const lpMsg: PMsg;
  const pguidCmdGroup: PGUID; const nCmdID: Cardinal): HRESULT;
const DialogKeys: set of Byte=[VK_LEFT,VK_RIGHT,VK_BACK,VK_UP,VK_DOWN,
                              $30..$39,$41..42,$44..$55,$57,$59..$5A];
begin
  if ((lpMsg.message=WM_KeyDown) or (lpMsg.message=WM_KeyUp))
      and (lpMsg.wParam in DialogKeys) then Result:=S_OK else Result:=S_FALSE;
end;
 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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