powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ээмуляция табличной формы
8 сообщений из 33, страница 2 из 2
Ээмуляция табличной формы
    #39541832
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin,

помаргивание в VBA это не из-за таймера, а из-за уставновленного фильтра(hook) сообщений функцией SetWindowsHookEx.
Это происходит только тогда, когда открыта хотя бы одна форма, подписанная на события класса FormScrollBars. Т.е. установлен hook (Hook <> 0):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub InstallHook()
'Установим Hook
    If Hook = 0 Then
        Hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf Scroll_LowLevelMouseProc, ByVal 0&, 0)
        Set TimersCol = New Collection
        blnCtrlGotFocusDoNotNeeded = False
    End If
End Sub


Когда формы, за прокруткой которых нужно следить, закрыты, то hook снимается.
вообще, если делать по хорошему, то значение Hook лучше хранить в TempVars. Тогда оно никогда не потеряется при сбросе переменных.

Преимущество SetWindowsHookEx перед субклассингом в том, что Access пропускает через себя не все подряд сист.сообщения, а только их часть, здесь - только те из них, которые определяются константой WH_MOUSE_LL
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39541916
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinПо субклассингу, я смотрю, на Стэке тоже на смогли помочь.
да, причем, любопытно, чем закончилось обсуждение на Social.msdn:
https://social.msdn.microsoft.com/Forums/office/en-US/4cf1d113-d905-4cdf-9f82-eb2c8d3666ed/setwindowlong-on-a-ms-access-form-what-happens-if-ide-window-is-open?forum=accessdev

Оказалось, что закрыть окно среды VBE невозможно. По клику на "крестик" окна VBE, Access просто скрывает это окно, но не закрывает.
А при закрытии этого окна силой через API, кроме окна VBE закрывается также основное окно Access.
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39541976
GVOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вакшуль СергейGVOV,

заметил три шероховатости:
1. Если сделать двойной клик по стрелке гор.полосы прокрутки, то вместо ожидаемых смещений на ширину двух столбцов, происходит смещение только на один столбец.
2. Станьте в поле(значение 6129). Нажмите TAB. Что произошло со значением в поле, куда перешел фокус? Нажмите TAB снова. Опять фокусы.
3. Станьте в итоговое поле(значение 97). Кликните по стрелке гор.полосы прокрутки вправо. Посмотрите, что произошло с итогом по столбцу "Сумма". Сделайте еще пару кликов по стрелке. Итог по "Сумма" отображается некорректно.

Я правильно понял, что ваша цель - создание горизонтальных и вертикальных(несмещаемых) итогов?

Да, в примере я допустил несколько неточностей в поведении табличных полей. Результирующие поля должны быть заблокированы (спасибо за замечание). Двойное нажатие на полосе прокрутки я так понял не обрабатывается, но это не критично, потому что скрытых полей будет не много и их отображать будет легче дёргая полосу прокрутки или просто табом (стрелкой вправо-лево) стоя в таблице.
Исправил поведение полей. Как будто сейчас всё работает отлично, но вот с полосой прокрутки (придание вида) так и не разобрался. Двигать полосу прокрутки скрытой подформы научился, а вот обратно, двигать синхронно форму нет (Если бы научиться отлавливать уход полей с фокусом из видимой области то было бы самое то)

Да, основная задача создание горизонтальных и вертикальных итогов которые будут корректно смещатся (особенно по горизонтали).
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39542104
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinМой вопрос именно в том, как сгенерировать событие ..., в идеале еще от изменения размеров/положения колонок табличной формы.
кстати, а этот вопрос можно решить и без SetWindowsHookEx.

Собственно событие это - Form_MouseUp. На нем все и ловится.

Проблемный момент в том, что ловится то оно ловится, но только в том случае, если клавиша мыши отпускается вверх в момент, когда курсор мыши находится в зоне заголовков столбцов. Если же переместить мышь в другую зону(выше или ниже заголовков) и отпустить, то событие не произойдет.
Идею, как с этим справится мне подсказал Андрей Митин ... в 2002-ом :)
Функции пересчета координат тоже его.
Идея в том, что зона перемещения курсора ограничивается с помощью функции API ClipCursor. Т.е. пока нажата и не отпущена левая клавиша траектория перемещения курсора замыкается в том пространстве, где гарантированно произойдет нужное нам событие Form_MouseUp, т.е. в зоне заголовков столбцов.

Я на очень скорую руку надергал фрагменты из старого примера для демонстрации. См.вложение.
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39542107
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GVOV,
вы выложили пример в mdb. У вас и рабочая база тоже в mdb? Под какую версию Access разрабатываете?
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39542108
GVOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вакшуль СергейGVOV,
вы выложили пример в mdb. У вас и рабочая база тоже в mdb? Под какую версию Access разрабатываете?

Нет, рабочая программа в mde, упакованная в sfx архив. Это только пример в mdb для удобства. Разрабатываю под 2003 Access
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39558614
GVOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В моём примере при вводе данных подсчёт суммы в колонку справа осуществляется нормально а вот сумми рование внизу срабатывает только при переходе на следующую запись.

Можно ли реализовать суммирование не выходя из записи? Пытался сохранять запись после редактирования каждого поля но тогда курсор переходит постоянно на первое поле.
Эта проблема решаема или обновление возможно только после выхода из записи?
...
Рейтинг: 0 / 0
Ээмуляция табличной формы
    #39558634
GVOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отбой, разобрался сам ;)
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ээмуляция табличной формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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