У меня есть форма (MS Access), которая управляет вложениями изображений, и несколько отчетов, которые отображают эти вложения на основе различных критериев выбора. Все файлы изображений (.jpg) сохраняются до максимального размера 1,4 МБ. Форма показывает только одно изображение за раз, и когда я перехожу к каждой записи, новое изображение мигает - обычно отображается, очищается, а затем отображается снова. Иногда изображение отображается только один раз, но, кажется, нет никакой корреляции между этим поведением и размером изображения - меньшие вложения обычно испытывают тот же эффект, а большие вложения иногда отображаются один раз без мерцания. Кажется, существует некоторая фазовая проблема между отображением формы и отображением изображения, но я только догадываюсь.
В отчетах нет мерцания на начальном экране, и пока я не использую полосу прокрутки вверх / вниз или перетаскиваю ползунок, любое обновление приемлемо (конечно, не гладко, но я могу с этим смириться) , Если щелкнуть область полосы прокрутки по обе стороны от ползунка, обновление будет приемлемым (не скользким). С помощью ползунка или стрелок все становится неприемлемо сильным.
Я несколько раз искал в Интернете «MS ACCESS», «Вложение», «Изображение», «Мерцание», но все, что я могу найти, - это статьи о мерцающих формах, что не является проблемой в этом приложении, работающем в 64-разрядной версии Windows 10, много памяти , 2Gb графика. Я не могу найти ничего, имеющего отношение к мерцанию прикрепления изображения.
Моя главная задача - улучшить удобство использования формы; для отчетов достаточно осторожного совета не перетаскивать ползунок и не использовать стрелки полосы прокрутки.
В контексте моего текущего приложения это не является большой проблемой, поскольку вложения в изображения не являются критически важным требованием. Тем не менее, я хотел бы знать, как можно остановить мерцание в будущем, где это важнее.
Редактировать, следуя дальнейшему расследованию, предложенному ниже.
Я поиграл, добавив .visible = false и .visible = true в различные обработчики событий, но с небольшими изменениями, за исключением того, что мерцание усилилось хотя бы с одной комбинацией. Я не уверен, какой код я могу предоставить, чтобы помочь вам предложить что-либо, но может пригодиться следующее:
Источник записи формы - это отдельная таблица, которая содержит одно поле «ссылка на изображение» вложения типа данных, а также два текстовых поля: «описание» (краткий текст) и «комментарии» (длинный текст). Кроме того, форма имеет три поля со списком. У двух из них есть источник строки простого SQL для каждой родительской таблицы, tblSite и tblSpecies, с внешним ключом, скрытым в обоих случаях, только tbleSite.sitename и tblSpecies.commonname, видимые в полях со списком. В третьем поле со списком имеется простой источник строк SQL для одной таблицы (tblColour), который является потомком tblSpecies, ограниченный предложением WHERE, чтобы предлагать только те типы цветов, которые применимы к текущему виду. Кроме кнопки Удалить, вот и все.
Я поместил несколько трассировок MsgBox в несколько обработчиков событий, чтобы посмотреть, что происходит. Я использовал MsgBox, а не отладчик, так как хотел видеть события и поведение на экране одновременно (Access noob). Вот что произошло, когда нет .Visible = False / True активен код:
При запуске формы с нуля:
Изображение не видно
Form_Open
Form_Load
attImage_AttachmentCurrent
Form_Current
Изображение появляется без мерцания
Detail_Paint (дважды)
При последующем переходе к следующей записи с помощью кнопок навигации:
Detail_Paint
Первое изображение заготовки
Detail_Paint
Первое изображение появляется снова
Detail_Paint
Первое изображение заготовки
Detail_Paint
Появляется следующее (второе) изображение
Detail_Paint (три раза)
Второе изображение заготовки
Detail_Paint
Второе изображение появляется снова
attImage_AttachmentCurrent
Form_Current
Detail_Paint
Второе изображение пустое
Detail_Paint
Второеизображение появляется снова
Detail_Paint
Второе изображение пропускается
Detail_Paint
Второе изображение появляется снова
Последовательность выше происходит каждый раз, когда я перехожу из одногозапись в другой.Без сомнения, будут другие события;Я проследил только то, что мне показалось наиболее актуальным.
Далее, оставаясь на какой-то одной записи, но меняя фокус между различными текстовыми и комбинированными полями с помощью щелчков мыши, это происходит:
Detail_Paint
Изображение пустое
Detail_Paint
Изображение снова появляется
В форме также есть кнопка Удалить, которая иногда (я еще не пробовалотслеживать это) заставляет изображение мерцать, когда мышь проходит над ним - я подозреваю, много событий Detail_Paint.Это не всегда происходит - я мог бы сделать еще несколько трассировок, если это необходимо, но я чувствую, что упускаю какой-то очень простой, очевидный момент (Access noob, как уже было сказано).
Единственный другой код события, который у меня есть, это:
После обновления на сайте и видах, чтобы гарантировать, что только один или другой не является нулевым, и включить / отключить другие комбинированные блоки соответственно (изображение может быть насекомым или сайтом, а не обоими,цвет может быть назначен только для уже выбранного вида).После обновления вида также сбрасывается источник строки со списком «Цвет», чтобы ограничить цвета теми, которые относятся к новому виду.
Мне кажется, что установка .visible = False при выходе из записи, затем .visible =Правда, как только новая запись установится, может сработать.Однако я не вижу подходящего события Detail, которое могло бы сделать это.On_Next_Record_Click и On_Current_Record_Finshed_Doing_Stuff могли бы помочь, но, насколько я вижу, таких вещей нет.
Если существует какой-либо из существующих кодов, который, по вашему мнению, может быть полезен, я могу приложить подробности.У меня еще остались волосы.Я извиняюсь за все глупости, которые я сделал, но обработка событий никогда не была моей силой - пожалуйста, дайте мне процедуры.