Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Собственный ProgressBar 
:(
    Опции темы
SKrivosein
Дата 10.7.2008, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: нет
Всего: 8



Всем добрый день(или ночь). Есть желание поиграть, и нарисовать свой ProgressBar или чот типа того. Всё вроде работает, но есть одно "но", изображение мерцает. Если есть идеи, (замечания) подскажите, пример чисто учебный. Или не бейте больно. smile  В общем код->
Код

//рисую, ширина окна 360 px...
        int shift = 0;
        int cofShift = 0;
        bool progressBarState = false;
//......
 if (progressBarState == true)
            {
                int a = 11;
                g.DrawRectangle(new Pen(Color.Blue, 1), 10, 300, 332, 5);
                g.DrawLine(new Pen(Color.FromArgb(0,178,233), 4), 11, 303, 342, 303);
               
                g.DrawLine(new Pen(Color.Aqua, 4), a + shift, 303, a + 1 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 7 + shift, 303, a + 8 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 12 + shift, 303, a + 14 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 18 + shift, 303, a + 22 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 26 + shift, 303, a + 32 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 36 + shift, 303, a + 44 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 48 + shift, 303, a + 58 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 62 + shift, 303, a + 70 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 74 + shift, 303, a + 80 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 84 + shift, 303, a + 88 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 92 + shift, 303, a + 94 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 98 + shift, 303, a + 99 + shift, 303);
                g.DrawLine(new Pen(Color.Aqua, 4), a + 105 + shift, 303, a + 106 + shift, 303);

                if ((shift + a + 92) >= 340)
                    cofSdvig = 1;
                if (shift <= a)
                    cofSdvig = 0;
                if (cofSdvig == 0)
                    shift += 20;
                else
                    shift -= 20;
            }

//спускаю (предполагаем паралельный поток), интервал таймера скажем 100.
        private void progressBarStart()
        {
            Rectangle oblast = new Rectangle(9, 298, 335, 8);
            Invalidate(oblast);
        }
        private void startProgressBar(object sender, EventArgs e)
        {
            progressBarState = true;
            timerProgressBar_Tick(sender, e);
        }
        private void stopProgressBar()
        {
            progressBarState = false;
            progressBarStart();
        }
        private void timerProgressBar_Tick(object sender, EventArgs e)
        {
            if (progressBarState == true)
            progressBarStart();
        }

 smile 

Это сообщение отредактировал(а) SKrivosein - 12.7.2008, 03:06


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
SKrivosein
Дата 12.7.2008, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: нет
Всего: 8



Есть такой класс BufferedGraphics, но с MSDN ничего не понял.Наверно уже поздно. smile 


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
jonie
Дата 13.7.2008, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



ага да.. воообще про двойную буферизацию стоит почитать. суть простая: "сначала отрисовываете на виртуальном DC, потом подменяете DC своего бара, на отрисованное".


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
SKrivosein
Дата 4.8.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: нет
Всего: 8



  А всё очень просто, спасибо "WINDOWS FORMS PROGRAMMING IN C#" by  CHRIS SELLS 
Код

            InitializeComponent();

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.UserPaint, true);

            this.Paint += new PaintEventHandler(CommandForm_Paint);

 smile 

Это сообщение отредактировал(а) SKrivosein - 4.8.2008, 02:22


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.3070 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.