Клавиши в Internet Explorer
От: KBH  
Дата: 21.06.03 07:33
Оценка: -1
Как отучить Internet Explorer перехватывать такие события, как нажатие на клавиши: Tab, Up, Left ...
Re: Клавиши в Internet Explorer
От: mitja_r Россия  
Дата: 21.06.03 08:10
Оценка:
Можно повесить обработчик на onkeydown, и там перехватывать нужные клавиши.

Пример:

<script language="javascript">
function trapkb()
{
    alert(event.keyCode);      // Выводим код нажатой клавиши
    event.returnValue = false; // Подавляем стандартную реакцию
}
</script>
...
<body onkeydown="javascript:trapkb()">
...



Здравствуйте, KBH, Вы писали:

KBH>Как отучить Internet Explorer перехватывать такие события, как нажатие на клавиши: Tab, Up, Left ...
Re[2]: Клавиши в Internet Explorer
От: KBH  
Дата: 21.06.03 10:13
Оценка:
Здравствуйте, mitja_r, Вы писали:

_>Можно повесить обработчик на onkeydown, и там перехватывать нужные клавиши.


А как направить сообщения в ActiveX форму? Код такой:

<HTML>
<H1> C++Builder 5 ActiveX Test Page </H1><p>
You should see your C++Builder 5 forms or controls embedded in the form below.
<HR><center><P>
<OBJECT
      classid="clsid:5F34CE34-982F-11D7-9505-00C12801801C"
      codebase="/ActiveFormProj1.inf"
      width=522
      height=336
      align=center
      hspace=0
      vspace=0
>
</OBJECT>
</HTML>
Re[3]: Клавиши в Internet Explorer
От: DSD Россия http://911.ru/cv
Дата: 21.06.03 10:36
Оценка:
Здравствуйте, KBH, Вы писали:

KBH>Здравствуйте, mitja_r, Вы писали:


_>>Можно повесить обработчик на onkeydown, и там перехватывать нужные клавиши.


KBH>А как направить сообщения в ActiveX форму? Код такой:


KBH>
<HTML>>
<H1>> C++Builder 5 ActiveX Test Page </H1><p>
KBH>You should see your C++Builder 5 forms or controls embedded in the form below.
<HR>><center><P>
KBH><OBJECT
KBH>      classid="clsid:5F34CE34-982F-11D7-9505-00C12801801C"
KBH>      codebase="/ActiveFormProj1.inf"
KBH>      width=522
KBH>      height=336
KBH>      align=center
KBH>      hspace=0
KBH>      vspace=0
>>
KBH></OBJECT>
KBH></HTML>
KBH>


Самое простое — сделать у этого ActiveX какой-нибудь метод, типа pressKey(key: int);
И из браузера просто вызывать этот метод с параметром нужной клавиши.
--
DSD
Re[4]: Клавиши в Internet Explorer
От: KBH  
Дата: 21.06.03 10:42
Оценка:
Здравствуйте, DSD, Вы писали:

DSD>Самое простое — сделать у этого ActiveX какой-нибудь метод, типа pressKey(key: int);

DSD>И из браузера просто вызывать этот метод с параметром нужной клавиши.

Я не пойму, а что должно быть в этом обработчике? И как его вызывать, если не трудно, можно пример?
Re[5]: Клавиши в Internet Explorer
От: DSD Россия http://911.ru/cv
Дата: 21.06.03 11:05
Оценка: 3 (1)
Здравствуйте, KBH, Вы писали:

KBH>Я не пойму, а что должно быть в этом обработчике?

Как что? Обработка клавиши, конечно. Что хотите, то и пишите.
Например, можете стандартным способом(типа SendMessage или PostMessage) передать код кнопки на "форму" самого обьекта.
Единственно — коды клавиш у браузера и у винды в целом могут не совпадать, тогда придется писать какое-нибудь преобразование из одной системы кодов в другую.

KBH>И как его вызывать, если не трудно, можно пример?

<HTML>
<H1> C++Builder 5 ActiveX Test Page </H1><p>
You should see your C++Builder 5 forms or controls embedded in the form below.
<HR><center><P>
<OBJECT id="myobj"
      classid="clsid:5F34CE34-982F-11D7-9505-00C12801801C"
      codebase="/ActiveFormProj1.inf"
      width=522
      height=336
      align=center
      hspace=0
      vspace=0
>
</OBJECT>


<script language="javascript">

document.body.onkeydown=function() { 
    document.all.myobj.pressKey(event.keyCode); // вызываем метод обьекта и передаем в него код нажатой клавиши.
    event.returnValue = false; // Подавляем стандартную реакцию
}

</script>


</HTML>

Смотрите выделенное жирным.
--
DSD
Re[6]: Клавиши в Internet Explorer
От: KBH  
Дата: 21.06.03 11:17
Оценка:
Здравствуйте, DSD, Вы писали:

DSD>Как что? Обработка клавиши, конечно. Что хотите, то и пишите.


Дело в том, что события нажатия клавиш до формы доходят кроме: Tab, Up, Left ...
А вот как сделать, чтобы все клавиши обрабатывались формой?
Re[7]: Клавиши в Internet Explorer
От: DSD Россия http://911.ru/cv
Дата: 21.06.03 14:49
Оценка:
Здравствуйте, KBH, Вы писали:


KBH>Дело в том, что события нажатия клавиш до формы доходят кроме: Tab, Up, Left ...

KBH>А вот как сделать, чтобы все клавиши обрабатывались формой?
Ну так и сделай, как я сказал. Если клавиша из нужного тебе списка(Tab, Up, Left ...), то пересылаешь ее форме.
--
DSD
Re[6]: Клавиши в Internet Explorer
От: KBH  
Дата: 24.06.03 13:18
Оценка:
Здравствуйте, DSD, Вы писали:

DSD>Например, можете стандартным способом(типа SendMessage или PostMessage) передать код кнопки на "форму" самого обьекта.


Хорошо, создал я функцию, которую вызываю из обработчика события OnKeyDown:

<script language="javascript">
function trapkb()
{
  event.returnValue = false; // Подавляем стандартную реакцию
  document.all.myObj.KeyPress(event.keyCode);
}
</script>
<body onkeydown="javascript:trapkb()">


А в этой функции посылаю сообщение:

[сcode]
PostMessage(m_VclCtl->ActiveControl->Handle, WM_KEYDOWN, Key, 0);
[/сcode]

Так вот, это сообщение, как я понимаю, посылается опять браузеру, который потом посылает его ActiveX. И получается зацикливание.......
Re[6]: Клавиши в Internet Explorer
От: KBH  
Дата: 24.06.03 14:53
Оценка:
Здравствуйте, DSD, Вы писали:

DSD>Здравствуйте, KBH, Вы писали:


DSD>Например, можете стандартным способом(типа SendMessage или PostMessage) передать код кнопки на "форму" самого обьекта.


Нужно использовать SendMessage() для посылки сообщения напрямую компоненту ActiveX.

DSD>Единственно — коды клавиш у браузера и у винды в целом могут не совпадать, тогда придется писать какое-нибудь преобразование из одной системы кодов в другую.


Я сделал так:

<HTML>
<H1> C++Builder 5 ActiveX Test Page </H1><p>
You should see your C++Builder 5 forms or controls embedded in the form below.

<script language="javascript">
function KeyDown()
{
  var Key = event.keyCode;     
  if( Key == 9 )
    event.returnValue = false; // Подавляем стандартную реакцию
  document.all.XObj.KeyPress(Key);
}
</script>
<body onkeydown="javascript:KeyDown()">

<HR><center><P>
<OBJECT id = "XObj"
      classid="clsid:5F34CE34-982F-11D7-9505-00C12801801C"
      codebase="/ActiveFormProj1.inf"
      width=522
      height=336
      align=center
      hspace=0
      vspace=0
>

</HTML>

И не надо ничего преобразовывать. Всё отлично работает!!!
Спасибо за помощь.
Re[7]: Клавиши в Internet Explorer
От: DSD Россия http://911.ru/cv
Дата: 24.06.03 15:58
Оценка:
Здравствуйте, KBH, Вы писали:

KBH>И не надо ничего преобразовывать.

Ну, я ж сказал "могут не совпадать", сам-то я не проверял

KBH>Всё отлично работает!!!

KBH>Спасибо за помощь.
Рад за тебя
--
DSD
Re[8]: Клавиши в Internet Explorer. Настройки IE
От: PAlexander  
Дата: 12.08.03 19:34
Оценка:
Привет всем.

У меня тоже получилось-.
Хотя тема закрыта... хотелось бы спросить кое-что.

Проблема:При первом вызове метода моего ActiveX IE предупреждает,
что мой ActiveX опасен и спрашивает: Запустить его?


Вопрос: как отключить (обойти) эту защиту?
Желательно из javascript
Re[9]: Клавиши в Internet Explorer. Настройки IE
От: DSD Россия http://911.ru/cv
Дата: 12.08.03 21:55
Оценка:
Здравствуйте, PAlexander, Вы писали:

PA>Привет всем.


PA>У меня тоже получилось-.

PA>Хотя тема закрыта... хотелось бы спросить кое-что.

PA>Проблема:При первом вызове метода моего ActiveX IE предупреждает,

PA>что мой ActiveX опасен и спрашивает: Запустить его?


PA>Вопрос: как отключить (обойти) эту защиту?

PA>Желательно из javascript
Скорее IE выкидывает предупреждение не при вызове метода обьекта, а при его создании.
обойти из JS — практически никак. Отключить эти вопросы можно в настройках безопасности.
Что это такое и как это отключить — я уже писал тут: http://www.rsdn.ru/Forum/?mid=325429
Автор: DSD
Дата: 15.07.03
--
DSD
Re[7]: Клавиши в Internet Explorer
От: PAlexander  
Дата: 28.08.03 09:04
Оценка:
KBH>Я сделал так:

KBH>
<HTML>>
<H1>> C++Builder 5 ActiveX Test Page </H1><p>
KBH>You should see your C++Builder 5 forms or controls embedded in the form below.

KBH><script language="javascript">
KBH>function KeyDown()
KBH>{
KBH>  var Key = event.keyCode;     
KBH>  if( Key == 9 )
KBH>    event.returnValue = false; // Подавляем стандартную реакцию
KBH>  document.all.XObj.KeyPress(Key);
KBH>}
KBH></script>
KBH><body onkeydown="javascript:KeyDown()">

<HR>><center><P>
KBH><OBJECT id = "XObj"
KBH>      classid="clsid:5F34CE34-982F-11D7-9505-00C12801801C"
KBH>      codebase="/ActiveFormProj1.inf"
KBH>      width=522
KBH>      height=336
KBH>      align=center
KBH>      hspace=0
KBH>      vspace=0
>>

KBH></HTML>
KBH>


Я воспользовался таким решением. И столкнулся с такой проблемой:

В ActiveX элементе расположен элемент Static на него вешается поле вода, т. е. при создание поля ввода
static указывается как его родитель. Ну так вот это решение работает пока не щелкнешь мышкой по static.
Если челкнуть, то фокус получает окно IE. В результате нажав стрелку вниз мы не смещаем карретку поля ввода,
а сколируем HTML документ.

Как это исправить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.