|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Цитата из статьи: Можно инициировать событие Scroll, выпустив метод Scroll для формы, кадра или страницы. Пользователи могут генерировать события Scroll, перемещая ползунок. Ссылка на эту статью: https://msdn.microsoft.com/ru-ru/library/office/gg251461.aspx Вопрос как инициировать событие Scroll? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2017, 21:35 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, может из этого что пригодится Считывание и установка позиции скроллбаров у формы Access ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2017, 21:50 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
guest_rusimport, код 14 летней давности пугает. Я пытался засунуть это в форму... Сходу не получилось... Я хочу сделать, чтобы при движении scrolla вправо, двигалось поле в подчиненной форме вправо. В статье есть строка - "инициировать событие Scroll" ... Как его иницировать...? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2017, 21:56 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentЯ хочу сделать, чтобы при движении scrolla вправо, двигалось поле в подчиненной форме вправо... Так в чём проблема? См. приложенный пример с использованием приведенного кода по ссылке. (Не знаю, заработает ли в твоей версии Access ... ну, вот, заодно и проверишь) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 01:12 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Скачал, БОЛЬШОЕ спасибо. Работает. Попробую к себе прикрутить. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 12:09 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
2007 Access не работает. Не находит crossbar в форме: If StrComp(s, "SCROLLBAR", vbTextCompare) = 0 Then Сюда не заходит, т.е. нет в детях скроллбара.... и перебор всех детей формы их там не 3... style& = GetWindowLong&(hwndChild, GWL_STYLE) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 12:37 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Поменял на дитя: NUIScrollbar заработал пример. If StrComp(s, "NUIScrollbar", vbTextCompare) = 0 Then Только вот таймер для проверки положения скролл устанавливать не красиво... Как поймать событие движения скролла? Двигается скролл вправо - двигается поле вправо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 12:52 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent2007 Access не работает. Не находит crossbar в форме: If StrComp(s, "SCROLLBAR", vbTextCompare) = 0 Then Сюда не заходит, т.е. нет в детях скроллбара.... и перебор всех детей формы их там не 3... style& = GetWindowLong&(hwndChild, GWL_STYLE) в комментарии к статье же было - надо заменить на If StrComp(s, "NUIScrollbar", vbTextCompare) = 0 Then пробуй ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 12:53 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentПоменял на дитя: NUIScrollbar заработал пример. If StrComp(s, "NUIScrollbar", vbTextCompare) = 0 Then Только вот таймер для проверки положения скролл устанавливать не красиво... Как поймать событие движения скролла? Двигается скролл вправо - двигается поле вправо. некрасиво, зато просто и надежно... другой путь - субклассирование , ловить сообщение окна формы WM_HSCROLL ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 13:00 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2017, 13:06 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
guest_rusimport, guest_rusimportдругой путь - субклассирование , ловить сообщение окна формы WM_HSCROLL а я как раз недавно подобным и занимался - 20774213 JavaStudent, В общем, взял этот пример за основу, переделал на скорую руку за 1,5 часа. Вроде работает. Если что - можно подправить. Но я бы, наверно, применял бы таймер. Куда более безопасней чем субклассирование. И там и там функции обратного вызова, какая по большому счету разница? Пример во вложении. Три версии: Scroll_2000.mdb, Scroll_32-bit.accdb, Scroll_64-bit.accdb Запустите на выполнение не открывая редактор кода. В ролике поста, на который сослался выше и в самом коде файла объяснил почему придется соблюдать более жесткие правила, субклассируя форму. Нельзя открывать редактор IDE, если в этот момент идет субклассирование. Откроете - завесите Access. Если хотите посмотреть код или редактировать, сначала закройте формы, по которым запущено субклассирование, а только потом открывайте среду IDE. В этом примере я тоже ввел константу, определяющую режим отладки. Здесь она называется Scroll_DebugMode. Если хотите отлаживать и писать свой код, установите ее значение в True. Тогда Access будет работать стабильно, т.к. перехвата событий прокрутки не будет. А чтобы посмотреть как работает ваш код, установите Scroll_DebugMode = False, закройте проект и запустите, помня, что теперь редактор кода открывать нельзя. Захотите открывать - снова закройте все формы, по которым запущено субклассирование и тогда открывайте. Но открыв среду IDE хоть раз, запускать проект на выполнение, если Scroll_DebugMode = False нельзя, - завесите Access. Я обращался и на Stackoverflow и на Social.msdn: https://stackoverflow.com/questions/45854403/i-cant-subclass-ms-access-form-if-the-window-of-ide-has-been-opened?noredirect=1#comment78705743_45854403 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 в надежде, что подскажут, как работать без риска краха, но ответа нет. На Stackoverflow мое внимание обратили на нежелательность использования SetWindowLong, с предпочтением в пользу применения SetWindowSubclass. Мне сложно это комментировать. Я просто решил сделать как советуют: IInspectableSubclassing controls using SetWindowLong has been wrong since the first 64-bit Windows OS (Windows XP 64-Bit Edition, released in 2001). Likewise, subclassing controls using SetWindowLongPtr has been wrong for more than a decade and a half (see Subclassing Controls for the safe and sane alternative). – IInspectable Aug 24 at 19:56 И адресовали меня вот сюда: https://msdn.microsoft.com/en-us/library/windows/desktop/bb773183.aspx?f=255&MSPPError=-2147217396 А тут действительно Microsoft ратует за использование SetWindowSubclass. Хотя, что интересно. Когда в тестах я использовал SetWindowLong, то в этом случае не нужно было ждать пока форма загрузится полностью. Там не нужны были вот эти финты с таймером - 20780320 , в то время как используя SetWindowSubclass субклассировать форму можно только, как я говорил, тогда, когда она полностью загружена, иначе, Access падает. Но я все равно остановился на SetWindowSubclass, почитав, что многие расхваливают эти API функции, мол, это безопасный подход, к тому же примеры с SetWindowLong, которые я видел, все используют Lib "user32", а как это будет работать на 64-bit, да, и вообще, что там дальше с судьбой этой Lib "user32", не понятно. У меня вообще-то есть еще мысли как можно было бы попробовать сделать по-другому. Если найду время - попробую, расскажу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 01:58 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Относительно прокрутки и сабклассинга - думается, 10808021 можно доработать, инфраструктура там есть. Там часть вопросов, с которыми Вакшуль Сергей столкнулся, решена с помощью низкоуровневой фильтрации сообщений (прикол, однако, в том, что для .mde/.accde таких ухищрений не нужно, достаточно простых вариантов типа упомянутого 3367169 ). Ещё несколько комментариев для понимания, какие могут быть проблемы (часть) и как решать: 7280562 п. 4) 8512604 . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 17:48 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
20780341 код в этом примере чего-то конечно ловит, но только процентов 15 возможных ситуаций. И эти 15% требуют доработки. Вакшуль СергейУ меня вообще-то есть еще мысли как можно было бы попробовать сделать по-другому. Если найду время - попробую, расскажу. Я сделал по-другому. Без субклассирования окна формы. Т.е. редактор кода может быть открыт. Перехватываются и обрабатываются: - прокрутка формы при клике по полосе прокрутки - прокрутка формы колесиком мыши - прокрутка формы при использовании middle button(нажатие на колесико и удерживание) - прокрутка формы в результате смены фокуса, как при использовании клавиатуры(tab, стрелки и т.п.), так и мыши. Тот случай, когда прокручивание происходит в результате получения фокуса контролом, который частично или полностью не виден, выходя за границы формы Не обрабатывается: - горизонтальная прокрутка формы, вызываемая наклоном колесика в сторону(tilt) мыши Microsoft События мыши перехватываются с помощью SetWindowsHookEx. Особенность функции в том, что системные сообщения о наклоне колесика мыши в сторону(tilt) эта функция не перехватывает. К сожалению. Во всяком случае сообщения моей мыши Microsoft не перехватываются. Плохо обрабатывается: - прокрутка формы при использовании middle button(нажатие на колесико и удерживание). В принципе работает, но возможна ситуация, когда клики вниз и вверх уже отработали, а форма "разогнавшись" продолжает прокручивание и останавливается когда ей заблагорассудится. Я заложил для борьбы с этим определенное время ожидания, но, как уже сказал, событие может не перехватится. В целом пример рабочий, но как и предлагал guest_rusimport, гораздо проще просто обойтись таймером. Во вложении два файла: accdb32-bit и mdb2000. mdb2000 на XP не работает. Там низкоуровневые сообщения мыши не перехватываются. Но на семерке mdb2000 работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 02:40 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, Я не смотрел еще код, но выглядит красиво. Не разобрался почему h=2 при крайнем левом положении бегунка, но то, что удалось отловить самый левый номер столба и самый верхний номер строки в зависимости от положения ползунка, которые видны прикольно. Выглядит так. Лифт(бегунок) поехал вниз, а лампочка горит на 12 этаже. Лифт(бегунок) остановился лампочка загорелась сразу на 1 этаже... Но пример, мне очень понравился. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2017, 23:50 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, JavaStudentНе разобрался почему h=2 при крайнем левом положении бегункаЭто просто факт. Не знаю есть ли тут логика. У подчиненной формы крайнее значение, считываемое функцией GetScrollPos, действительно не равно нулю, но очень близко. А вот у основной формы крайние значения полос прокрутки таки равны нулю. Остается только констатировать это явление :) JavaStudentто, что удалось отловить самый левый номер столба и самый верхний номер строки в зависимости от положения ползунка, которые видны тут не понял. Вы имеете ввиду, что вы у себя реализовали такой функционал? Вакшуль СергейПлохо обрабатывается: - прокрутка формы при использовании middle button(нажатие на колесико и удерживание). В принципе работает, но возможна ситуация, когда клики вниз и вверх уже отработали, а форма "разогнавшись" продолжает прокручивание и останавливается когда ей заблагорассудится. Я заложил для борьбы с этим определенное время ожидания, но, как уже сказал, событие может не перехватится. Уже потом, когда описывал плюсы и минусы решения, понял как можно устранить описанный выше недостаток. Если очень, очень надо могу доработать код в этом плане. Просто так - не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 00:30 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, VScroll = False HScroll = True fsbSub_ScrollPos v = 5, h = 3 v=5 - это 1 видимая строка h=3 - это 1 видимый столб Ваш пример оценил и понравился. Пока не реализовал у себя. В идеале ловить v = 5, h = 3 при движении бегунка, а не при его отпускании. Позже поковыряюсь в вашем коде. Но себе взял на вооружение. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 22:09 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, вы правы, там действительно оказывается :) есть связь между значениями v/h и номерами видимых строк/столбцов я даже не обратил на это внимание. Вернее, напрочь забыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 02:45 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вывод такой. Поймать событие скролл нельзя. Более того при перемещении мышки вдоль линии прокрутки, событие перемещение не происходит. Ни события click, ничего. Мышка попадает в пустоту. Использовать Hook не хочется. Я как понял он грузится и начинает слушать все события, я не разбирался только в форме или вообще все приложение. Использовать таймер, надо знать координаты ползунка (для определения взял код из примера Сергея Вакшуль) Запускаю в событии таймер так Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Координаты выплевывает в Пикселях, нужно переводить в Твипы Определяет очень точно. Недостаток, то что каждую секунду запускается таймер, который проверяет положение ползунка... Не ожидал такого от Access.... Везде есть работа с ползунком, а в Access Нету... Очень хороший подводный камень Access. Ударился больно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 19:58 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, Увы и ах. Таймер - смерть условному форматированию и вычисляемым полям, начинают работать просто ужасно - ну нет в Аксе многозадачности. Хуки - нормальное обходное решение, особого влияния на производительность не оказывается, так что не гнушайтесь ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 20:28 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentВывод такой. Поймать событие скролл нельзя. Ээмуляция табличной формы ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 20:46 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentИспользовать Hook не хочется. Я как понял он грузится и начинает слушать все события, я не разбирался только в форме или вообще все приложение.Насчет примененной у меня функции SetWindowsHookEx. Используемый тип процедуры фильтра - WH_MOUSE_LL, т.е. мониторятся не все сообщения, а только "low-level mouse input events". Этот же тип определяет и область мониторинга: "Global only", т.е. слушаются клики не только внутри приложения. Также нужно иметь ввиду, что перехватив сообщение, долго тянуть с его обработкой нельзя. MSDN на этот счет говорит следующее: авторThe hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key: HKEY_CURRENT_USER\Control Panel\Desktop The value is in milliseconds. If the hook procedure times out, the system passes the message to the next hook. However, on Windows 7 and later, the hook is silently removed without being called. There is no way for the application to know whether the hook is removed. Я собственно ни к чему не призываю. Решайте сами. В реальном бою свой код не проверял, а комментарии MrShin насчет использования таймера вы видели. По поводу области действия, "Global only". Да, хотелось бы, что бы фильтр был наложен внутри потока, но, увы. Я немного поэксперементировал с другими типами фильтра: WH_MOUSE, WH_MSGFILTER и, по-моему, WH_CALLWNDPROC, область действия которых "Thread or global", но ничего там толком не добился, использовать их в решении у меня не получилось. А вот с WH_MOUSE_LL все как по маслу. Ну да, он глобальный, но посмотрите код, там в два коротких шага(WindowFromPoint и GetAncestor) проверяется пришелся ли клик на окно Access или на другое приложение. Если в другое, сразу выход. Работая не в Access, а снаружи, влияния эти двух шагов на действия мыши, я не заметил. Вообще было ощущение, что приоритет Access ушедшего в фон резко понижен, установленный фильтр никак себя не проявлял. Хотя работая внутри Access я заметил некоторое подтормаживание при попытке выделения текста мышкой(в самом начале этого движения). В принципе, в момент переключения в другое приложение, фильтр можно снять, а при возвращении - восстановить. Например, поставив еще один хук :), отслеживающий переключения между приложениями/окнами. Я даже сделал набросок, но потом, взвесив, решил, что преимущества ничтожны и вообще спорны (вы действительно не заметите работая извне, что Access, находящийся в фоне, фильтрует сообщения мыши). Но вот о чем, действительно, мне кажется, нужно позаботится, так это о том, чтобы handle установленного фильтра, сохраненный в переменной, не был потерян, если в результате неперехваченной ошибки выполнения глобальные переменные "слетят". Если его сохранять в Tempvars, то проблем не будет. Я проверял. Tempvars работает железобетонно. В коде не использовал Tempvars только потому, что думал о совместимости с предыдущими версиями Access. А зря. На XP в 2000-ом применить SetWindowsHookEx все равно не получилось. Если опасаетесь, что ваша программа зависнет, процесс придется снять, а установленный фильтр по-прежнему будет мучить систему, то опасения напрасны. Фильтр будет снят системой. У меня в коде фильтр на сообщения устанавливается и удерживается ровно столько, сколько открыта форма, чья прокрутка отслеживается. Вы можете сделать еще жестче и снимать фильтр, если форма деактивируется(хотя если форма всплывающая, то отследить это проблемно), и устанавливать при ее активации. Остальные комментарии по теме я оставил тут: 20797575 20897125 20899090 20899392 . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2017, 02:48 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent... Двигается скролл вправо - двигается поле вправо. Никак не соображу цель этого перемещение. Скриншотом формы не поделитесь? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2017, 11:46 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Подчиненная ленточная форма. 31 квадратик (2 см на 2 см) в строке. 44 строки. 1 колонка, например, наименование стран. Двигаю бегунок. Наименование стран пропадает. Определяю положение бегунка - двигаю первый столбик. Но таймер очень плохое решение... Другого, пока нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 19:09 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, если, как вы пИшите, плохо работает только в подчинённой форме - то, может, переделать её на главную?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 19:40 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Что касается наименований государств в международных и внутренних документах, по у каждой страны есть "нормативный алиас" (даже вроде два). Не помню, как это наз в документе, на практике стречались: Russia - RU, RUS... ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 19:45 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentПодчиненная ленточная форма. 31 квадратик (2 см на 2 см) в строке. 44 строки. 1 колонка, например, наименование стран. Двигаю бегунок. Наименование стран пропадает. Определяю положение бегунка - двигаю первый столбик. Но таймер очень плохое решение... Другого, пока нет... Мелкнула идея, но пример было лень делать, решил поискать по форумам (может такое уже было ?) ... Нашел на соседнем форуме по Access решение уважаемого mobile (правда, чтобы скачать его, надо там зарегистрироваться, но это уж вам решать). Посмотрите, возможно вам это поможет как-то в решении вашей задачи. http://www.cyberforum.ru/ms-access/thread1347510.html#post7075934 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 19:55 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
guest_rusimport, там тоже таймер ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 20:25 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
А почему бы не сделать свой "бегунок"? Точнее, взять готовый scrollbar из Microsoft Forms 2.0, и описать экшн его событий? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 21:38 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
PredeclaredА почему бы не сделать свой "бегунок"? Точнее, взять готовый scrollbar из Microsoft Forms 2.0, и описать экшн его событий? Уже пару раз, после очередных обновлений винды, получал сообщение "Приложение ... не поддерживает этот элемент ActiveX". Проблема освещалась на форуме. Не критично, в конце концов лечится, но неудобство остается. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 21:56 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclared, бОльшие сложности составят синхронизация в обратном направлении, т.е. изменилось положение формы вследствие какого-то события(смена фокуса, верт.прокрутка мыши, гориз.прокрутка мыши, прокрутка через middle button, ввод в поле, которое частично невидно, смена источника данных), это нужно зафиксировать, обработать и новые значения передать на полосы прокрутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:03 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль Сергейверт.прокрутка мыши, гориз.прокрутка мыши, прокрутка через middle button я имею ввиду не клики, левой кнопкой, а работу колесика и средней кнопки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:11 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль Сергейguest_rusimport, там тоже таймер К сожалению - да, если бы не необходимость синхронизации вертикальных полос прокрутки двух подчиненных форм... у ТС 44 строки - на один экран, боюсь, не поместится... Может сделать кнопки листания экранами, отказавшись от вертикальных полос прокрутки этих двух подчиненных форм? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:11 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Что-то вы все усложняете. Проблема задачи ТС в том, что в ленточной форме нет "закрепления столбцов", как в табличной. Он идет по пути перемещения нужного для видимости поля вслед за скролом. Я предлагаю другой путь: Не трогать нужные для видимости поля, а елозить остальными 30 полями, пользуя не штатный скрол, а свой "бегунок" (можно даже полностью самому "слепить"). Типа такого (очень сыренько, только показать идею): ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:35 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclared, симпатично :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:44 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclared, ну, вот, опять... скачал пример ... получаю сообщение "Отсутствует объект в данном элементе управления" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:46 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
guest_rusimport, Небось какой новомодный Access? У мну в 2003 и 2007 все гуд. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:01 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclaredguest_rusimport, Небось какой новомодный Access? У мну в 2003 и 2007 все гуд. Да всё как обычно, я с 2003 -го и не слезал (забыл ты, наверное) ... Win7 64бит, Акс 2003 32 бит ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:28 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Была мысль рисовать свой ползунок. Зная ширину подчиненной формы, зная ширину квадратиков... И выводить квадратики по мере движения своего ползунка. Но я испугался реализации. Учитывая таймер и Hook, возможно это меньшее зло. Есть большие сомнения, что большое кол-во элементов будут двигаться приемлемо для глаз. Еще плюс этого решения, что можно брать не месяц (31 день), а год или три. А на самом бегунке менять надпись при движении январь 2017, февраль 2017, март 2019. При остановке расчет и вывод видимых квадратиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:29 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
>>Win7 64бит "Вот оно как, МихалычЪ" (c) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:33 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent... Есть большие сомнения, что большое кол-во элементов будут двигаться приемлемо для глаз. ... На самом деле, ничего двигать и не нужно. Если в видимой области формы помещается, например, 16 полей, то их и должно быть ровно 16. Менять надо только значения ControlSource Property этих 16 полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:41 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Ну и заголовки столбцов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:42 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclared>>Win7 64бит "Вот оно как, МихалычЪ" (c) :) Да хрен с ним... Всё это в итоге чинится... Идея твоя и так, без примера, понятна... Я то имел ввиду закрепить нужный столбец в одной подчиненной форме , а в другой подчиненной форме, расположенной притык к первой, выводить остальные столбцы, а вертикально листать эти формы с помощью сделанных кнопок поэкранно, убрав из форм вертикальные линейки прокрутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:45 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
guest_rusimport, Помню, была битва за синхронизацию. Это не мой паттерн, потому даже не вникал в сложности. Я сложности стараюсь обходить стороной. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 00:04 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Predeclaredguest_rusimport, ... Я сложности стараюсь обходить стороной. :) Аналогично :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 03:12 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudentВопрос как инициировать событие Scroll?есть еще одно направление, если есть желание. См.вложение. Это не готовое решение. Просто демонстрация, как можно поймать событие скрола без хуков. Покликайте, покрутите подформу справа(слева не трогайте). Результат прокрутки(просто смена чисел) будет выведен в поля заголовков подформ. А вот как же синхронизировать две формы, оставляю вам. Главное, что событие можно сказать, организовано. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 03:40 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Красным выделил куда нужно смотреть. Цифра изменилась - прокрутка, можно сказать зафиксирована. В основе - замаскированное вычисляемое поле в форме f1_1. Поле растянуто по всей длине формы на заднем плане. Любой чих вызывает его перевычисление. Собственно, вот оно и событие. Но тут нужно еще копать и копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 03:49 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
JavaStudent, да что же ты примеры то не смотришь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 03:59 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Панург, поздно, наверно :) Сколько раз вис Access, пока шла работа? :) Панург, а что скажете насчет переключения Tab-ом. Во вложении ваш файл. Я только добавил несколько контролов и вертикальную полосу прокрутки, чтобы можно было оценить, где находится целевой контрол. Прокрутка окна, вызванная сменой активного контрола обрабатывается или нет? В код не смотрел, только на результат. Если клацать Tab, то целевой контролл смещается по горизонтали как хочет. Эти сдвиги код ловит? а accLocation это что? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 05:23 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль СергейСколько раз вис Access, пока шла работа? :)Практически нисколько... Я вкурсе, поэтому не делаю резких движений. Технология отработана и применяется для создания разных элементов управления "на лету" (treeview, listview и прочего). Вакшуль Сергейчто скажете насчет переключения Tab-ом.Сделал два варианта - ловим через события формы или каждого скрола (см. примеры). Вакшуль Сергейа accLocation это что?недокументированный метод accLocation - позволяет узнать в пикселях расстояние от края экрана сверху и слева, высоту и ширину контрола, в данном случае текстбокса. Получаю ширину текстбокса в пикселях и в твипах. Таким образом я узнаю сколько твипов на пиксель без API. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 11:15 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, Панургнедокументированный методсуществует множество недокументированных методов. Некоторые использую. Можно получать интересные результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 11:22 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
ПанургСделал два варианта - ловим через события формы или каждого скрола (см. примеры) что-то и Scroll_FORM.mdb и Scroll_FORM.mdb у меня не работают. Т.е. ни каких ошибок, но ни какой видимой реакции ни на клики по прокрутке, ни на смену фокуса Tab-ом. Access 2016 32bit. Но первый ваш пример 20947830 , при этом работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 11:41 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль СергейТ.е. ни каких ошибокНазвание класса сменили начиная с 2007 акцесс. Дополнил. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:01 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Панург, Поведение в файлах разное. В Scroll_FORM_.mdb реакция на Tab мне непонятна. А вот Scroll_SCROLL_.mdb - супер! Красиво. Мне очень понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:46 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Понравилась организация ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:48 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
Вакшуль СергейВ Scroll_FORM_.mdb реакция на Tab мне непонятна.сменили и событие. Я не тщательно тестировал на версии старше 2003, некогда... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 16:24 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
1) accLocation (и другие методы) достаточно документирован, поскольку это часть интерфейса IAccessible: IAccessible::accLocation . И, кстати, можете не сомневаться в его дальнейшей поддержке: MS, настоящая корпорация зла, ведёт последовательную поддержку UI для людей с ограниченными возможностями со времён MS DOS, если не раньше. 2) ТС достаточно ленив для того, чтобы до сих пор никакого минимального примера не приложить. В итоге ощущение, что каждый немного про своё ТЗ и реализацию. 3) (флегматично) Кто-то всё-таки Spy++ открыл, до WM_CTLCOLORSCROLLBAR дошли. До WM_CAPTURECHANGED доберёмся когда-нибудь (забив по дороге на хуки(?))? 4) (флегматично до безжизненности) До SEH/VEH чтобы ОНО при всё-таки совершаемых даже "старухами" резких движениях не падало - не, никогда не доберёмся. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 02:21 |
|
Как в форме поймать событие Scroll?
|
|||
---|---|---|---|
#18+
13-й кварталaccLocation (и другие методы) достаточно документированСогласен, так и смотрел. В рамках Help'а к VBA не документированы. 13-й кварталКто-то всё-таки Spy++ открылда, было такое. Будет время (а главное потребность) - доберёмся. Спасибо. Думаю пока хватит слушать события полос прокрутки. 13-й кварталДо SEH/VEH чтобы ОНО при всё-таки совершаемых даже "старухами" резких движениях не падало - не, никогда не доберёмсяНаверное никогда пока не возникало острой необходимости. А возможно и не возникнет. Да, мир несовершенен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 04:10 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1611913]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 176ms |
0 / 0 |