Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 17.11.2006, 19:46   [включить плавающее окно]   #1
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Обработка KeyDown на MS VBA

Требуется в форме при редактировании ComboBox'а обрабатывать особым образом нажатие клавиш Delete и Enter.
Eсли я пишу:
Private Sub ComboBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With ComboBox4
Select Case KeyCode
Case vbKeyDelete
'***
Case vbKeyDelete
'***
Case ***
***
End Select
end with
end sub

то у меня перестаёт работать нормальное редактирование поля ввода в этом самом ComboBox4 .

Что нужно, чтобы и нормальное_редактирование работало?
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 17.11.2006, 21:13   [включить плавающее окно]   #2
hellcitizen
Мужской Продвинутый
 
Аватар для hellcitizen
 
Регистрация: 15.11.2005
Адрес: Москва
Насколько я помню вб, там у контролов есть функция, позволяющая симулировать нажатие клавиши на контроле. Что-то вроде .KeyPress наверное. Вот её и надо вызывать в Case Else. Хотя возможно моя память подводит меня...
hellcitizen вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 17.11.2006, 21:49   [включить плавающее окно]   #3
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
KeyPress - не функция, а событие. Функция называется SendKey, но по нейвсе три события снова возникнут: KeyDown-KeyPress-KeyUp, в результате макрос рекурсивно зациклит по KeyDown - и будет сбой защиты по переполнению стека.
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 18.11.2006, 03:14   [включить плавающее окно]   #4
hellcitizen
Мужской Продвинутый
 
Аватар для hellcitizen
 
Регистрация: 15.11.2005
Адрес: Москва
Надо флажок взводить от рекурсии.
hellcitizen вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 18.11.2006, 16:18   [включить плавающее окно]   #5
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Попробовал.
1. На такое макро стал ругаться антивирус (Антивирус Касперского 6.0 Personal).
2. Всё равно не работает редактирование.
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 20.11.2006, 11:36   [включить плавающее окно]   #6
Barloggg
Мужской Продвинутый
 
Аватар для Barloggg
 
Регистрация: 11.03.2003
Адрес: Тьмутаракань2, лен. обл
гм... помню в Дельфе для таких приколов приходилось на время откреплять событие от контроля дабы эта автоматика не самозакрутилась
Barloggg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 20.11.2006, 14:13   [включить плавающее окно]   #7
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
В C++ для этого вызвают метод базового класса, но в Basic-то какая эквивалентная конструкцмя? А насчёт - открепить событие: а как после его снова прицепить?
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 21.11.2006, 11:15   [включить плавающее окно]   #8
Barloggg
Мужской Продвинутый
 
Аватар для Barloggg
 
Регистрация: 11.03.2003
Адрес: Тьмутаракань2, лен. обл
ну через временный указатель.

мне нужно было чтобы при изменении текста едита с клавиатуры срабатывало событие, а при программном изменении - нет.
вот при программном изменении я во временный указатель копировал ссылку, потом обнулял потом вписывал текст, потом возвращал ссылку на место.

в моем случае имело место три едита: в одном длина, во втором высота, в третьем угол наклона. пользователь может вводить два из трех, третье посчитается само.
Barloggg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 21.11.2006, 22:18   [включить плавающее окно]   #9
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Как это всё делается? Форму я создал, а дальше-то - что? Как заполучить адрес обработчика клавиатуры для ComboBox по умолчанию?

Цитата (Barloggg) »
при изменении текста едита с клавиатуры срабатывало событие, а при программном изменении - нет.
Можно было просто при программном изменении флажок взводить и обходить всю обработку.
__________________
Д.Л.Кобяков

Последний раз редактировалось Кобяков Дмитрий Львович; 21.11.2006 в 22:25.
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 22.11.2006, 11:54   [включить плавающее окно]   #10
Barloggg
Мужской Продвинутый
 
Аватар для Barloggg
 
Регистрация: 11.03.2003
Адрес: Тьмутаракань2, лен. обл
это точно, вот так вот просто взять и отцепить что-то я не увидал в справке.

ну, что же, тогда как насчет поднять флажок?
свойство tag для этого вроде хорошо подходит.
хрен там... не подходит.

ну тогда можно использовать ненужный вроде WordWrap в качестве флажка
например так:
Цитата
Private Sub TextBox1_Change()
If TextBox1.WordWrap = True Then Exit Sub
TextBox1.WordWrap = True
TextBox1.Text = TextBox1.Text + "111"
TextBox1.WordWrap = False
End Sub
это работает.
Barloggg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 22.11.2006, 13:12   [включить плавающее окно]   #11
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Ещё раз спрашиваю: как в MS VBA заполучить адрес обработчика KeyDown по умолчанию для ComboBox и TextBox?
__________________
Д.Л.Кобяков

Последний раз редактировалось Кобяков Дмитрий Львович; 22.11.2006 в 13:15.
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 22.11.2006, 14:40   [включить плавающее окно]   #12
Barloggg
Мужской Продвинутый
 
Аватар для Barloggg
 
Регистрация: 11.03.2003
Адрес: Тьмутаракань2, лен. обл
Цитирую
Цитата (Barloggg) »
это точно, вот так вот просто взять и отцепить что-то я не увидал в справке.
Что нужно читать как "хрен его знает".
В явном виде я этих свойств не увидел. значит маловато свободы.

пожалуй стоит вкурить документацию, но за ней еще ехать надо, да и стоит книжка под 200 рублей. хотя лично мне она пожалуй все-таки пригодится. на выходных пошукаю по Крупе.

Barloggg добавил :

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

Barloggg добавил :

кажется это вообще нереально

во, оцени скриншот:
http://img0.liveinternet.ru/images/a...0_ComboSux.jpg
Barloggg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 22.11.2006, 15:31   [включить плавающее окно]   #13
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Так а что ещё нужно от ComboBox для жизни? Набор событий - нормальный...
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 23.11.2006, 08:54   [включить плавающее окно]   #14
Barloggg
Мужской Продвинутый
 
Аватар для Barloggg
 
Регистрация: 11.03.2003
Адрес: Тьмутаракань2, лен. обл
в общем да, но он жесткий!
и переназначить можно только использовав конструкцию if ... then ... else в обработчике.
а суть вопроса-то в том, чтобы просто заменить сам обработчик. а тут похоже облом.

Barloggg добавил :

получается переназначить нельзя вообще, а можно лишь поднимать некий флажок... для вызова подпрограммы или не вызова...
Barloggg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 23.11.2006, 16:27   [включить плавающее окно]   #15
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
А адрес стандартного обработчика как заполучить? Если это научиться делать, то дальше - if...then...else... всё решает.
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 23.11.2006, 23:41   [включить плавающее окно]   #16
hellcitizen
Мужской Продвинутый
 
Аватар для hellcitizen
 
Регистрация: 15.11.2005
Адрес: Москва
Всё работает - только что проверил, вот скрин (версия ворда 10.6764.2625). Работает и в документе, и на форме. Появляется сначала мессаджбокс а потом буковка. Возможно, в вашей функции закралась ошибка, и интерпретатор падает, не успевая вывести букву? Попробуйте закомментировать всю функцию и поставить мессаджбокс, как в моём примере.
Миниатюры
Нажмите на изображение для увеличения
Название: combo.gif
Просмотров: 525
Размер:	25.9 Кб
ID:	19630  
hellcitizen вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 24.11.2006, 15:26   [включить плавающее окно]   #17
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
В MS Excel 2002 (version 10.6816.6817, SP3) и в MS Word 2002 (version 10.6818.6817, SP3) MessageBox появляется, а в самом ComboBox символ не появляется. Ни вместе с MessageBox'ом, ни после его закрытия. Мне эта UserForm5 требуется в MS Excel.

Module1:
Sub CBTest()
UserForm5.Show vbModeless
End Sub


UserForm5:
Как выглядит,- в присоединённом файле

Option Explicit

Private Sub ComboBox1_Change()

End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox "KD: " ' + CStr(KeyCode.Value) + " Shf:" + CStr(Shift)
End Sub
Миниатюры
Нажмите на изображение для увеличения
Название: uf5.gif
Просмотров: 480
Размер:	3.9 Кб
ID:	19646  
__________________
Д.Л.Кобяков

Последний раз редактировалось Кобяков Дмитрий Львович; 24.11.2006 в 15:57.
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Непрочитано 24.11.2006, 22:44   [включить плавающее окно]   #18
hellcitizen
Мужской Продвинутый
 
Аватар для hellcitizen
 
Регистрация: 15.11.2005
Адрес: Москва
Развожу руками и не знаю что сказать, в экселе у меня тоже работает. Если бы мне удалось повторить, может я и мог бы что-то подсказать, а гадать не вижу смысла

hellcitizen добавил :

Могу только посоветовать попробовать в других версиях. на других машинах...
hellcitizen вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 25.11.2006, 00:16   [включить плавающее окно]   #19
Кобяков Дмитрий Львович
Мужской Интересующийся
Автор темы
 
Аватар для Кобяков Дмитрий Львович
 
Регистрация: 29.02.2004
Адрес: Москва
Ладно. Спасибо.
__________________
Д.Л.Кобяков
Кобяков Дмитрий Львович вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:58. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey