Мерцание прикрепления изображения MS Access - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть форма (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 могли бы помочь, но, насколько я вижу, таких вещей нет.

Если существует какой-либо из существующих кодов, который, по вашему мнению, может быть полезен, я могу приложить подробности.У меня еще остались волосы.Я извиняюсь за все глупости, которые я сделал, но обработка событий никогда не была моей силой - пожалуйста, дайте мне процедуры.

...