Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Самодельный прогрессбар

18.04.2012, 00:37. Показов 2506. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал очень простой прогрессбар, хотелось бы услышать мнение народа по этому поводу...
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
#pragma resource "*.dfm"
TForm1 *Form1;
int pan13B;
//---------------------------------------------------------------------------
.........
.........
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Panel2->Width+=2;
  if (Panel2->Width==pan13B+300){
  Panel2->Color=clGreen;
  Label1->Caption="Процесс загрузки выполнен на 50 %";}
 
  if (Panel2->Width==pan13B+600){
  Timer1->Enabled=false;
  Panel2->Color=clBlue;
  Label1->Caption="Процесс загрузки завершен";}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Label1->Caption="";
  Panel2->Width=0;
  Panel2->Color=clRed;
  pan13B = Panel2->Width;
  Timer1->Enabled=true;
}
Работа со стандартным ProgressBar у меня чтото не задалась, просто не смог найти изменение цвета и скорости по ходу прогресса...
Миниатюры
Самодельный прогрессбар  
Вложения
Тип файла: rar Прогрессбар.rar (367.9 Кб, 48 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2012, 00:37
Ответы с готовыми решениями:

Прогрессбар на основе TImage
Мне понадобился супер-точный Прогрессбар. Решил написать его самостоятельно на основе TImage. Может кому-нибудь пригодится Unit1.h:...

Прогрессбар для цикла
Как добавить для цикла прогресс бар? Цикл берёт два документа log and log2 смотрит есть ли изменения в log2 если есть выводит их.. Но если...

Самодельный кодек JPEG отдаю в хорошие руки берите кому надо
Отдаю всем желающим вместе с исходниками jpeg recovery - программа для восстановления поврежденных JPEG-файлов - ссылка на официальный...

9
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.04.2012, 00:59
Все хорошо, но вот волшебные числа использовать точно не стоит, это почти никогда не бывает полезно на большом отрезке времени. Лучше использовать соотношения:
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
int full_width;
//---------------------------------------------------------------------------
.........
.........
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Panel2->Width+=2;
  if (Panel2->Width >= full_width / 2 && Panel2->Color != clGreen){
  Panel2->Color=clGreen;
  Label1->Caption="Процесс загрузки выполнен на 50 %";}
 
  if (Panel2->Width >= full_width){
  Timer1->Enabled=false;
  Panel2->Color=clBlue;
  Label1->Caption="Процесс загрузки завершен";}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Label1->Caption="";
  Panel2->Width=0;
  Panel2->Color=clRed;
  full_width = ClientWidth - Panel2->Left * 2;
  Timer1->Enabled=true;
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.04.2012, 01:07  [ТС]
BRcr хорошее замечание, теперь буду знать.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.04.2012, 01:08
не знаю, как оно у тебя там рисуется, но теория такова:
C++
1
2
3
4
5
6
Panel2->Color = clRed;
Panel2->Width += 1;
if (Panel2->Width==50) {
  Panel2->Color = clGreen;
  Panel2->Width += 2;
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.04.2012, 01:18  [ТС]
LK твой вариант зергуд, меня беспокоит один момент связанный с растянутым разрешением экрана, например как у тебя, прогрессбар может выглядеть не позадумке тобиш пиксели небудут совпадать!?
А еще в самодельном варианте можно не Panel тянуть к борту а например Image с гламурной картинкой и получится не хуже чем это:
Миниатюры
Самодельный прогрессбар  
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.04.2012, 07:18
Раньше можно было легко манипулировать цветом прогресс бара, сейчас (имеется ввиду не время, а "модное" оформление компонентов Windows XP и выше) можно использовать индикаторы состояния (нормальный, ошибка, пауза) для изменения цвета загрузки, однако так и пользователя можно запутать (для справки в RAD XE при отключении стилей можно легко манипулировать цветом ProgressBar). Для вашей изначальной задумки можно "копать" от устаревшего CGauge, или просто его использовать. Он позволяет устанавливать цвет, фон, рамку и включение/отключение режима вывода процентажа.

Но если вдохновение на продолжение работы над компонентом не иссякнет, то могу посоветовать следующее. Не использовать наложение 2 и более компонентов с последующим перемещением. Как минимум замучатесь с размерами и вычислениями, а смысла мало. Идти желательно от WinControl и рисовать все в памяти в зависимости от настроек, затем прорисовывать результат, используя дескриптор. Альтернативный вариант использовать Image. Но никаких растяжений изображения делать не советую, результат будет не соотвествовать задумке. В случае с одним пикселем, заливаемым в процессе определенным цветом, будет кушать память, а растяжение исходного изображения будет выглядеть крайне не привлекательно, если паттерн (шаблон) не подобрать соотвествующим образом (на практике убедился, что подобные паттерны гараздо проще и быстрее создать через заливку градиентом, чем рисовать в графических редакторах). И если не используется Image и его аналоги - обязательно хранить предыдущий результат отображения в памяти, при получении WM_PAINT - большой плюс к производительности.
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.04.2012, 09:25
Лучший ответ Сообщение было отмечено как решение

Решение

Samrisbe,
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
i++;
ProgressBar1->Position = i;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PostMessage(ProgressBar1->Handle,0x0409,0,clRed); // Всесто clRed, можно поставить любой другой цвет        
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar цвет progressbar.rar (329.5 Кб, 41 просмотров)
3
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
18.04.2012, 10:29
- я еще так делал: поместил две картинки прогресбара (одну на другую) и в процессе менял ширину верхней картинки (зеленой), которая или перекрывала нижнюю (красную) частично или полностью, или исчезала совсем. Вполне приемлемо и никаких мельканий.
Изображения
 
1
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.04.2012, 10:58
Цитата Сообщение от QVO Посмотреть сообщение
Всесто clRed, можно поставить любой другой цвет
К сожалению, не будет работать с новыми стилями. Вообще появление в "новых" IDE свойство BarColor немного на шутку смахивает.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.04.2012, 16:05  [ТС]
Спасибо за советы, буду работать, эксперементировать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2012, 16:05
Помогаю со студенческими работами здесь

ПрогрессБар
Мне нужен прогрессБар при загрузки страницы сайта. помогите сделать на примере) Добавлено через 9 часов 1 минуту народ кто знает...

Прогрессбар
В общем, нужен прогрессбар. Он должен отображать текущий процесс выполнение другого яваскрипта. В инете нашел следующий, он мне...

Прогрессбар
Есть ли у кого подобный прогрессбар как тут на сайте - http://100original.ru/ В самом верху. Пытался утянуть, не вышло (

Прогрессбар
Здравствуйте. Имеется вот такой прогрессбар собранный по кускам из интернетов @echo off mode con cols=40 lines=4 Color 0A ...

Круглый прогрессбар
Вот так можно создать круглый Progressbar используя UserControl Код формы: using System; using System.Collections.Generic; using...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru