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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> KeyCode для Tab не работает. 
V
    Опции темы
Jr13san
Дата 29.11.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что то не получается у меня при нажатии на Tab выполнить какое-либо действие.
Писал так, но не работает:

'свойство формы: KeyPreviev = true
'Создаём 2 textbox'a

Вот код:

Код

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyTab Then
MsgBox "Tabik"
End If
End Sub
 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyTab Then
MsgBox "Tabik"
End If
End Sub
 


 
Не работает из за того, что при нажатии Tab идёт переключение на другой Textbox.
А как бы придумать так, чтобы при нажатии в текстовом поле клавиши Tab - выполнилось событие msgbox?


Через несколько дней:

Вот придумал кое-что:

Разместите на форме Text1.
Под Text1 разместите Frame1.
На Frame1 поместите Text2.
Подгоните размеры Frame1 под размеры Text2.
Киньте на форму label1 и его размеры подгоните под размеры Text2.
Должно выглядеть как будто бы на форме только Tex1 и Text2.

Vb6код:

Код

Option Explicit

Private Sub Label1_Click()
Frame1.Enabled = True
SendKeys "{TAB}"
End Sub

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.MousePointer = 3
End Sub

Private Sub Text1_GotFocus()
Frame1.Enabled = False
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyTab Then
MsgBox "Tabik"
End If
End Sub


Неудобно из-за того, что слишком громоздско получилось...
А если несколько Textbox'ов будет, то тут легко запутаться...
Может кто-нибудь знает как попроще сделать.
Обратите внимание на NUmlock, когда будете кликать по Text2.text(во время выполнения программы). Numlock мигнёт, т.к. выполняется команда SendKeys.


Ещё через несколько дней:

Пишу здесь же про проблему с Numpad'ами от Numlopad 0 до Numpad 9 + Num * + Num+ + num- + numEnter + Num del + num /
Пишу тоже по keyCode, но кнопки не реагируют вообще, а не реагируют потому, что за место Num'ов нажимаются простые цифры от 1 до 9, /,*,-,+,. .
Если выключить Numlock, то 4- лево, 6- право, 8 - вверх, 2 - вниз, а за место оставшихся Num'ов нажимаются Page Up, Page Down, End, Delete, Home Insert и /,*,-,+.
Проблема в том, что нужно чтобы при нажатии в Text1 Numpad'ов происходило событие msgbox "Num0,1,2,3 и т.д."(чтобы эти события происходили при включённом NUmlock и при выключенном NUmlock)

Где эти Numpad'ы искать - не знаю.
Кто знает, помогите пожалуйста.

Это сообщение отредактировал(а) Jr13san - 29.11.2008, 12:01
PM MAIL WWW ICQ   Вверх
BorisVorontsov
Дата 29.11.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Ой, сколько заморочек, и только потому, что VB скрывает всю обработку сообщений от разработчика...
По-хорошему, все это решается обработкой клавиш в цикле GetMessage. По не-совсем-плохому (потому что у тебя в посте это совсем-по-плохому) сабклассингом формы и э.у.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Jr13san
Дата 30.11.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



мдя...

Добавлено через 2 минуты и 21 секунду
а что с Numpad'ми?
PM MAIL WWW ICQ   Вверх
Jr13san
Дата 2.12.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 smile никак не получается прописать реакцию на Numpad1....
PM MAIL WWW ICQ   Вверх
Rrader
  Дата 4.12.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Код

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD1 = &H61
Private Const VK_NUMPAD2 = &H62
Private Const VK_NUMPAD3 = &H63
Private Const VK_NUMPAD4 = &H64
Private Const VK_NUMPAD5 = &H65
Private Const VK_NUMPAD6 = &H66
Private Const VK_NUMPAD7 = &H67
Private Const VK_NUMPAD8 = &H68
Private Const VK_NUMPAD9 = &H69
Private Const VK_HOME = &H24
Private Const VK_UP = &H26
Private Const VK_PRIOR = &H21
Private Const VK_LEFT = &H25
Private Const VK_CLEAR = &HC
Private Const VK_RIGHT = &H27
Private Const VK_END = &H23
Private Const VK_DOWN = &H28
Private Const VK_NEXT = &H22
Private Const VK_INSERT = &H2D
  
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  ' NumLock выключен - пересчёт кодов
  If GetKeyState(VK_NUMLOCK) >= 0 Then
    Select Case KeyCode
      Case VK_HOME
        KeyCode = VK_NUMPAD7
      Case VK_UP
        KeyCode = VK_NUMPAD8
      Case VK_PRIOR
        KeyCode = VK_NUMPAD9
      Case VK_LEFT
        KeyCode = VK_NUMPAD4
      Case VK_CLEAR
        KeyCode = VK_NUMPAD5
      Case VK_RIGHT
        KeyCode = VK_NUMPAD6
      Case VK_END
        KeyCode = VK_NUMPAD1
      Case VK_DOWN
        KeyCode = VK_NUMPAD2
      Case VK_NEXT
        KeyCode = VK_NUMPAD3
      Case VK_INSERT
        KeyCode = VK_NUMPAD0
    End Select
  End If
  ' Код цифровой клавиатуры
  If (KeyCode >= VK_NUMPAD0) And (KeyCode <= VK_NUMPAD9) Then
      MsgBox KeyCode - 96
  End If
End Sub


Это сообщение отредактировал(а) Rrader - 4.12.2008, 17:51


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


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(Jr13san @  30.11.2008,  16:33 Найти цитируемый пост)
а что с Numpad'ми? 


А ничего с ними. То, что ты пытаешься сделать -- глупость. На что тогда вообще клавиша Num Lock и соотв. индикатор на клавиатуре?

Цитата(Rrader @  4.12.2008,  17:49 Найти цитируемый пост)
' NumLock выключен - пересчёт кодов


А если юзер нажмет "реальный" Home или Insert?




--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Rrader
  Дата 5.12.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Цитата(BorisVorontsov @  5.12.2008,  04:45 Найти цитируемый пост)
А если юзер нажмет "реальный" Home или Insert?

Хороший вопрос. Ну что ж, отфильтруем smile

Форма:
Код

Private Const GWL_WNDPROC = (-4)

Private Sub Form_Load()
  OldWndProc = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf TextWindowProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Call SetWindowLong(Text1.hwnd, GWL_WNDPROC, OldWndProc)
End Sub



Модуль: 
Код

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
  (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD1 = &H61
Private Const VK_NUMPAD2 = &H62
Private Const VK_NUMPAD3 = &H63
Private Const VK_NUMPAD4 = &H64
Private Const VK_NUMPAD5 = &H65
Private Const VK_NUMPAD6 = &H66
Private Const VK_NUMPAD7 = &H67
Private Const VK_NUMPAD8 = &H68
Private Const VK_NUMPAD9 = &H69
Private Const VK_HOME = &H24
Private Const VK_UP = &H26
Private Const VK_PRIOR = &H21
Private Const VK_LEFT = &H25
Private Const VK_CLEAR = &HC
Private Const VK_RIGHT = &H27
Private Const VK_END = &H23
Private Const VK_DOWN = &H28
Private Const VK_NEXT = &H22
Private Const VK_INSERT = &H2D
Private Const VK_DELETE = &H2E
Private Const VK_DECIMAL = &H6E
Private Const WM_KEYDOWN = &H101
Public OldWndProc As Long

Public Function TextWindowProc(ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long
  Dim KeyCode As Long
  If Msg = WM_KEYDOWN Then
    KeyCode = wParam
    If (GetKeyState(VK_NUMLOCK) >= 0) And ((lParam And &H1000000) = 0) Then
      Select Case wParam
        Case VK_HOME
          KeyCode = VK_NUMPAD7
        Case VK_UP
          KeyCode = VK_NUMPAD8
        Case VK_PRIOR
          KeyCode = VK_NUMPAD9
        Case VK_LEFT
          KeyCode = VK_NUMPAD4
        Case VK_CLEAR
          KeyCode = VK_NUMPAD5
        Case VK_RIGHT
          KeyCode = VK_NUMPAD6
        Case VK_END
          KeyCode = VK_NUMPAD1
        Case VK_DOWN
          KeyCode = VK_NUMPAD2
        Case VK_NEXT
          KeyCode = VK_NUMPAD3
        Case VK_INSERT
          KeyCode = VK_NUMPAD0
      End Select
    End If
    If (KeyCode >= VK_NUMPAD0) And (KeyCode <= VK_NUMPAD9) Then
      MsgBox KeyCode - 96
    End If
  End If
  TextWindowProc = CallWindowProc(OldWndProc, hwnd, Msg, wParam, lParam)
End Function



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


Бывалый
*


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

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



ок, я разобрался по-своему, но клавиши работают только с включёным Numlock. Попробую как вы написали...
PM MAIL WWW ICQ   Вверх
BorisVorontsov
Дата 30.12.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(Jr13san @  29.12.2008,  11:00 Найти цитируемый пост)
но клавиши работают только с включёным Numlock


И это правильно


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Jr13san
Дата 9.2.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Rrader, извини конечно, но я непонял некоторые части кода...
Не мог бы ты мне разяснить с помощью комментариев  всё кроме Api и констант/
Пожалуйста.
PM MAIL WWW ICQ   Вверх
alorion
Дата 15.2.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Не работает из за того, что при нажатии Tab идёт переключение на другой Textbox.
А как бы придумать так, чтобы при нажатии в текстовом поле клавиши Tab - выполнилось событие msgbox?

нужно было всем контролам формы установить свойство TabStop = False
PM MAIL   Вверх
Jr13san
Дата 25.2.2009, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Попробуем...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

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

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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