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

Access 2003

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

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

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

когда-то пытался ставил принудительно фокус на первую запись на событие прокрутки, возникающее на второй записи... теперь не ставлю - пользователи привыкли лезть в прокрутку
...
Рейтинг: 0 / 0
Скроллинг колесом ленточной формы - уезжает первая строка
    #34176031
udav2alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мммда... Грустно... Спасибо, попробую с поиграть с фокусом...
...
Рейтинг: 0 / 0
Скроллинг колесом ленточной формы - уезжает первая строка
    #34176657
Artcloud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю access и колесо прокрутки - впринципе не совместимые вещи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Скроллинг колесом ленточной формы - уезжает первая строка
    #35755992
Dutch Shultz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может у кого появилсись идеи-вот и я до этого глюка дошел)
...
Рейтинг: 0 / 0
Скроллинг колесом ленточной формы - уезжает первая строка
    #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
Скроллинг колесом ленточной формы - уезжает первая строка
    #35757881
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, глюк, аднака... Можно просто отрубать событие колеса мыши в таком случае.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Скроллинг колесом ленточной формы - уезжает первая строка
    #39364703
I am sorry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикт,
Прошу прощения за поднятый старючий пост, но тоже столкнулся с такой же проблемой.
Отключил колесо банальным отключением вертикальной полосы прокрутки в макете свойств формы.
...
Рейтинг: 0 / 0
Скроллинг колесом ленточной формы - уезжает первая строка
    #39365417
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отключили полосу прокрутки? А как же тогда перемещаться по записям? При помощи кнопок навигации? А если записей много?
...
Рейтинг: 0 / 0
Скроллинг колесом ленточной формы - уезжает первая строка
    #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
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Скроллинг колесом ленточной формы - уезжает первая строка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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