|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.05.2009, 19:31 | #1 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
"Вечная проблема" - мерцание...
Человечество будет жить еще 10 000 лет...
Солнце будет жить около 2 млн лет... Мерцание в Дельфи будет жить вечно... Тема создавалась и обсуждалась много раз, но когда ничего не помогает все средства хороши. Значит так: Есть форма с кнопкой произвольной формы. Есть массив данных: 00000000000000000000000000000000000 000000000 00000000000000000000000000000000000 000000000 00000000000000000000000000000000000 000000000 00000000000000001100000000000000000 000000000 00000000000000001110000000000000000 000000000 00000000000000001111001000000000000 000000000 00000000000011111111111110000000000 000000000 384 строк 00000000000000011111110000000000000 000000000 00000000000000000111100000000000000 000000000 00000000000000000000000000000000000 000000000 00000000000000000000000000000000000 000000000 00000000000000000000000000000000000 000000000 512 столбцов (Массив "грузится" из текстового файла) Теперь во время выполнения на ONMOUSEMOVE такая проверка: If Mas[Round(X/2),Round(Y/2)] = 1 Then {Рисуем новое изображение кнопки (картинка "при наведении")} Так вот проблема в следующем: При прорисовке кнопки проблем нет, но если дергать мышь туда-сюда (на границе кнопки), то изображение "подмигивает" пользователю. От этого мерцания не спасло ни CopyRect из буфера, ни Form1.DoubleBuffering:=TRUE, Ни рисование без стирания... Может есть еще способы?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
28.05.2009, 20:23 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Посмотрите вот эту темку, я там привел пример без мерцаний:
http://programmersforum.ru/showthread.php?t=43567 |
29.05.2009, 10:31 | #3 |
Форумчанин
Регистрация: 22.02.2009
Сообщений: 875
|
Попробуйте так:
Один раз создав кнопку, присвойте булевской переменной в секции private true И там же проверяйте на это значение, кнопка будет создана один раз и не будет создаваться после, т.к. идет проверка на true переменной. Следовательно бесконечной прорисовки кнопки не будет при наведении на то же место мыши.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
|
29.05.2009, 15:00 | #4 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Бесконечной прорисовки и так нет - я установил значение ISBFlag (I See Button Flag) булевского типа.
mihali4 Что-то я не нашел там фрагмент кода, где происходит рисование... Может плохо смотрел?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body | tabikA | HTML и CSS | 5 | 24.02.2009 21:50 |
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах | mihali4 | Свободное общение | 1 | 17.01.2009 01:43 |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |