Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Как с Builder работать с целью уменьшения мерцания
Ответ
 
Опции темы Опции просмотра
  (#16 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 23.10.2008, 13:01

Цитата:
Я пытаюсь понять, нечто подобное Вы сами делали или нет.
Повеселился..

Ну вот пример, который создается за 5 минут.
Делаем новое приложение, на пустую форму кладем таймер миллисекунд на 50-10 и небольшую картинку, чисто служебную, делаем ее невидимой.

В раздел private формы добавляем
Код:
        Graphics::TBitmap       *Work;
        int     CurX;
        int     CurY;
Создаем методы
Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Work = new Graphics::TBitmap;
  CurX = 0;
  CurY = 0;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
  Work->Width  = ClientWidth;
  Work->Height = ClientHeight;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete Work;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  Canvas->Draw(0, 0, Work);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  CurX = X;
  CurY = Y;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  TRect R(0, 0 , Work->Width, Work->Height);
  Work->Canvas->FillRect(R);
  Work->Canvas->Draw(CurX++, CurY++, Image1->Picture->Bitmap);
  Work->Canvas->TextOut(1, 1, IntToStr(CurX)+":"+IntToStr(CurY));
  FormPaint(this);
}
Запускаем и наблюдаем как картинка ползет по экрану и перескакивает по щелчку мыши
Ответить с цитированием
  (#17 (permalink)) Старый
wlad115 wlad115 вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2008
По умолчанию 23.10.2008, 14:03

Спасибо. Кое-что получилось.

Правда, зачем такие усложнения, как

Work->Canvas->TextOut(1, StrToInt('1'), IntToStr(CurX)+":"+IntToStr(CurY));

вместо

Work->Canvas->TextOut(0, 0, IntToStr(CurX)+":"+IntToStr(CurY));

не очень понятно.

А что касается таймера, то он в микросекундах вообще не настраивается... Timer->Interval=1, насколько я понимаю, это одна миллисекунда, а
Timer->Interval=1000 - это одна секунда

Вечером буду работать с основной программой...

Если можно, из какого Вы города? Если не личная тайна...

С уважением
Владислав
Ответить с цитированием
  (#18 (permalink)) Старый
wlad115 wlad115 вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2008
По умолчанию 23.10.2008, 14:03

Спасибо. Кое-что получилось.

Правда, зачем такие усложнения, как

Work->Canvas->TextOut(1, StrToInt('1'), IntToStr(CurX)+":"+IntToStr(CurY));

вместо

Work->Canvas->TextOut(0, 0, IntToStr(CurX)+":"+IntToStr(CurY));

не очень понятно.

А что касается таймера, то он в микросекундах вообще не настраивается... Timer->Interval=1, насколько я понимаю, это одна миллисекунда, а
Timer->Interval=1000 - это одна секунда

Вечером буду работать с основной программой...

Если можно, из какого Вы города? Если не личная тайна...

С уважением
Владислав
Ответить с цитированием
  (#19 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 23.10.2008, 14:31

Цитата:
Правда, зачем такие усложнения, как
Это безобразие возникло из-за того, что привык проверять те советы, которые даю людям.
Кому-то на форуме потребовалось переводить символы в числа, написал про применимость для этого StrToInt.
Под рукой был готовый тестовый проект, в нем и проверил, а вернуть назад забыл.

Цитата:
А что касается таймера, то он в микросекундах вообще не настраивается... Timer->Interval=1, насколько я понимаю, это одна миллисекунда
Это описка. Имелись в виду, конечно, миллисекунды.

Цитата:
Если можно, из какого Вы города? Если не личная тайна...
А это важно? Из Ростова-на-Дону.
Ответить с цитированием
  (#20 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 23.10.2008, 14:31

Цитата:
Правда, зачем такие усложнения, как
Это безобразие возникло из-за того, что привык проверять те советы, которые даю людям.
Кому-то на форуме потребовалось переводить символы в числа, написал про применимость для этого StrToInt.
Под рукой был готовый тестовый проект, в нем и проверил, а вернуть назад забыл.

Цитата:
А что касается таймера, то он в микросекундах вообще не настраивается... Timer->Interval=1, насколько я понимаю, это одна миллисекунда
Это описка. Имелись в виду, конечно, миллисекунды.

Цитата:
Если можно, из какого Вы города? Если не личная тайна...
А это важно? Из Ростова-на-Дону.
Ответить с цитированием
Ads.
  (#21 (permalink)) Старый
wlad115 wlad115 вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2008
По умолчанию 26.10.2008, 08:17

Дорогой Алекс! (Я правильно понял: вы - Алекс?)

Ростов - хороший город, и там даже живут мои и друзья и троюродная сестра. Но это мелочи.

Все хорошо. Я обязательно сравню то, что получилось, с тем, что было..


Только вот побочный эффект...

После того, как выполнено
Im->Picture->LoadFromFile("1.bmp");

резко прекращает работать Im->Canvas->FillRect, и после

Im->Canvas->FillRect(TRect(34,34,34+34,34+54));

чертится прямоугольник ЗНАЧИТЕЛЬНО БОЛЬШИХ РАЗМЕРОВ...
Ответить с цитированием
  (#22 (permalink)) Старый
wlad115 wlad115 вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2008
По умолчанию 26.10.2008, 08:17

Дорогой Алекс! (Я правильно понял: вы - Алекс?)

Ростов - хороший город, и там даже живут мои и друзья и троюродная сестра. Но это мелочи.

Все хорошо. Я обязательно сравню то, что получилось, с тем, что было..


Только вот побочный эффект...

После того, как выполнено
Im->Picture->LoadFromFile("1.bmp");

резко прекращает работать Im->Canvas->FillRect, и после

Im->Canvas->FillRect(TRect(34,34,34+34,34+54));

чертится прямоугольник ЗНАЧИТЕЛЬНО БОЛЬШИХ РАЗМЕРОВ...
Ответить с цитированием
  (#23 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 26.10.2008, 11:16

Использование TImage для рисования - это от лукавого. Там возникают всякие нюансы.
Проще рисовать прямо по канве формы или использовать специальный компонент TPaintBox
Ответить с цитированием
  (#24 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 26.10.2008, 11:16

Использование TImage для рисования - это от лукавого. Там возникают всякие нюансы.
Проще рисовать прямо по канве формы или использовать специальный компонент TPaintBox
Ответить с цитированием
Ads
  (#25 (permalink)) Старый
wlad115 wlad115 вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2008
По умолчанию 30.10.2008, 13:57

Дорогой друг!

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

Как только я создаю кнопки и пытаюсь хоть что-то написать в ее обработчике
(начиная с совершенно банального Close() и продолжая менее банальным Form1->Canvas->FillRect(TRect(300,300,400,400))


сразу же антивирус начинает светить нечто жуткое...

Win32:Agent-YUF [Trj]

С уважением

Влад
Ответить с цитированием
  (#26 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,298
Сказал(а) спасибо: 31
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 30.10.2008, 14:12

Либо это таки зараза, мало связанная с ходом Ваших экспериментов, либо - в топку такой антивирус
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Целью практически всех приложений OpenGL является отображение цветного изображения Ahinar OpenGL 5 29.09.2009 17:06
Перерисовка окон без мерцания Odin_KG Visual C++ 3 17.07.2009 14:29
Как работать с С++ Builder Виталик 1 C++ Builder 84 06.07.2007 09:30
Предотвращение мерцания при рисовании в MFC kirrun Visual C++ 0 08.04.2007 01:24
Обрезание полей после уменьшения картинки Алексеев Николай PHP 5 17.03.2007 21:53
Нарисовать график функции с возможностью увеличения и уменьшения freimer Delphi 4 11.12.2006 07:43
Как работать с WMI в C++ Builder PUK JR C++ Builder 8 21.01.2006 22:06
Как работать с TChart в Builder Anonymous C++ Builder 4 20.12.2004 18:44
Погоня за целью. Hapuk Prolog 6 10.12.2004 23:48
OpenDialog уменьшения числа потоков Wasd C++ Builder 6 05.10.2004 17:50
Как устранить мерцания canvas Spider_Den C++ Builder 5 24.09.2004 16:52
Как избавиться от мерцания формы Anry Delphi 9 05.08.2004 17:50



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов