Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66

Мерцают картинки в форме!

29.12.2017, 01:10. Показов 2446. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Вводная:

В форму добавил несколько картинок (.bmp), перекрыл одни картинки другими (разные цвета). Цель - при наведении курсора на картинку 1 она меняется на картинку 2 (т.е. как бы меняет свой цвет), при потере фокуса всё возвращается обратно.

Суть проблемы:

Все эти картинки мерцают (при чем не всегда!), если курсор перемещается в свободной зоне от этих картинок (т.е. без наведения курсором на них).

Вопрос:

Из за чего это происходит и как решить?

P.S. Форма в "скрепке", всем откликнувшимся заранее большое спасибо!
Вложения
Тип файла: rar ТЕСТ.rar (241.5 Кб, 10 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2017, 01:10
Ответы с готовыми решениями:

Картинки в форме
Подскажите, есть необходимость вывести в форму типа «несколько элементов» маленькие превью картинок (картинки хранятся вне базы, в базе...

Рандомное отображение картинки на форме
Доброго времени суток! Такая проблема, есть форма Login для идентификации пользователя в приложении для работы с базой. На форме есть...

Отображение картинки в форме Access 2010
Добрый день. Не удаётся отобразить картинку из подчинённой формы в основной форме. Картинка хранится в бд как вложение. На одном из форумов...

27
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
29.12.2017, 08:26
Не надо многократно выполнять один и тот же код при движении мышки. В модель формы введены 2 boolean переменные уровня модуля v0 и v3 для прямоугольников 0 и 3. Если соответствующая переменная равна False, то код выполняется, если True то выходим из процедуры. Когда заходим в прямоугольник, то устанавливаем переменную в True, когда мышка попадает на другой объект, то False и при следующем проходе по прямоугольнику код выполнится.
Вложения
Тип файла: rar ТЕСТ.rar (129.1 Кб, 8 просмотров)
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
29.12.2017, 09:17
Цитата Сообщение от Kirill_S Посмотреть сообщение
В форму добавил несколько картинок (.bmp), перекрыл одни картинки другими (разные цвета).
Важнейшая часть построения БД.
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66
29.12.2017, 20:19  [ТС]
Mobile, спасибо за совет! При перемещении курсора в свободном месте работает, но при перемещении с картинки на картинку продолжается мерцание остальных.

alvk, БД давно есть и работает, требуется немного дизайн посовременней сделать.
0
Эксперт MS Access
 Аватар для Eugene-LS
13176 / 5875 / 1505
Регистрация: 05.10.2016
Сообщений: 16,497
29.12.2017, 21:14
Цитата Сообщение от Kirill_S Посмотреть сообщение
Все эти картинки мерцают (при чем не всегда!), если курсор перемещается в свободной зоне от этих картинок (т.е. без наведения курсором на них).
Msa 2010 x86
Ничего не мерцает и всё работает штатно и красиво.
Машина:
Мать: ASUS H97-PLUS
Процессор Intel Core i3-4340, Haswell, 3.60 GHz, 4M, socket 1150
Модули памяти DIMM DDR3 4G 1333MHz PC3-10600 Kingston = 2 шт.

...
И всё красиво!
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66
29.12.2017, 23:39  [ТС]
Странно! Мерцание происходит только в светлом прямоугольнике и только после загрузки формы (при быстром передвижении курсора между картинками), спустя небольшое время мерцание проходит. Вот незадача

Добавлено через 2 часа 19 минут
Вот что заметил. Если после загрузки формы не перемещать курсор в форму в течение двух-трех секунд, то мерцания потом нет, а если переместить его сразу возникает данный неприятный эффект с картинками. Как бы реализовать эту задержку незаметно для пользователя???
0
Эксперт MS Access
 Аватар для Eugene-LS
13176 / 5875 / 1505
Регистрация: 05.10.2016
Сообщений: 16,497
30.12.2017, 00:20
Цитата Сообщение от Kirill_S Посмотреть сообщение
Мерцание происходит только в светлом прямоугольнике и только после загрузки формы
А я бы попробовал поставить картинки на кнопки и играть с Enabled и Disabled кнопок ....
При этом происходит примерно подобный эффект и всё проще.

Если не получиться - копирование картинок с обьекта ImageLIST
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.12.2017, 00:26
Лучший ответ Сообщение было отмечено Kirill_S как решение

Решение

Цитата Сообщение от Kirill_S Посмотреть сообщение
Если после загрузки формы не перемещать курсор в форму в течение двух-трех секунд, то мерцания потом нет, а если переместить его сразу возникает данный неприятный эффект с картинками. Как бы реализовать эту задержку незаметно для пользователя???
Вставил перекрывающий лейбл с надписью "Загрузка". По таймеру задержка секунда после чего лейблу Visible=False. Артефактов не видно.
Вложения
Тип файла: rar ТЕСТ.rar (129.5 Кб, 10 просмотров)
1
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66
30.12.2017, 02:04  [ТС]
Mobile, здорово! То что нужно, спасибо в очередной раз!!!!
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
04.01.2018, 13:42
Лучший ответ Сообщение было отмечено Kirill_S как решение

Решение

Цитата Сообщение от Kirill_S Посмотреть сообщение
Вот что заметил. Если после загрузки формы не перемещать курсор в форму в течение двух-трех секунд, то мерцания потом нет, а если переместить его сразу возникает данный неприятный эффект с картинками. Как бы реализовать эту задержку незаметно для пользователя???
Цитата Сообщение от mobile Посмотреть сообщение
Вставил перекрывающий лейбл с надписью "Загрузка". По таймеру задержка секунда после чего лейблу Visible=False. Артефактов не видно.
Могу предложить вариант без таймера.
Мерцаний никаких гарантированно, на любой машине.
Форма КопияГлавная.
Вложения
Тип файла: zip ТЕСТ_1.zip (254.8 Кб, 16 просмотров)
2
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66
04.01.2018, 23:21  [ТС]
Capi, спасибо, все отлично работает, здорово!

1) Можете объяснить как это работает, а то я не понял, честно говоря, почти ничего в коде.

2) Можно ли добиться "мягкости" отрисовки светло-серого рисунка (ощущение, что темно-серый рисунок не перекрывают светло-серый до конца, смотрится слишком "контрастным")?
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
04.01.2018, 23:30
Kirill_S,

1) Конечно, объясню.
2) Посмотрю, что там.

Тогда уже все сразу напишу.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
05.01.2018, 01:10
Kirill_S,

Вот вариант с "мягкой" прорисовкой.
Посмотрите, пожалуйста.

Пояснения завтра, сейчас уже не буду наспех делать.
Вложения
Тип файла: zip ТЕСТ_2.zip (255.2 Кб, 16 просмотров)
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
06.01.2018, 02:56
Цитата Сообщение от Kirill_S Посмотреть сообщение
Можете объяснить как это работает, а то я не понял, честно говоря, почти ничего в коде.
Объяснения.

I этап. Техническая подготовка в режиме конструктора
Систематизируем нумерацию.
Совокупность участвующих в процессе картинок и надписей представим как совокупность восьми групп,
в каждой из которых содержится три элемента – картинка черная, картинка серая, надпись.
Перенумеруем элементы следующим образом:
- пусть N – номер группы по порядку (сверху вниз, слева направо);
- надпись - НадписьN;
- картинка черная – РисунокN*2-1;
- картинка серая – РисунокN*2.
Примеры:
первая группа элементов – Надпись1, Рисунок1 (картинка черная), Рисунок2 (картинка серая)
…………………..
последняя группа элементов – Надпись8, Рисунок15 (картинка черная), Рисунок16 (картинка серая)

Всем рисункам с нечетными номерами (черным картинкам) зададим свойство "Вывод на экран" Нет (Visible False).

II этап. Первичное определение действий при движении мыши для надписей,
серых картинок и белого прямоугольника

Выполняем это в процедуре обработки события Открытие формы.
Можно было бы сразу задать в конструкторе, но в VBA, на мой взгляд, в данном случае проще.

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Form_Open(Cancel As Integer)
 Dim i As Byte
 For i = 1 To 8
  Me("Надпись" & i).OnMouseMove = "=FuncPicView(" & i & ")"
  Me("Рисунок" & i * 2).OnMouseMove = "=FuncPicView(" & i & ")"
 Next
 Прямоугольник0.OnMouseMove = "=FuncPicView(0)"
End Sub
То есть, движение мыши по надписям и серым картинкам будет вызывать пользовательскую функцию FuncPicView,
передавая ей в качестве аргумента номер группы, в которую входит элемент.
Примеры:
Надпись1, Рисунок2 (картинка серая) - "=FuncPicView(1)"
……………….
Надпись8, Рисунок16 (картинка серая) - "=FuncPicView(8)"

Движение же мыши по белому прямоугольнику будет вызывать пользовательскую функцию FuncPicView,
передавая ей в качестве аргумента 0.
Прямоугольник0 - "=FuncPicView(0)"

III этап. Работа функции FuncPicView
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function FuncPicView(ind As Byte)
 If ind <> 0 Then
  Me("Рисунок" & ind * 2).Visible = False
  Me("Рисунок" & ind * 2 - 1).Visible = True
  Me("Надпись" & ind).ForeColor = RGB(51, 49, 52)
  Me("Надпись" & ind).OnMouseMove = ""
 Else
  Прямоугольник0.OnMouseMove = ""
 End If
 If indPrev <> 0 Then
  Me("Рисунок" & indPrev * 2).Visible = True
  Me("Рисунок" & indPrev * 2 - 1).Visible = False
  Me("Надпись" & indPrev).ForeColor = RGB(191, 189, 176)
  Me("Надпись" & indPrev).OnMouseMove = "=FuncPicView(" & indPrev & ")"
Else
  Прямоугольник0.OnMouseMove = "=FuncPicView(0)"
 End If
 indPrev = ind
End Function
1. Сначала выясняем, откуда пришли в функцию – из к.-л. группы или из белого прямоугольника.
а) Если ind <> 0, значит, пришли из группы, следовательно, нужно "проявить" эту группу (делаем видимой черную картинку,
невидимой серую картинку и делаем яркой надпись);
затем отключаем обработку движения мыши по надписи (OnMouseMove = ""), для серой картинки этого делать не надо,
так как она уже и так спрятана и на мышь реагировать не может.
б) Если ind = 0, значит, пришли из белого прямоугольника и единственное, что нужно сделать –
отключить дальнейшую обработку движения мыши по нему (Прямоугольник0.OnMouseMove = "")
2. Потом выясняем, что обрабатывалось при предыдущем вызове функции - к.-л. группа или белый прямоугольник.
Для этого проверяем переменную уровня модуля формы indPrev.
а) Если indPrev <> 0, значит, нужно "затемнить" эту предыдущую группу (делаем невидимой черную картинку,
видимой серую картинку и делаем серой надпись);
затем восстанавливаем обработку движения мыши по надписи (OnMouseMove = "=FuncPicView(" & indPrev & ")"),
б) Если indPrev = 0, значит, предыдущим был белый прямоугольник и
нужно восстановить обработку движения мыши по нему (Прямоугольник0.OnMouseMove = "=FuncPicView(0)")
3.Запоминаем в indPrev, что обрабатывалось - к.-л. группа или белый прямоугольник.
indPrev = ind

Вот и все.

Расписывать действия для "крестика" закрытия формы не буду.
Там все должно быть понятно после приведенных объяснений.
Только поясню, что запись вида Прямоугольник3.OnMouseMove = "[Event Procedure]" означает то же самое,
что в конструкторе [Процедура обработки событий] на вкладке "События" окна свойств.
3
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 66
06.01.2018, 11:29  [ТС]
Capi, спасибо огромное за труды! Буду изучать, ибо Ваш вариант идеальней идеального!
0
1323 / 541 / 112
Регистрация: 29.03.2016
Сообщений: 1,307
06.01.2018, 17:11
Capi,
а в mdb никак?
Посмотреть хочется, а нечем.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.01.2018, 17:58
Я не Capi, но перевести в mdb могу.
Вложения
Тип файла: rar ТЕСТ_1.rar (222.9 Кб, 9 просмотров)
2
1323 / 541 / 112
Регистрация: 29.03.2016
Сообщений: 1,307
06.01.2018, 18:16
Шорт, все картинки потерялись.
Но все равно, спасибо.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
06.01.2018, 18:34
Цитата Сообщение от mobile Посмотреть сообщение
Я не Capi, но перевести в mdb могу.
Спасибо.)))
Но последний вариант был ТЕСТ_2 в #13.
Разница некоторая есть.
Сейчас сделаю для последнего.
Цитата Сообщение от Jamaica Посмотреть сообщение
все картинки потерялись
Да, у меня тоже так было.
Я уже пробовала раньше переводить в mdb, открывала в 2000-м - картинок не было.

Может, кто-то знает причину такого исчезновения картинок?
Пробовала копировать и вставлять в Word 2007, тоже безрезультатно.
Как-то они иначе внедрены.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
06.01.2018, 18:51
Вот последний вариант, в формате 2003.
В 2007-м картинки видны.
В 2003-м, наверное, нет.
Вложения
Тип файла: zip ТЕСТ_2_2003.zip (249.1 Кб, 8 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2018, 18:51
Помогаю со студенческими работами здесь

Смена картинки на форме в виде фона
Добрый день, подскажите как сменить фото на форме, которое выбрано в качестве фона в vba Добавлено через 4 минуты Например есть...

Можно ли хранить картинки вне базы и выводить их потом в ЛЕНТОЧНОЙ форме?
Т.е. хотелось бы чтобы в БД хранились только пути к файлам, а потом была возможность выводить картинки в _ленточной_ форме. Я посмотрел...

картинки в форме
мне нужно на фон форме поставить картинку, подскажите пожайлуста как это сделать.

Названия кнопок меню постоянно мерцают
Здравствуйте, пишу меню с использованием мышки, на Турбо Си, проблема в том что названия кнопок меню постоянно мерцают, а сами кнопки не...

Мерцают цвета при просмотре видео
Мерцают цвета при просмотре видео как с компа так и с Ютуба. Пример: https://yadi.sk/i/mWnpWpkvjom5j ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru