ComboBox - помоги разобраться

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

ComboBox - помоги разобраться

Сообщение АндрейБ » 29.07.2009 (Ср) 11:51

В форме присутсвует элемент ComboBox. Все разотает отлично. Но когда данные в нем на латинском языке и когда я набираю первые буквы он сразу подставлет из списка поле с таким значением, но когда на русском - не подставляет. Почему? И как сделать что бы поставлял? Список большой, порядка 100 строк, поэтому визуальный поиск не эффективен. Помогите.
Кто ищет, тот всегда найдет ...

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: ComboBox - помоги разобраться

Сообщение dr.MIG » 29.07.2009 (Ср) 14:01

А почему бы для начала самому не поискать по форуму?
viewtopic.php?f=28&t=13462
Salus populi suprema lex

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 30.07.2009 (Чт) 13:33

Код внедрил в свою форму, но не работает. Мне показалось что вопрос по ссылке стоял в том что поиск идет не по всему списку, т.к. было порядка 10,000 записей в элементе, у меня вопрос стоит в том что не ищет на кирилице, на латинском ищет нормально.
Кто-нибудь еще подскажет?
Кто ищет, тот всегда найдет ...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ComboBox - помоги разобраться

Сообщение Денис » 30.07.2009 (Чт) 14:58

АндрейБ писал(а):Кто-нибудь еще подскажет?

Уточните версию студии (5 или 6) и версию сервиспака.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 30.07.2009 (Чт) 16:21

у мен VB 6.0.
Кто ищет, тот всегда найдет ...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ComboBox - помоги разобраться

Сообщение Денис » 31.07.2009 (Пт) 8:15

АндрейБ писал(а):у мен VB 6.0.

Короче, комбобокс недоделанный у них (сам проверил на своём VB6SP6). Юзай код по ссылке доктора.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 31.07.2009 (Пт) 16:39

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

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ComboBox - помоги разобраться

Сообщение Йода » 31.07.2009 (Пт) 18:44

У меня код по ссылке работает. Выкладывай нерабочий проект.
Sub or Function not defined

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 04.08.2009 (Вт) 11:38

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

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 04.08.2009 (Вт) 12:59

Уважаемый Йода у меня не рабоатет? Я пытал этот код, но ничего не получается (даже вставлял вызов функции AutoFillCombo в событие PressKey у ComboBox).
Есть кто может мне разжувать - буду благодароен? Я сам не силен в VB, особенно когда применяется библиотека "user32".
Где почитать про нее?
В кратце еще раз опишу проблему.
у меня в форме есть 3 элемента ComboBox.
2 заполнены английские терминами (латинский шрифт) Combo1 и Combo2, а 1 рускими терминами (кирилица) Combo3.
Все три эелемента при загрузке формы заполняеются значениями порядка 10-100 в каждом.
Фокус падает на Combo1, я нажимаю клавишу с буквой латинского алфавита и идет автоподстановка с первой буквой которую я нажал, второе нажатие клавиши и далее ищет совпадение по второму символу при условии что первый ужен назначен и т.д. - я думаю все поняли. Это поисходит автоматом.
Combo3 - не работает так, т.к. данными на русском.
Хочу что бы в Combo3 сделано было как в Combo1 и Combo2.

Вот код по ссылке переделанный под мою фому:

Option Explicit
Private Const CB_FINDSTRING = &H14C&
Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)
Private LastComboKeyAscii&

Sub AutoFillCombo(Combo As ComboBox)
Dim I&, P&
I = SendMessage(Combo.hWnd, CB_FINDSTRING, -1, ByVal Combo.Text) + 1
If I > 0 Then
P = Combo.SelStart
Combo.ListIndex = I - 1
Combo.SelStart = P
Combo.SelLength = Len(Combo.Text) - P
End If
End Sub

Private Sub Combo3_Change()
If Not (LastComboKeyAscii = 8) And Not (LastComboKeyAscii = 46) Then AutoFillCombo Combo3
LastComboKeyAscii = 0
End Sub

Private Sub Combo3_KeyDown(KeyCode As Integer, Shift As Integer)
LastComboKeyAscii = KeyCode
End Sub

Ничего не происходит!
Я назначил вызов функции AutoFillCombo на событие PressKey, но функция не работает.
Я сделал точку остановки в AutoFillCombo, оказалось что аргумент Combo = "", хотя
описано AutoFillCombo Combo3.

В чем проблема. Помогите.
Кто ищет, тот всегда найдет ...

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ComboBox - помоги разобраться

Сообщение Йода » 04.08.2009 (Вт) 20:49

АндрейБ писал(а):Я сам не силен в VB, особенно когда применяется библиотека "user32".
Где почитать про нее?
В MSDN. Если туго с английским - попробуй выгуглить нужную, но непонятную функцию\сообщение. В большинстве своём всё находится, иногда есть примеры на VB. Поставь себе API-Guide (примеры использования API на VB) и ApiViewer 2004(объявления функций\процедур, констант и типов).
Твой код по прежнему у меня работает. Что я делаю неправильно? :roll: (во вложении пример работающего кода) Как ты заполняешь списки? Предлагаю тебе приложить свой нерабочий проект.
Вложения
Project1.rar
(1.46 Кб) Скачиваний: 71
Sub or Function not defined

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 05.08.2009 (Ср) 11:58

Спасибо за ответ Йода, скачал твой пример, сегодня поразбираюсь. Если будут вопросы еще напишу.
Просто я не программист, сам пишу для своей фирмы автоматизицию (складскую, бухгалтерскую, менеджерскую),
поэтому делаю как знаю и как могу, часто методом научного тыка:) До этого автоматизировал в самом Акцессе с помощью встроенных в него запросов, форм и отчетов. Сейчас уже пару лет пытаюсь в плотную писать на VB, т.к. в нем все пишеться намного более гибко и независимо.

Вот как я заполняю элемент ComboBox (если интересно), при загрузке Formы.
Set DBS = OpenDatabase("//Server/Server/System/Price/PRICE/AK.mdb")
Set RS = DBS.OpenRecordset("Select * From Makes;")
If RS.RecordCount > 0 Then
RS.MoveFirst
Do Until RS.EOF
Combo1.AddItem RS![MAKE]
RS.MoveNext
Loop
End If
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 05.08.2009 (Ср) 12:12

Йода все получилось, оказалось все проще паренной репы. Св-во ComboBox Style у меня было 2, а по умолчанию у тебя 0, поэтому и не работало. Немного анализа с твоей формой и все ок. Спасибо.
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 05.08.2009 (Ср) 12:26

Йода, подскажи пожалуйста как сделать так что бы при получении Comobox фокуса сменялся язык, что бы при передвижении по элементам (у меня 2 заполнены английскими а 1 рускими данными) менялся автомат и язык, что бы в ручную не проверять и не менять?
Такое реально (для полной автоматизации)?
Кто ищет, тот всегда найдет ...

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

Re: ComboBox - помоги разобраться

Сообщение Хакер » 05.08.2009 (Ср) 12:50

За такое надо бить по рукам. Программа не должна сама менять раскладку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ComboBox - помоги разобраться

Сообщение Денис » 05.08.2009 (Ср) 13:23

Программа не должна сама менять раскладку.

Кроме Punto Switcher! Это автоматический переключатель раскладок. И он специаьно создан для того, чтобы менять раскладку тогда, когда вы случайно забываете это сделать и у вас получается"цштвщцы" вместо "windows".
Скачайте Punto Switcher и все ваши проблемы с раскладкой будут решены!
Фух.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 05.08.2009 (Ср) 13:53

Почему бить по рукам. Я делаю автоматизацию для повышения производительности труда менеджеров, и иногда мелочи сбивают с ритма работы, в данном случае я протестировал форму, и хочу отладить ее, т.к. когда вначале два ComboBox заполнены английскими терминами, а потом третий русскими, не всегда сразу соображаешь что вначале надо сминить язык.
Кроме как Punto Switch, есть просто смена языка в Windows из VB?
Кто ищет, тот всегда найдет ...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ComboBox - помоги разобраться

Сообщение Денис » 05.08.2009 (Ср) 14:22

Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: ComboBox - помоги разобраться

Сообщение Хакер » 05.08.2009 (Ср) 14:37

Почему бить по рукам.

Потому что UI должен быть предсказуемым и интуитивно понятным. Нормальный адекватный человек, работая с твоей программой, будет сам переключать раскладку. Потому что программы обычно не переключают сами раскладку. Догадываешься, какие будут последствия от двойного переключения?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 05.08.2009 (Ср) 17:09

У нас работает с этой программой 4 менеджера, и если бы видел их, ты бы так не сказал на счет адекватности:)
Ну а если серьезно, человек наверное самый приспособленный вид, и он приспосаблевается почти к любым условиям, поэтому я попробую так сделать, и если будут нарекания то уберу, но я немного потестировал сам, мне показалось что будет удобно. Поработает посмотрим.
Кто ищет, тот всегда найдет ...

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

Re: ComboBox - помоги разобраться

Сообщение Хакер » 05.08.2009 (Ср) 17:22

Не нужно адаптировать софт для дебилов. Если такой софт попадёт в руки не-дебила, то страдать будет последний.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ComboBox - помоги разобраться

Сообщение iGrok » 05.08.2009 (Ср) 19:56

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

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

После добавления фишки с автопереключением жить стало конкретно проще.. Естественно, она была задокументирована, и этот момент был описан в хелпе.

Соглашусь в одном. Для софта, выпускаемого "в мир" таких фишек делать нельзя.

З.Ы. В моём случае было пофигу, дебил пользуется, или нет. Переключение происходило на нужный язык. Информации на другом языке в этом поле быть не должно было, да и просто не могло.
А вот до введения фишки работа с принятием товара в брак происходила по следующему алгоритму:
- заполнить информацию о товаре, неисправности, поврежедниях, табом переключиться на поле с серийником, "стрельнуть" сканером штрихкод с девайса, ввести фамилию, нажать "печать". Посмотреть на напечатанное, матюгнуться про себя, сделать всё ещё раз, НЕ ЗАБЫВ переключиться на англ перед снятием серийника сканером, и обратно перед вводом фамилии. Напечатать ещё раз. Отдать часть клиенту, дойти до секретаря, отдать ему ошибочную бумажку, и попросить прибить её в базе, как ошибочную.

Как-то так.
label:
cli
jmp label

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 06.08.2009 (Чт) 13:20

Igrok - ты правильно говоришь, задачи иногда разные и методы реализации разные.
Я посмотрел смену языка в поиске, но толком ничего не написано, только то что можно сменить через реестр:
HKEY_USERS\.DEFAULT\Keyboard Layout\Preload (1 - 00000409, 2 - 00000419)
Но как пользоваться в VB нет ни одного примера - помоги тупарю:)
Кто ищет, тот всегда найдет ...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ComboBox - помоги разобраться

Сообщение Денис » 07.08.2009 (Пт) 9:19

GetKeyboardLayout, SetKeyboardLayout, getKeyboardLayoutName, getKeyboardLayoutList и т.д.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 07.08.2009 (Пт) 15:13

Денис ты как "Морфей", типа показал дверь, а войти туда я должен сам:)
То что ты мне написал в VB как мне использовать?
Дай пожалуйста один пример.
Кто ищет, тот всегда найдет ...

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

Re: ComboBox - помоги разобраться

Сообщение Хакер » 07.08.2009 (Пт) 15:14

Денис ты как "Морфей", типа показал дверь, а войти туда я должен сам:)

Именно так.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Re: ComboBox - помоги разобраться

Сообщение Shasha » 07.08.2009 (Пт) 18:15

АндрейБ
см.аттач
Вложения
keylang.rar
(1.28 Кб) Скачиваний: 94
С Уважением,
Shasha

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: ComboBox - помоги разобраться

Сообщение АндрейБ » 11.08.2009 (Вт) 16:22

Ну спасибо Сашка.
Кто ищет, тот всегда найдет ...

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: ComboBox - помоги разобраться

Сообщение Yerro » 11.09.2009 (Пт) 14:21

Доброго времени суток.
Насколько я понимаю, ComboBox состоит из EditBox и ListBox, дескрипторы которых можно заполучить с помощью сообщения CB_GETCOMBOBOXINFO.
А возможно ли, используя эти дескрипторы, назначить действующие хуки этим контролам с помощью setWindowLong?
У меня не вышло - setWindowLong возвращает ноль.
Пробовал отправлять сообщение WM_SETTEXT в EditBox ComboBox'а, также безрезультатно.
Есть ли у кого-нибудь соображения, как можно получить управление над контролами ComboBox'а, используя эти дескрипторы?
Спасибо.

pronto
Постоялец
Постоялец
 
Сообщения: 598
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: ComboBox - помоги разобраться

Сообщение pronto » 11.09.2009 (Пт) 16:30

Дескриптор EditBox'a можно получить функцией ChildWindowFromPoint, а ListBox'a — cmbComboBox.Container.hWnd
O, sancta simplicitas!

След.

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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 14

    TopList