Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Скроллинг колесом ленточной формы - уезжает первая строка / 11 сообщений из 11, страница 1 из 1
04.12.2006, 15:37
    #34175178
udav2alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Может плохо искал - не нашел, ткните, пожалуйста, носом...

Access 2003

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

Такая фича наблюдается на трех разных машинах.

Подскажите, пожалуйста, как с этим бороться? И насколько вообще такая ситуация уникальна?
...
Рейтинг: 0 / 0
04.12.2006, 15:53
    #34175239
bILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
у меня такаяжэ ситуевина
...
Рейтинг: 0 / 0
04.12.2006, 16:26
    #34175372
Скроллинг колесом ленточной формы - уезжает первая строка
тот же глюк
и не только на 2003, на хр было то же саме

когда-то пытался ставил принудительно фокус на первую запись на событие прокрутки, возникающее на второй записи... теперь не ставлю - пользователи привыкли лезть в прокрутку
...
Рейтинг: 0 / 0
04.12.2006, 21:06
    #34176031
udav2alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Мммда... Грустно... Спасибо, попробую с поиграть с фокусом...
...
Рейтинг: 0 / 0
05.12.2006, 10:20
    #34176657
Artcloud
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Я так понимаю access и колесо прокрутки - впринципе не совместимые вещи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.01.2009, 20:44
    #35755992
Dutch Shultz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Может у кого появилсись идеи-вот и я до этого глюка дошел)
...
Рейтинг: 0 / 0
14.01.2009, 10:22
    #35756548
Gluck_13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Поскольку с Аксом многие стандартные вещи тяжело совместимы, в моем проекте все окна форм (а также главное окно и окно MDI-клиента) субклассированы через DLL, реализованную на C++, что позволяет избежать падений, случающихся при написании оконной процедуры на VBA.

При таком подходе можно существенно расширить возможности UI, предоставляемые Акс-ом, например есть реализации для Custom-Draw полей ленточной формы (иконки + текст), организация параллельных оконных стеков - внутри каждого стека доступна только верхняя форма, а переключение между ними производится при помощи тулбара типа панели задач Windows, "резиновые" заголовки столбцов ленточной формы и т.п.

На обсуждаемый баг с прокруткой колесом ранее как-то не обращал внимания (с Акс-ом работаю всего около 3 месяцев), однако решил и его подправить. Вот кусок субклассированной оконной процедуры класса C++, реализующего субклассинг окна формы Access.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
LRESULT CFormSubclasser::SubclassedWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bNoDefault)
{
	CWndStack* ws;
	if (m_IsSubForm) return  0 ;  // Для вложенных форм ничего не делаем.

	switch (uMsg) {
	case WM_MOUSEWHEEL:         // прокрутка мышкой
 		// Если не нажимали всяких шифтов и крутили вверх
		if ((LOWORD(wParam) ==  0 ) && (((short)HIWORD(wParam)) >  0 ))
		{
			int scp;
			HWND hScrollBar = GetVerticalScrollBar();       // ищем скроллбар формы
			if (hScrollBar) {
				// текущая позиция скроллбара
				scp = GetScrollPos(hScrollBar, SB_CTL);
				// вызовем стандартную оконную процедуру, пусть Акс выполнит прокрутку
				LRESULT lRetVal = CallDefaultProc(hWnd, uMsg, wParam, lParam);
				*bNoDefault = TRUE;    // Стандартную процедуру второй раз не вызываем
				// Если Акс никуда ничего не прокрутил
				if (GetScrollPos(hScrollBar, SB_CTL) == scp) {
					// Имитируем нажатие на стрелочку вверх в скролл-баре
					PostMessage(m_hWnd, WM_VSCROLL, SB_LINEUP,  0 );
				}
				return lRetVal;
			}
		}
		break;
	case ... (здесь обработка других сообщений, к обсуждаемой проблеме не относящихся)

Наверное, что-то подобное можно сотворить и на VBA, например в Form_MouseWheel посылать окну WM_VSCROLL при определенных условиях, однако этот способ я не исследовал, тем более что обработчик придется копи-пастить во всех формах.
...
Рейтинг: 0 / 0
14.01.2009, 17:36
    #35757881
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Да, глюк, аднака... Можно просто отрубать событие колеса мыши в таком случае.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.12.2016, 10:16
    #39364703
I am sorry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Бенедикт,
Прошу прощения за поднятый старючий пост, но тоже столкнулся с такой же проблемой.
Отключил колесо банальным отключением вертикальной полосы прокрутки в макете свойств формы.
...
Рейтинг: 0 / 0
13.12.2016, 09:07
    #39365417
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Отключили полосу прокрутки? А как же тогда перемещаться по записям? При помощи кнопок навигации? А если записей много?
...
Рейтинг: 0 / 0
13.12.2016, 10:17
    #39365498
I am sorry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг колесом ленточной формы - уезжает первая строка
Joss,
Ну, если отключить прокрутку колеса, то в любом случае перемещаться по записям в случае их действительно большого количества, будет затруднено, несмотря на наличие бокового ползунка. Хотя, да, с ним всё же легче, чем без оного. Но если записей в ленточной форме немного (подчинённая форма, берущая записи из некоей связанной таблицы с несколькими характеристиками-данными основной записи), то вполне на пару десятков записей такое решение приемлемо. Есть и такое решение: http://am.rusimport.ru/msaccess/topic.aspx?ID=667.
Решение от Microsoft https://support.microsoft.com/ru-ru/kb/2458709 Но тут надо добавлять учёт того, что курсор может быть на первой или последней записи, так как при дальнейшей прокрутке за пределы первой или последней записи выходит ошибка.
И нигде пока не нашёл, как сделать так, чтобы при прокрутке колёсиком перемещался не курсор по записям, а двигалась форма вверх-вниз, текущая же запись оставалась бы на месте.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Скроллинг колесом ленточной формы - уезжает первая строка / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]