Столкнувшись с необходимостью обеспечения навигации по форме размером Дофига х Дохрена ListBox'ов, я тут обнаружил, что без скан-кодов клавиш это не получается от слова никак, а напоровшись на упрямый факт необходимости проверить, что в оные ListBox'ы впихнули юзвери, оказалось, что ещё и память моя не та, что четверть века тому и ASCII в ней удержались куда хужее, чем хотелось бы... Поэтому я написал себе небольшую надстроечку, возвращающую при нажатии на клавишу её скан-код и ASCII (если есть). Макрос висит на Ctrl+Q, прошу любить и жаловать.
Столкнувшись с необходимостью обеспечения навигации по форме размером Дофига х Дохрена ListBox'ов, я тут обнаружил, что без скан-кодов клавиш это не получается от слова никак, а напоровшись на упрямый факт необходимости проверить, что в оные ListBox'ы впихнули юзвери, оказалось, что ещё и память моя не та, что четверть века тому и ASCII в ней удержались куда хужее, чем хотелось бы... Поэтому я написал себе небольшую надстроечку, возвращающую при нажатии на клавишу её скан-код и ASCII (если есть). Макрос висит на Ctrl+Q, прошу любить и жаловать.StoTisteg
[p.s.]Мне всё-таки удалось добить эту фигню на одном только событии KeyDown :hands: Теперь выкладываю нормальную, без извращений, версию с KeyPress. Одного не пойму — зачем в коде [vba]
Код
Option Explicit
Private Sub txt_Коды_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Enter Then Cancel = True Enter = False End If
End Sub
Private Sub txt_Key_Change()
If Smb = "" And Lng < Len(Me.txt_Key.Value) And Me.txt_Key.Value <> Code Then Smb = Right(Me.txt_Key.Value, 1) Me.txt_ASCII.Text = Asc(Smb) End If Me.txt_Key.Value = Code Lng = Len(Me.txt_Key.Value)
End Sub
Private Sub txt_Key_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Code = KeyCode Smb = "" Me.txt_ASCII.Text = "" Select Case KeyCode Case 18 KeyCode = 0 Me.txt_ASCII.Text = "" Me.txt_Key.Value = "18" Case 121 KeyCode = 0 Me.txt_ASCII.Text = "" Me.txt_Key.Value = "121" End Select Call txt_Key_Change
End Sub
[/vba] переменная Lng и как ОНО работает
[p.s.]Мне всё-таки удалось добить эту фигню на одном только событии KeyDown :hands: Теперь выкладываю нормальную, без извращений, версию с KeyPress. Одного не пойму — зачем в коде [vba]
Код
Option Explicit
Private Sub txt_Коды_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Enter Then Cancel = True Enter = False End If
End Sub
Private Sub txt_Key_Change()
If Smb = "" And Lng < Len(Me.txt_Key.Value) And Me.txt_Key.Value <> Code Then Smb = Right(Me.txt_Key.Value, 1) Me.txt_ASCII.Text = Asc(Smb) End If Me.txt_Key.Value = Code Lng = Len(Me.txt_Key.Value)
End Sub
Private Sub txt_Key_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Code = KeyCode Smb = "" Me.txt_ASCII.Text = "" Select Case KeyCode Case 18 KeyCode = 0 Me.txt_ASCII.Text = "" Me.txt_Key.Value = "18" Case 121 KeyCode = 0 Me.txt_ASCII.Text = "" Me.txt_Key.Value = "121" End Select Call txt_Key_Change
End Sub
[/vba] переменная Lng и как ОНО работает StoTisteg