Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014

ProgressBar на основе секторов (Pie)

22.01.2014, 13:35. Показов 731. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, друзья и коллеги!
Чистил в ограде снег, зашел попить кофе да погреться - шутка ли -30
Пока пил кофе, пришла идея сделать прогрессбар на основе секторов.
Открыл фотошоп, слепил пару кругов, слепил глянец. Написал простенький код, потом решил создать юзерконтрол.
В готовые решения не стал выкладывать - подобное было, да и получше.
Поэтому пишу сюда)
Не нашел способа скрыть все ненужные свойства юзерконтрола, напишу тут, какие изменять.

Код класса
VB.NET
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
Public Class PrBar
    Dim Fon As New Bitmap(My.Resources._1)
    Dim Glass As New Bitmap(My.Resources._2)
    Dim Mode1 As New Bitmap(My.Resources._3)
    Dim Mode2 As New Bitmap(My.Resources._4)
    Dim Mode3 As New Bitmap(My.Resources._5)
    Dim _Value As Integer = 0
    Dim _Maximum As Integer = 100
    Dim BColor As Color = Color.DarkGreen
    Dim _Skin As Bitmap
    Dim Sk As Skin
    Dim TxtrBr As TextureBrush
    Dim Texture As Boolean = False
    Dim Br As SolidBrush
    Dim sf As New System.Drawing.StringFormat
    Dim P As New Pen(Color.Yellow, 1)
 
    Sub New()
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
        InitializeComponent()
 
        Br = New SolidBrush(Color.DarkGreen)
        Draw()
    End Sub
 
    Enum Skin
        Skin1
        Skin2
        Skin3
    End Enum
 
    Private Sub Draw()
        Dim BM As New Bitmap(104, 104)
        Dim G As Graphics = Graphics.FromImage(BM)
        G.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
        G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        G.DrawImage(Fon, New Rectangle(0, 0, 103, 104))
        If Texture = True Then
            G.FillPie(TxtrBr, New Rectangle(2, 2, 98, 98), 270, (360 * _Value \ _Maximum))
        Else
            G.FillPie(Br, New Rectangle(2, 2, 98, 98), 270, (360 * _Value \ _Maximum))
        End If
        G.DrawPie(P, New Rectangle(2, 2, 98, 98), 270, 360 * _Value \ _Maximum)
        G.DrawString(CInt(_Value / _Maximum * 100) & "%", New Font("arial", 15, FontStyle.Bold), Brushes.White, New Rectangle(0, 0, 104, 104), sf)
        G.DrawImage(Glass, New Rectangle(0, 0, 104, 104))
        Me.BackgroundImage = BM
    End Sub
 
    Property Valuev() As Integer
        Get
            Return _Value
        End Get
        Set(ByVal val As Integer)
            _Value = val
            Draw()
        End Set
    End Property
 
    Property Maximum() As Integer
        Get
            Return _Maximum
        End Get
        Set(ByVal val As Integer)
            _Maximum = val
        End Set
    End Property
 
    Property BckColor() As Color
        Get
            Return BColor
        End Get
        Set(ByVal val As Color)
            BColor = val
            Texture = False
            Br = New SolidBrush(BColor)
            Draw()
        End Set
    End Property
 
    Property ProgSkin() As Skin
        Get
            Return Sk
        End Get
        Set(ByVal val As Skin)
            Sk = val
            Texture = True
            If Sk = Skin.Skin1 Then _Skin = Mode1
            If Sk = Skin.Skin2 Then _Skin = Mode2
            If Sk = Skin.Skin3 Then _Skin = Mode3
            TxtrBr = New TextureBrush(_Skin)
            Draw()
        End Set
    End Property
End Class


С него толку мало, нужны ресурсы, так что проект прилагается.

Итак, свойства (их мало, самые основные):
  • Maximum - максимальное значение индикатора
  • Valuev - значение индикатора (исключение не обработал при превышении макс.)
  • BckColor - цвет заполняемой части бара
  • ProgSkin - перечисление - 3 простых "скина" заполняемой части
Скин и цвет совместно не работают. Что установлено позже - то и применяется.

Недостатков много, да я и не пытался сделать готовый к употреблению продукт. Например, размер бара не меняется. Не ставится основной цвет прогресса (фон).
Все накидано на одном дыхании.

В приложениях - проект бара и демонстрация его работы.

Все - забавы ради)
Изображения
  
Вложения
Тип файла: rar ProgBar.rar (49.1 Кб, 18 просмотров)
Тип файла: rar Демонстрация.rar (76.9 Кб, 17 просмотров)
11
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2014, 13:35
Ответы с готовыми решениями:

Pie Chart на основе данных из БД
Здравствуйте. Есть таблица, в которой нужно выбрать данные по вводимой дате (Date_str). Дата в числовом формате (не суть). Затем...

ProgressBar на основе изображений
Приветик всем. Суть дела такова: у нас есть два изображения Back и New. Back стоит на заднем плане, а New одинаковое по ширине и высоте,...

Игра "Скачки" на основе Progressbar
Всем доброго времени суток. Нужна помощь в написании программы, моделирующую игру "скачки" условие: В игре участвуют...

5
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
22.01.2014, 14:51
Памирыч, не плохой такой ProgressBar! Кстати, размер можно менять при помощи:

VB.NET
1
2
3
4
5
Private Sub PrBar_Changed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
'
'
Draw()
End Sub
Кажется...
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
22.01.2014, 15:10  [ТС]
Gelo123321, наверно да, но посыплются пикселы битмапов.
0
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
22.01.2014, 15:34
Памирыч, это да, но можно сделать только цвет, без текстур. Мне например нравиться простота)
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
23.01.2014, 00:52
Памирыч, симпатично получилось.
Цитата Сообщение от Памирыч Посмотреть сообщение
Написал простенький код, потом решил создать юзерконтрол.
Как Вы его наследовали в .dll?


Цитата Сообщение от Памирыч Посмотреть сообщение
Не нашел способа скрыть все ненужные свойства юзерконтрола
Скрывать свойства:
VB.NET
1
2
3
4
5
Imports System.ComponentModel
'...
    <Browsable(False), Bindable(False), EditorBrowsable(EditorBrowsableState.Never)> _
    Public Overrides Property ForeColor As Color
'...

Цитата Сообщение от Памирыч Посмотреть сообщение
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Property BckColor() As Color
        Get
            Return BColor
        End Get
        Set(ByVal val As Color)
            BColor = val
            Texture = False
            Br = New SolidBrush(BColor)
            Draw()
        End Set
    End Property
BckColor - это BackColor?
Без создания дополнительных переменных и свойств:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
    Public Overrides Property BackColor As System.Drawing.Color
        Get
            Return MyBase.BackColor
        End Get
        Set(ByVal value As System.Drawing.Color)
            MyBase.BackColor = value
            Texture = False
            Br = New SolidBrush(MyBase.BackColor )
            Draw()
        End Set
    End Property
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.01.2014, 06:35  [ТС]
Цитата Сообщение от Petr_S Посмотреть сообщение
Как Вы его наследовали в .dll?
Создал юзерконтрол и вставил код туда Благо его было немного. Допиливал уже в библиотеке.
Цитата Сообщение от Petr_S Посмотреть сообщение
Скрывать свойства
Да, но по одному меня не прельщало их убирать)
Цитата Сообщение от Petr_S Посмотреть сообщение
BckColor - это BackColor?
Нет, настоящий BackColor в компоненте - прозрачный (чтобы не было серого прямоугольника)
В моем случае это цвет индикатора (сектора)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2014, 06:35
Помогаю со студенческими работами здесь

Консольный progressbar или progressbar в TMemo
Здравствуйте. Хочу спросить ради интереса как создать вот такой ProgressBar но с указанием своих сиволов в консоли и в...

Pie - цвета
У меня могут быть 4 составляющих, либо 3 (O,C, He+- N). Мне нужно чтоб цвета графика были постойными - то есть чтоб кислород (О) всегда был...

TChart pie
Rad Studio XE добрый вечер, интересует очень компонент Chart, а вернее его разновидность - &quot;пирог&quot;. как я понял значения...

Pie, arc
http://www.az-design.ru/index.shtml?Support&amp;SoftWare&amp;Delphi/D3/SB20Pie можете растолковать что к чему? Вроде по русски написано но...

Создание Pie Chart
Как сделать такую диаграмму? Что лучше использовать html + css, canvas, svg или еще что то? Части диаграммы должны быть интерактивны, чтоб...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru