Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223

Избавиться от мигания при рисовании

03.12.2010, 11:08. Показов 4611. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте...делаю...ну вобщем не важно что делаю.
Смысл в том что на весь экран растягивается чёрная форма и на ней компонент PaintBox (тоже на весь экран, название pb).
На него рисуется...очень много что рисуется..и ещё спиралька (на весь экран)...но при рисовании чего угодно, всё это противно маргает, мигает и всё остальное...как избаиваться от миргания и рисовать плавно?
(Borland C++ Builder 6).

рисую спиральку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int spiral_angle=0,spiral_col=0;
bool spiral_recol=false;
void __fastcall TForm1::spiralTimer(TObject *Sender)
{
pb->Canvas->Brush->Color=clBlack;
pb->Canvas->Rectangle(0,0,Width,Height);
int i;
double ro,k=7,fi,step=0.1;
int W,H,x,y;
W=Form1->ClientWidth/2;
H=Form1->ClientHeight/2;
if (spiral_recol==true)spiral_col++;
if (spiral_recol==false)spiral_col--;
if (spiral_col>=254)spiral_recol=false;
if (spiral_col<=1)spiral_recol=true;
x=k*fi*W;
y=H;
pb->Canvas->Pen->Color=TColor(RGB(spiral_col,-spiral_col,spiral_col));
pb->Canvas->Pen->Width=5;
pb->Canvas->MoveTo(Width/2,Height/2);
spiral_angle++;
for(i=0;i<1500;i++)
        {
        fi=i*step;
        x=k*fi*cos(fi+spiral_angle)+W;
        y=k*fi*sin(fi+spiral_angle)+H;
        pb->Canvas->LineTo(x,y);
        }
pb->Canvas->Pen->Color=clBlack;pb->Canvas->Brush->Color=clBlack; pb->Canvas->Pen->Width=1;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2010, 11:08
Ответы с готовыми решениями:

Рисование на виртуальной канве или как избежать мигания при рисовании
Суть проблемы в следующем: На канве рисуется очень большой и сложный чертеж, потому все изображение моргает, что крайне нежелательно....

Как избавиться от мигания PictureBox при развертывании окна?
Привет всем. У меня есть одна проблемка, довольно не решается, суть в том что на PictureBox находится скрин, и при сворачивании окна...

Как избавиться от "мигания" при отрисовки графики
Здравствуйте! Хочу написать приложение на Visual C++, с использованием MFC. В приложении планируется вывод графической информации. В...

22
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:11
Matrica, если у Paintbox-a есть свойство DoubleBuffered, установи его в true, может и полечит твою беду
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:12  [ТС]
нет в 6 билдере такого свойства ещё не было.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:24
Цитата Сообщение от Matrica Посмотреть сообщение
нет в 6 билдере такого свойства ещё не было.
есть
его к форме надо применить... програмно
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:26  [ТС]
спасибо, но не помогло, мигание осталось =(
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:27
Цитата Сообщение от Matrica Посмотреть сообщение
спасибо, но не помогло, мигание осталось =(
в каком месте применил ? лучше в конструкторе формы
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:27  [ТС]
C++
1
2
3
4
5
6
7
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
DoubleBuffered=true;
}
 
//сдесь ;)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:28
я тут в нете видел рекомендацию использовать TImage вместо TPaintBox


а вот еще статья по использованию TPaintBox - Рисование стрелки в TPaintBox
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:29
spiralTimer я так понимаю обработчик TTimer?
на какой интервал он выставлен?
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:31  [ТС]
выставлен на 50

У меня есть код:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::EffectStrobe(int pause=50,bool randcolor=true,TColor cl=clBlack)
{
if (randcolor==true)pb->Canvas->Brush->Color=TColor(RGB(random(255),random(255),random(255)));
else pb->Canvas->Brush->Color=cl;
pb->Canvas->Rectangle(0,0,pb->Width,pb->Height);
Sleep(pause);
pb->Canvas->Brush->Color=clBlack;
pb->Canvas->Rectangle(0,0,Width,Height);
}
это ни хилый стробоскоп, если я pb заменю на Image то такого результата не будет =)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:33
Matrica, если статью читать лень, там в первых строках написано, что лучше рисовать в битмапе, а потом уже готовое изображение отображать
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:35
Выложи проект, проверю
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:38  [ТС]
да нет, читать то не лень, просто с английским хорошо дружу =)

щас выложу (просто дома по среди комнаты стоит огромная плазма, и когда свет гасишь с помощью этой программки и подключённым через HDMI компьютером, получается офигенно =) )

вот, просто первый раз не вложилось
Вложения
Тип файла: zip Stroboscope.zip (1.26 Мб, 24 просмотров)
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:43  [ТС]
а и ещё, там щас отключены управляющие таймеры, поэтому будет одна спираль =) !
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:00
сделай размеры TPaintBox с самого начала нужные а в таймере их не меняй. Я в свойствах Allign поставил alClient - мигать перестало, правда не уверен что спираль нужной конфигурации рисуется. Вобщем с установкой размеров поиграйся.
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:02  [ТС]
а где ты видишь что размеры TPaintBox меняются по timer'y? Они меняются так:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::FormResize(TObject *Sender)
{
pb->Left=0;
pb->Top=0;
pb->Width=ClientWidth;
pb->Height=ClientHeight;
}
и больше ни где


да даже если Client поставить всё равно мигает ужасно...хотя понятие мигает растяжимое....может они у нас просто разные...я говорю про то что когда смотришь на картинку видно как бы такие чёрные полосы пробегают...

а лучше всего это видно если поставить int laserdailer_selectlaser=0; , отключить таймер spiral и включить laserdailer->Enabled=true; =) то там так полоски мигать будут противно...фуу=(
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:07
я закоментил вот это:
Code
1
pb->Canvas->Rectangle(0,0,Width,Height);
и мигать перестало
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:10  [ТС]
и при этом спираль не рисуется...а сразу закрашивает собой всё поле =) юморист, блин =)

Добавлено через 1 минуту
кстати тоже красивый эффект =) спасибо!
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:20
Тогда выход один, как сказали ранее, рисовать в памяти на битмапе, а потом его кидать на PictureBox
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:21  [ТС]
а можно пример рисования чего угодно в памяти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2010, 12:21
Помогаю со студенческими работами здесь

Избавиться от мигания экрана
Бодрого времени суток, господа. Пытаюсь (безуспешно) решить такую проблему. Необходимо на экран непрерывно выводить информацию - время. ...

Мигания при перерисовке формы
Добрый день. Создаю простенький текстовый редактор. На разных этапах разработки бывало такое, что при сворачивании/разворачивании формы...

Смена частосты мигания при отпускании кнопки, потоки
Доброго времени суток, помогите с лабой пожалуйста по микроконтролерам. Задание: Когда пользователь отпускает кнопку, увеличить частоту...

При рисовании появляются полосы как при наложении
Доброго времени суток, возникла проблемка, при рисовании изображений с помощью Graphics потребовалось использовать, так сказать тайлинг...

ошибка при рисовании!!!
два участка кода которые рисуют график функции среднего температурного лагорифмического потока :umnik: пересмотрел много литературы ни...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru