Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Астик
13 / 13 / 2
Регистрация: 03.10.2010
Сообщений: 190
Записей в блоге: 1

Моргание картинки при движении bitmap-а

21.10.2011, 21:47. Показов 1429. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
столкнулся с проблемой "моргания" картинки при движении ... кто может подсказать как убрать это ???
заранее спасибо)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#pragma once
 
 
namespace sky {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Summary for Form1
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            try
            {
                sky=gcnew System::Drawing::Bitmap(Application::StartupPath+"\\sky1.gif");
                plane=gcnew System::Drawing::Bitmap(Application::StartupPath+"\\plane.gif");
            }
            catch (System::Exception ^e)
            {
                MessageBox::Show("Ошибка открытия файла: "+e->Message,"Бип_Лаз",MessageBoxButtons::OK,MessageBoxIcon::Error);
                this->Paint+=nullptr;
                return;
            }
            plane->MakeTransparent(Color::Black);
            this->ClientSize=sky->Size;
            this->BackgroundImage=gcnew Bitmap(sky);
 
            g=this->CreateGraphics();
 
            rnd=gcnew System::Random();
            rct.X=-40;
            rct.Y=20+rnd->Next(20);
            rct.Height=plane->Height;
            rct.Width=plane->Width;
 
            dx=2;
 
            timer1->Interval=20;
            timer1->Enabled=true;
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
 
    private:
        System::Drawing::Bitmap^ sky;
        System::Drawing::Bitmap^ plane;
        Graphics^ g;
        int dx;//приращение х (опредилет скорость)
        Rectangle rct;//область в которой находится самолет
        System::Random^ rnd;
    private: System::Windows::Forms::Timer^  timer1;
    private: System::ComponentModel::IContainer^  components;
             /// <summary>
        /// Required designer variable.
        /// </summary>
 
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->components = (gcnew System::ComponentModel::Container());
            this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
            this->SuspendLayout();
            // 
            // timer1
            // 
            this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(522, 306);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
             {
                 g->DrawImage(sky,Rectangle(rct.X,rct.Y,rct.Width,rct.Height),Rectangle(rct.X,rct.Y,rct.Width,rct.Height),GraphicsUnit::Pixel);
                 if(rct.X<this->ClientSize.Width)
                     rct.X+=dx;
                 else
                 {
                     rct.X=-40;
                     rct.Y=20+rnd->Next(40);
                     dx=2+rnd->Next(4);
                 }
                 g->DrawImage(plane,rct.X,rct.Y);
             }
    };
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2011, 21:47
Ответы с готовыми решениями:

Убрать моргание при движении картинки
Здравствуйте, сегодня у меня 2 вопроса. Когда картинка движется, то всё начинает моргать, при чём чем больше движущихся картинок, тем...

Медленная перерисовка формы при движении картинки в ее области
Хотел спросить на пример если поместить на форму картинку и сделать чтоб она перемещалась по форме она начинает лагать. как можно это...

Большая нагрузка и тормоза при движении картинки по форме
Пишу небольшую программку, большая часть интерфейса - это картинка с координатной плоскостью. Хотел сделать так, чтобы перекрестие всё...

3
-1 / 2 / 0
Регистрация: 20.10.2011
Сообщений: 18
21.10.2011, 22:17
Ну не разобрался я в этой писанине.
Вот например у меня нет моргания
Мои действия:
1. Создал таймер
2. Создал бокс для картинки
3. Два раза кликнул по таймеру
4. Далше чтобы картинка например перемещалась вправо прибавляю к координате Х единицу
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
21.10.2011, 23:54
Астик, в свойстве формы нужно поставить двойную буферизацию DoubleBuffered = True;
а в событие таймера приписать this->Invalidate();
0
 Аватар для Астик
13 / 13 / 2
Регистрация: 03.10.2010
Сообщений: 190
Записей в блоге: 1
22.10.2011, 00:58  [ТС]
Цитата Сообщение от xAtom Посмотреть сообщение
Астик, в свойстве формы нужно поставить двойную буферизацию DoubleBuffered = True;
а в событие таймера приписать this->Invalidate();
не помогло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2011, 00:58
Помогаю со студенческими работами здесь

Как избавится от рамки цвета формы при движении картинки?
Здрасте. Код: //--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop ...

Ошибка "Bitmap image is not valid" при загрузке из БД картинки в форматах JPEG либо BMP
Отобразить из БД картинки в DBImage. В 2-х вариантах JPEG либо в BMP форматах. C++Builder. На форме(Form1) подключена База ADO(Access)....

Моргание при показе формы
Есть QMainForm, на нем постоянно в графическом представлении рисуются графические объекты. И вот я создаю форму (из дизайнера) и показываю...

Моргание экрана при логине
Запускаю компьютер - нужно ввести пароль(начинает моргать экран) все ввожу правильно и жму enter. пишет: добро пожаловать, но эран все еще...

Моргание экрана при перерисовке
Ребята, может кто знает, как убрать моргание экрана при перерисовке, пользуюсь функцией InvalidateRect(), моргает не всегда, но бывает....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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
/ * Дана цепь постоянного тока с 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/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru