DTPicker & SendKeys "{Tab}"

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 17.01.2013 (Чт) 12:02

Здравствуйте. Я перерыл форум, но не нашел ничего по моим "хотениям" к DTPicker, кроме того, что он очень глючный контрол. :roll:

1. Хочу выходить из него по нажатии клавиши "Enter", подобно текстбоксу (см. ниже)

Код: Выделить всё
Private Sub txtPasp_KeyPress(Index As Integer, KeyAscii As Integer)
    If KeyAscii = 13 Then
       SendKeys "{Tab}":      KeyAscii = 0
    End If
End Sub


Но DTPicker не реагирует на эмуляцию "Tab", а выходит только при нажатии самой "Tab". У меня переходы между элементами формы (ввод паспортных данных) везде идет при нажатии "Enter", а при переходе в DTPicker приходится идти к "Tab". Неудобно раздвояивать действия... :(

2. Как по умолчанию сделать, чтобы в нем не выводилась никакая дата, а то в нем всегда указывается min.value - "01.01.1900", а его не хочу? И не обнуляется он никак... Хочется только подчерки, как я видел в многих прогах "__.__.___", а с ним не получается. Или это другой контрол нужен? Тогда где его взять?

Спасибо. :)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.01.2013 (Чт) 15:50

Osteon писал(а):У меня переходы между элементами формы (ввод паспортных данных) везде идет при нажатии "Enter"

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

Osteon писал(а):
Код: Выделить всё
Private Sub txtPasp_KeyPress(Index As Integer, KeyAscii As Integer)
    If KeyAscii = 13 Then
       SendKeys "{Tab}":      KeyAscii = 0
    End If
End Sub

А почему не поставить фокус явно вместо посылки клавиши?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 17.01.2013 (Чт) 16:21

Ну или как вариант вместо эмуляции нажатия клавиши - может непосредственно оконное сообщение посылать.
Бороться и искать, найти и перепрятать

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 17.01.2013 (Чт) 19:31

Qwertiy писал(а):Уже подозрительно... Хотя, в некоторых случаях может быть и удобно...

Почему? Может быть у нас разные подходы? Вы думаете, что лучше переходить по "Tab", и не морочить голову? Просто как-то принято негласно, что нажатие "Enter" означает законченность какого-либо действия, в данном случае - ввода в текстбокс...

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 17.01.2013 (Чт) 19:33

ger_kar писал(а):А почему не поставить фокус явно вместо посылки клавиши?

Как? Не примите за издевку, я просто начинающий...

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 17.01.2013 (Чт) 19:34

ger_kar писал(а):Ну или как вариант вместо эмуляции нажатия клавиши - может непосредственно оконное сообщение посылать.

См. выше - "Как"? Не примите...

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 17.01.2013 (Чт) 19:37

А на второе "хотение" никто не ответит? :(

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 17.01.2013 (Чт) 19:42

Osteon писал(а):
ger_kar писал(а):А почему не поставить фокус явно вместо посылки клавиши?

Как? Не примите за издевку, я просто начинающий...
Вообще этот совет дал не я, но отвечу видимо я :)
Все очень элементарно НужныйТебеTextBox.SetFocus
Получилась гремучая кириллолатинская смесь :)
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 17.01.2013 (Чт) 19:50

Osteon писал(а):А на второе "хотение" никто не ответит? :(
Тоже все элементарно, но несколько сложнее вот ссылка на инфу http://www.firststeps.ru/mfc/winapi/keyb/r.php?59
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.01.2013 (Чт) 20:58

Osteon писал(а):
Qwertiy писал(а):Уже подозрительно... Хотя, в некоторых случаях может быть и удобно...

Почему? Может быть у нас разные подходы? Вы думаете, что лучше переходить по "Tab", и не морочить голову? Просто как-то принято негласно, что нажатие "Enter" означает законченность какого-либо действия, в данном случае - ввода в текстбокс...

принято, причём достаточно гласно, что Enter эквивалентен нажатию Ok, а не переходу к следующему элементу. По крайней мере в Windows. Хотя читал, что в Линуксе не так. Ты случайно не любитель линукса?

Osteon писал(а):
А почему не поставить фокус явно вместо посылки клавиши?

Как? Не примите за издевку, я просто начинающий...

Намного проще, чем посылать нажатия клавишь. Даже WinApi использовать не надо.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 17.01.2013 (Чт) 21:03

Qwertiy писал(а):принято, причём достаточно гласно, что Enter эквивалентен нажатию Ok, а не переходу к следующему элементу.
Во многих продуктах, где требуется заполнение больших форм с обилием текстовых полей по энтеру производится перемещение к следующему заполняемому полю. И это действительно удобно. Мне кстати тоже такой вариант больше нравиться.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: DTPicker & SendKeys "{Tab}"

Сообщение Хакер » 17.01.2013 (Чт) 21:06

ger_kar писал(а):Во многих продуктах, где требуется заполнение больших форм с обилием текстовых полей по энтеру производится перемещение к следующему заполняемому полю.

И переход к предыдущему полю как? Ctrl+Enter?
Одни глупцы придумали, другие тащутся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.01.2013 (Чт) 21:12

ger_kar писал(а):И это действительно удобно.

Я допускаю, что это может быть удобно при наборе большого числа данных на цифровой клавиатуре. Но в других случаях - весьма маловероятно и абсолютно неестественно.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 17.01.2013 (Чт) 21:16

Хакер писал(а):И переход к предыдущему полю как? Ctrl+Enter? Одни глупцы придумали, другие тащутся.
Нет вперед и только вперед!
Qwertiy писал(а):Я допускаю, что это может быть удобно при наборе большого числа данных на цифровой клавиатуре. Но в других случаях - весьма маловероятно.
И на цифровой клавиатуре в т.ч. Не знаю как некоторым, а мне переход по энтеру тоже более удобен. А что до клавиши ОК, то как правило на таких формах она нажимается очень редко.
Бороться и искать, найти и перепрятать

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 18.01.2013 (Пт) 6:53

Хакер писал(а):Одни глупцы придумали, другие тащутся.

Чо ругаисси? Если не так, как ты привык, значит неправильно? :x Переход к предыдущему можно обработать стрелку, как в Excel'е. Только мне не нравятся Excel'евские переходы.

ger_kar писал(а):Все очень элементарно НужныйТебеTextBox.SetFocus

Это так, вот только я не знал, как с DTPicker'а уходить... Потом нашел вариант:

Код: Выделить всё
Private Sub dtPasp_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then SendKeys "{Tab}"
End Sub


Может быть коряво, :oops: но - работает...

ger_kar писал(а):вот ссылка на инфу http://www.firststeps.ru/mfc/winapi/keyb/r.php?59

Вот здесь я не понял: ссылка направляет на " WM_KEYDOWN", и неясно, как это связать с "хотением" сделать окно DTPicker'а по умолчанию без даты, в виде "__.__.___"? Хотя бы намеком, а?

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 18.01.2013 (Пт) 7:02

Osteon писал(а):Это так, вот только я не знал, как с DTPicker'а уходить... Потом нашел вариант:

Поспешил выхвастаться - при применении данной процедуры фокус с предыдущего элемента перескакивает DTPicker, приходится возвращаться. Будем искать... :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 18.01.2013 (Пт) 7:16

Osteon писал(а):Это так, вот только я не знал, как с DTPicker'а уходить... Потом нашел вариант:
Ну тут же важно не с чего уходить, а какому контролу переходить. Соответственно после НужныйТебеTextBox.SetFocusфокус перейдет на нужный тебе контрол с названием НужныйТебеTextBox и при этом совершенно неважно где находился фокус до этого и не надо никакого извращения придумывать.
Osteon писал(а):Вот здесь я не понял: ссылка направляет на " WM_KEYDOWN", и неясно, как это связать с "хотением" сделать окно DTPicker'а по умолчанию без даты, в виде "__.__.___"
Вообще то это было связано не с форматом даты, а с тем же, что написано выше. Т.е. посылкой окну DTPicker'а сообщения напрямую.
Что касается форматирования, то с DTPicker'ом напрямую, без сильных извращений это сделать вряд ли получиться. Можно сделать по другому, совместить календарик и Masked Edit Control. Т.е. сделать такой составной контрол.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 18.01.2013 (Пт) 7:50

Osteon писал(а):Если не так, как ты привык, значит неправильно?

Если не так как прия\нято в винодоусе, то 95%, что неправильно.

Osteon писал(а):Поспешил выхвастаться - при применении данной процедуры фокус с предыдущего элемента перескакивает DTPicker, приходится возвращаться. Будем искать... :)

Естественно, т. к. надо KeyDown. Или поменять на KeyUp везде.

Osteon писал(а):Это так, вот только я не знал, как с DTPicker'а уходить...

Какая разница откуда?

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 18.01.2013 (Пт) 8:14

Qwertiy писал(а):Естественно, т. к. надо KeyDown. Или поменять на KeyUp везде.

KeyDown работает.

ger_kar писал(а):Ну тут же важно не с чего уходить, а какому контролу переходить. Соответственно после НужныйТебеTextBox.SetFocusфокус перейдет на нужный тебе контрол с названием НужныйТебеTextBox и при этом совершенно неважно где находился фокус до этого и не надо никакого извращения придумывать.


Наверное, непонятка вышла. Чтобы выйти из контрола, нужно нажатие какой-либо клавиши, так? В данном случае у меня 2 DTPicker'а подряд - дата рождения, дата регистрации в базе. Затем идет текстбокс для адреса. Вхожу в первый пикер без проблем при нажатии клавиши "Enter" на предыдущем текстбоксе. А затем пикер не отлавливает "Ентер", как в текстбоксе, на событии KeyPress. Когда я ставлю брейкпойнт на DTPicker_KeyPress(), KeyAscii вообще не передает "13". Выход из контрола можно осуществить при нажатии "Tab", но и в этом случае не передается код KeyAscii. В отношении SetFocus все понятно, но тоже не понимаю, зачем лепить SetFocus, если при эмуляции нажатия "Tab" фокус автоматически передается на очередной элемент формы согласно свойству TabIndex?

ger_kar писал(а):Osteon писал(а):
Это так, вот только я не знал, как с DTPicker'а уходить...

Какая разница откуда?

Как раз и получается, что задача стоит не как перейти на другой элемент, а как выйти с DTPicker'а...

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 18.01.2013 (Пт) 8:17

ger_kar писал(а):Вообще то это было связано не с форматом даты, а с тем же, что написано выше. Т.е. посылкой окну DTPicker'а сообщения напрямую.
Что касается форматирования, то с DTPicker'ом напрямую, без сильных извращений это сделать вряд ли получиться.

Не, извращаться сильно не хочется, пусть лучше с изначальной датой висит... Немного несмотрибельно просто...

ger_kar писал(а):Можно сделать по другому, совместить календарик и Masked Edit Control. Т.е. сделать такой составной контрол.

А вот здесь прошу поподробнее - Masked Edit Control - это какой-то готовый контрол в VB, или самому что-то ваять нужно?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 18.01.2013 (Пт) 19:16

Osteon писал(а):А вот здесь прошу поподробнее - Masked Edit Control - это какой-то готовый контрол в VB, или самому что-то ваять нужно?

Нужно его подключить
18.01.png
18.01.png (20.42 Кб) Просмотров: 4843

А здесь о том как его юзать http://realcodding.ru/content/ispolzova ... skedbox-vb

Ну и пример с переходами
Пример.rar
Пример с переходами
(4.19 Кб) Скачиваний: 85


Ну а приделать календарь к маскэдиту попробуй вначале сам.
Бороться и искать, найти и перепрятать

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 19.01.2013 (Сб) 18:08

ger_kar писал(а):Ну а приделать календарь к маскэдиту попробуй вначале сам.

Хорошо, буду пробовать... Спасибо, о результатах сообщу... :D

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.01.2013 (Сб) 20:39

ger_kar писал(а):Ну и пример с переходами

А если проект не открывается нормально? Ну и не компилируется соответственно...
Код: Выделить всё
Line 29: Class MSComCtl2.DTPicker of control DTPicker2 was not a loaded control class.
Line 41: Class MSComCtl2.DTPicker of control DTPicker1 was not a loaded control class.
Line 35: The property name _ExtentX in DTPicker2 is invalid.
Line 36: The property name _ExtentY in DTPicker2 is invalid.
Line 37: The property name _Version in DTPicker2 is invalid.
Line 38: The property name Format in DTPicker2 is invalid.
Line 39: The property name CurrentDate in DTPicker2 is invalid.
Line 47: The property name _ExtentX in DTPicker1 is invalid.
Line 48: The property name _ExtentY in DTPicker1 is invalid.
Line 49: The property name _Version in DTPicker1 is invalid.
Line 50: The property name CustomFormat in DTPicker1 is invalid.
Line 51: The property name Format in DTPicker1 is invalid.
Line 52: The property name CurrentDate in DTPicker1 is invalid.

PS: Я так и предлагал сделать - везде KeyUp. Зато тут SetFocus, как и надо было делать :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 20.01.2013 (Вс) 7:53

Ну наверное компонент просто не установлен.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.01.2013 (Вс) 21:01

ger_kar писал(а):Ну наверное компонент просто не установлен.

Хм.. Exe'шник-то рабоает...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: DTPicker & SendKeys "{Tab}"

Сообщение ger_kar » 20.01.2013 (Вс) 21:36

Qwertiy писал(а):Хм.. Exe'шник-то рабоает...
Странно. Тогда причина вообще не ясна. Ошибка говорит, что не может загрузить класс. Может с Tlb не лады. А после компиляции она уже и не нужна.
Бороться и искать, найти и перепрятать

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 21.01.2013 (Пн) 13:22

Qwertiy писал(а):А если проект не открывается нормально? Ну и не компилируется соответственно...

Не, у меня все открылось и работает...

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: DTPicker & SendKeys "{Tab}"

Сообщение Osteon » 21.01.2013 (Пн) 13:23

Osteon писал(а):Ну и пример с переходами

Спасибо, я так приблизительно и сделал, когда без "TAB" пробовал...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

    TopList