Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Lena

Горизонтальная прокрутка в списке

29.05.2007, 14:33. Показов 4649. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь изготовить базу данных в MS Access 97.
В форме из выпадающего списка надо выбрать значение. Проблема в том, что значение содержит более 200 символов и на экране не помещается.
Вопрос. Как добавить горизонтальную прокрутку в список? Или, может быть, есть какие-то другие способы для просмотра длинных записей в списке?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2007, 14:33
Ответы с готовыми решениями:

Горизонтальная прокрутка в ListBox
Привет всем! Подскажите,как использовать HScrollBar для просмотра длинной строки в ЛистБоксе, не разворачивая листбокс на весь экран в...

Горизонтальная прокрутка в List
Добрый день! Скажите, а такое в принципе возможно???

Горизонтальная прокрутка
Доброго времени суток. У меня на сайте размещены 5 изображений в один ряд. Этот ряд разнимает почти всю ширину. Мне нужно сделать, чтобы...

15
Spirit
29.05.2007, 16:14
А разве нельзя сделать поле со списком чуть повыше, чтобы помещалось 2 строки, например !?
Lena
29.05.2007, 16:28
Можно. Только это не поможет
В поле со списком может помещаться сколько угодно строк, но что делать, если одна строка списка содержит 200 символов? Т.е. запись из таблицы содержит 200 символов, а список использует таблицу в качестве источника строк.
Mavr
29.05.2007, 18:58
Горизонтальный скролинг добавить нельзя, можно только определить ширину выпадающей части, вот только если у тебя там не будет длинных строк выпадающая часть комбобокса все равно будет такой какой ты ее задала.
Lena
29.05.2007, 19:30
А есть какие-то другие пути, кроме горизонтальной прокрутки? Например, как сделать, чтобы при наведении курсора на пункт списка, не помещающийся в экран, всплывала подсказка (как в стандартном Windows Help?
VladK
29.05.2007, 20:32
Lena,

Y vam prishlyu vse kodi'. Nughen vash e-mail.

Vlad
VladK
29.05.2007, 20:57
Lena, ya uvidel vash e-mail. Prishlyu cherez neskol'ko chasov.
Gorizontal'naya prokrutka vpolne vozmoghna.
Meghdu tem, vot sovet kak sdelat' podskazku na vi'branni' e'lement spiska:

1. Preghde chem zapolnyat' spisok combo boxa, prodeklariruyte svoy tip, sostoyashiy iz dvuh strokovi'h peremenni'x. Zatem, prodeklariruyte massiv e'togo svoego tipa. Zatem, prisvaivaite pervomu polyu massiva elementi' spiska, kotori'y dolghen bi't' v combo boxe, a vtoromu e'lementu spiska - poyasnenia k sootvetstvuyuschemu e'lementu. Nakonetz, v sobi'tii Click vashego kombo boxa prisvaivate svoystvu ToolTip sootvetstvuyuschiie znacheniya:


V module:
Visual Basic
1
2
3
4
5
6
Type tCType    
    C_Stts As String
    C_Dscrptn As String
End Type
 
Global gC() As tCType
V Form Load event:

Psevdo kod, populiruyuschiy vash massiv strokami, poyduschimi v kombo box i v poyasnitel'nuyu chast'.
Visual Basic
1
2
3
4
5
For i = 0 to 99 ' predpolagaem 100 elementov spiska
   gc.C_Stts = object1(i)
   gc.C_Dscrptn = object2(i)
   Form1.cmbBox1.AddItem gC(i).C_Stts 
next i
V cmbBox1 click event:
Visual Basic
1
2
3
4
5
If cmbBox1.ListIndex <> -1 Then 
   cmbBox1.ToolTipText = gC(cmbBox1.ListIndex).C_Dscrptn 
Else
   cmbBox1.ToolTipText = vbNullString
End If
Mavr
30.05.2007, 07:00
VladK речь идет об комбобоксе в Access'е, а не про VB-ый комбобокс, у акцесного комбобокса нет метода AddItem и вместо свойства ToolTipText у него есть свойство ControlTipText, а что бы при наведении мыши на комбобокс появлялся ToolTipText со значением в комбобоксе:
Visual Basic
1
2
3
Private Sub Combo_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Combo.ControlTipText = Combo.Value 
End Sub
Если комбобокс многостолбцовый вместо Value, можно Combo.Column(n), n- номер столбца, начиная с 0

Прочитал еще раз твой вопрос ты хотела, что бы при наведении на любой пункт выпадающего списка появлялся ToolTipText, к сожалению нет возможности отследить какой элемент сейчас в выпадающей части списка активен.
Lena
30.05.2007, 12:34
VladK, большое спасибо за коды. Мне они очень пригодятся, когда такую же задачу придется решать в VB.
Но, в данный момент, речь идет об уже практически готовой базе под Access.

Mavr, я правильно поняла, что в Access для comboBox и для listBox идею со всплывающей подсказкой реализовать не удастся? Может, есть еще какие-то идеи что можно сделать, чтобы прочитать длинные строки в списке?
Mavr
30.05.2007, 12:58
В ListBox'е как раз таки есть горизонтальная прокрутка, она включается автоматом если ширина столбца не входит в отображаемую зону, только вот если листбокс многостолбцовый, то реально горизонтальный скролинг позволит просмотреть полностью последний столбец (если у него ширина задана очень большой), и при перемещении по элементам в листбоксе можно выбираемую строку отображать в ToolTipText'е, т.к. в листбоксе при каждом перемещении по строкам, генерятся события BeforeUpdate, AfterUpdate и сам листбокс принимает значение из выбранной строки.
Другое дело комбобокс, он не имеет горизонтального скролинга и перемещение по строкам в выпадающей части комбобокса ни как не отследить, события генерятся только при выборе определенной строки в в списке комбобокса. Поэтому и нельзя менять ToolTipText у комбобокса при перемещении по строкам в его списке. Можно только при наведении мышки на комбобокс в тултипе отразить текущее выбранное значение, и если там длиннаяя строка то она отразится в тултипе (код см. выше).
Можешь попробывать использовать какой - нибудь ActiveX'ый ComboBox.
Больше ни чего тебе посоветовать пока не могу, если придет что-нибудь на ум то напишу.
Lena
30.05.2007, 13:52
В ListBox если число столбцов = 1 и ширина столбца больше ширины списка, то горизонтальной прокрутки нет. Если поставить число столбцов = 2, тогда горизонтальная прокрутка появляется, но запись все равно не читается, а прокручивается к следующему столбцу. Такая вот фигня получается.
0 / 0 / 0
Регистрация: 09.05.2007
Сообщений: 130
30.05.2007, 19:13
Lena!

Reschenije 'ne krasivoje', no esli v ka4estve vremennogo varianta dlja raboty/otladki - to vpolne moscho:

Pomeschajte tekuscheje za4enije Combobox v ego sche svojstvo 'ControlTipText' togga moschno budet smotret' text kak podskazku. T.e. vybirajete zna4enije iz spiska i snova navodite myschku na ComBox.

Ponjatno, 4 to dlja pol'zovatekja ne godit'sja, no sato deschevo i serdito.

P.S. No esli ComboBox u vas v 'Fram'e', to etot fokus tak prosto ne prohodit.
0
Mavr
31.05.2007, 05:52
Ну дык код, который я в начале писал это и делает.

pakhomov_a, ты мне как-то присылал по мылу вопрос по поводу отлатки программы, я извеняюсь, но я твое письмо нечаяно грохнул, и у меня не осталось твоего адреса, на Relib.com ты тоже не указал свой почтовый адрес, но ответ я написал, осталось только адрес вставить, поэтому как только ты мне пришлешь свой адрес, я сразу тебе отправлю ответ.
0 / 0 / 0
Регистрация: 03.05.2007
Сообщений: 7
31.05.2007, 07:35
Мне кажется должно помочь вот это:

Из рассылки 'VB Хитрости - советы и ответы на вопросы'

Определение, какая item находится под курсором мышки в листбоксе

Часто, бывает нужда в определении элемента, над которым пользователь держит мышку. Как наиболее тривиальное применение - вывод дополнительной информации или подсказки в статус бар , причем контекстно зависимой от элемента. Или , например показ текущего элемента в другом листбоксе.

Бэйсик сам не дает нам такой функциональности , но к счастью , используя API функцию SendMessage() и константу LB_ITEMFROMPOINT такая возможность у нас появляется.

Обьявить SendMessage() можно прямо на форме

Visual Basic
1
2
3
4
Private Declare Function SendMessage Lib _
'user32' Alias 'SendMessageA' (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal _
wParam As Long, lParam As Any) As Long
LB_ITEMFROMPOINT - это сообщение будет извлекать индекс (начиная с 0)
Обьявляем эту константу там же
Visual Basic
1
Private Const LB_ITEMFROMPOINT = &H1A9
Координаты мыши будут передаваться в параметр lParam , и значение этих координат должно быть в пикселях . VB cвои значения выдает в твипсах, соотвественно мы должны позаботиться о конвертации перед передачей этих значений в API функцию.
Это можно сделать так:

((YPosition * 65536) + XPosition))

Ну, и наконец, SendMessage() может возвращать вам два типа значений. Если функция определяет, что указатель мыши находится над листбоксом - то она вернет номер индекса листбокса. Если мышка в другом месте , то функция вернет сзначение равного старшему слову координаты плюс 65537. Собственно достаточно будет проверить на соотвествие возвращаемый индекс. вряд ли кто то будет держать в листбоксе столько элементов.

Итак, нижеследующий код показывает как это все написать.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub List1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim P As Long
Dim XPosition As Long, YPosition As Long
XPosition = CLng(X / Screen.TwipsPerPixelX)
YPosition = CLng(Y / Screen.TwipsPerPixelY)
 
P = SendMessage(List1.hWnd, LB_ITEMFROMPOINT, 0, ByVal _
((YPosition * 65536) + XPosition))
If P < .ListCount Then
Msgbox 'текущее значение индекса - : ' & P
End If
End Sub
0
Mavr
31.05.2007, 07:46
Это для листбокса, а для выпадающего списка в комбобоксе это работать будет?
Если будет, то все равно этот код для комбобокса не куда будет вставить, т.к. когда мышкой движешь по выпадающей части комбобокса, MouseMove не возникает.
0 / 0 / 0
Регистрация: 03.05.2007
Сообщений: 7
01.06.2007, 08:30
2Mavr:
Combo с точки зрения Windows такое же окно как и List, только другого класса, и ему также можно послать сообщение, только свое. То есть копать нужно в этом направлении.
С другой стороны, интерфейс с List-ом не хуже, чем с Combo. Но если 'только Combo' и ничего не находится, то лучше по-моему обойти эту проблему (ну не писать же в самом деле свой Combo). Например, при загрузке Combo ограничить длину строки, более длинные заменить аббревиатурами, показать расшифровку аббревиатур отдельно.

На мой взляд лучший вариант - использовать List (код примера отлично работает) и сбрасывать значение под курсором в отдельное поле или в статусную строку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2007, 08:30
Помогаю со студенческими работами здесь

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

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

Горизонтальная прокрутка
Как в Windows Phone реализовать горизонтальную прокрутку элементов без использования Pivot?

Горизонтальная прокрутка
Можно ли поставить overаflow только для горизонтальной прокрутки?

Горизонтальная прокрутка
Добрый день. У меня следующая проблема. Есть разметка &lt;div class=&quot;carousel&quot;&gt; &lt;a href=&quot;#&quot;&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru