Добро пожаловать в графические графики часов Winforms, библиотеку с открытым исходным кодом.
Основная цель этого проекта — предоставить графические объекты, похожие на часы, для разработчиков Winforms на C# и VB.NET. библиотека в первую очередь предназначена для приложений, которые предоставляют расчетные данные о производительности (например, информационная панель продаж компании).
Каждый объект часов имеет множество свойств, используемых для настройки. Часы могут включать анимацию при обновлении или загрузке.
Загрузите последнюю версию BusinessClocks.dll на свой локальный компьютер.
Последнюю версию вы всегда можете найти в основной ветке репозитория.
Загрузите DLL-файл в свой проект winforms с помощью Visual Studio.
Инструкции по загрузке dll в ваш проект:
Using (C#) или оператор Imports (VB.NET) в пространство имен BusinessClocks.ExecutiveClocks в верхней части файла Form1 .Form1 .Пример теста C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessClocks.ExecutiveClocks;
namespace WindowsFormsApplication19
{
public partial class Form1 : Form
{
private BusinessClocks.ExecutiveClocks.CarClock carClock;
private GoalsClock goalsClock;
private WaitClock waitClock;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
carClock = new BusinessClocks.ExecutiveClocks.CarClock(300, 150, 0.8F, true);
carClock.ShowInnerCutForPerformance = false;
carClock.BarBackColor = Color.Pink;
carClock.Create(true);
this.Controls.Add(carClock.ClockPanel);
goalsClock = new GoalsClock(200, 200, 0.8F);
goalsClock.Create(true);
goalsClock.Clock.Location = new Point(0, carClock.ClockPanel.Location.Y + carClock.ClockPanel.Height + 5);
this.Controls.Add(goalsClock.Clock);
waitClock = new WaitClock(150, 150, "Loading...");
waitClock.Clock.Location = new Point(0, goalsClock.Clock.Location.Y + goalsClock.Clock.Height + 5);
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular);
waitClock.SetArrayColors(new Color[] { Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204) });
waitClock.OuterCircleWeight = 8;
waitClock.InnerCircleWeight = 5;
waitClock.Create(true);
this.Controls.Add(waitClock.Clock);
}
}
}
Пример теста Visual Basic.NET
Imports BusinessClocks.ExecutiveClocks
Public Class Form1
Private carClock As BusinessClocks.ExecutiveClocks.CarClock
Private goalsClock As GoalsClock
Private waitClock As WaitClock
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' car clock (with precentage bar)
carClock = New BusinessClocks.ExecutiveClocks.CarClock(300, 150, 0.8, True)
carClock.ShowInnerCutForPerformance = False
carClock.BarBackColor = Color.Pink
carClock.Create(True)
Me.Controls.Add(carClock.ClockPanel)
' goals clock
goalsClock = New GoalsClock(200, 200, 0.8)
goalsClock.Create(True)
goalsClock.Clock.Location = New Point(0, carClock.ClockPanel.Location.Y + carClock.ClockPanel.Height + 5)
Me.Controls.Add(goalsClock.Clock)
' waitclock
waitClock = New WaitClock(150, 150, "Loading...")
waitClock.Clock.Location = New Point(0, goalsClock.Clock.Location.Y + goalsClock.Clock.Height + 5)
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular)
waitClock.SetArrayColors(New Color() {Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136) _
, Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204)})
waitClock.OuterCircleWeight = 8
waitClock.InnerCircleWeight = 5
waitClock.Create(True)
Me.Controls.Add(waitClock.Clock)
End Sub
End Class
Примечание. Все часы (на данный момент WaitClock и CarClock) наследуют GoalsClock.
Характеристики:
Clock: Экземпляр графического объекта, представляющего часы, инициализируемый после вызова Create() .ClockWidth : Получает или устанавливает ширину часов.ClockHeight : Получает или устанавливает высоту часов.xPos и Ypos : получает позицию x или y прямоугольника, содержащего часы.ClockBackGroundColor : Получает или задает цвет фона часов.FontColor : Получает или задает цвет шрифта текста, описывающего процент PercentOfGoals .ClockFont : Получает или задает шрифт текста, описывающего процент PercentOfGoals. Пожалуйста, обрати внимание:font , поскольку метод получения этого свойства вызывает функцию LoadFont() , чтобы вычислить подходящий размер и стиль шрифта относительно размера часов, используя внутренний элемент elgoritem.LoadFont() чтобы сбросить шрифт.InnerCircleColor : Получает или задает цвет внутренней дуги.InnerCircleWeight : Получает или задает вес (ширину) внутренней дуги в пикселях.OuterCircleColor : Получает или задает цвет внешней дуги.OuterCircleWeight : Получает или задает вес (ширину) внешней дуги в пикселях.PercentOfGoals : Получает или задает значение часов. например значение 0,1F = 10%, значение 0,5F = 50%, значение 1,1F = 110% и т. д.GoalsPercentDecimalValue : получает десятичное значение часов.Animate (поле): Получает или задает значение, указывающее, будет ли активирована анимация или нет.AnimationLength : Получает или задает скорость анимации (в миллисекундах) на основе перечисления AnimationLength: SuperFast = 1, Fast = 4, ModerateFast = 8, Moderate = 15, ModerateSlow = 28, Slow = 50, SuperSlow = 80.TimerInterval : Получает или задает интервал тактов для внутреннего таймера. рекомендуемое значение — 4 (по умолчанию). Чтобы ускорить время обновления, используйте меньшее значение.Методы:
Create(ByVal AnimateClock As Boolean) : Инициализация объекта часов должна вызываться после установки всех свойств (обратите внимание разработчикам: этот метод является переопределяемым/виртуальным).RefreshClock(ByVal AnimateClock As Boolean) : обновляет и перерисовывает графику объекта часов; вызывайте этот метод после изменения свойств (например, PercentOfGoals, InnerCircleColor). Большинство свойств часов будут вызывать этот метод при изменении их значения. (обращаем внимание разработчиков: этот метод является переопределяемым/виртуальным).LoadFont() : возвращает подходящий размер и стиль шрифта относительно размера часов, используя внутренний элемент elgoritem.LoadFont() чтобы сбросить шрифт.Dispose() : метод реализуется из интерфейса IDisposable (в сборке mscorlib.dll), при вызове объекта часов он будет удален, а все объекты GDI будут освобождены из памяти.Характеристики:
ClockPanel (поле): используйте для размещения внутри объекта Clock , если требуется текстовая панель. Важно: если BaseBar = True объект Clock будет размещен внутри ClockPanel , чтобы отображать полосу текста производительности под часами.BaseBar = True используйте этот элемент управления (а не свойство Clock), чтобы получить часы с текстовой панелью.BaseBar = False никогда не использовать это свойство, результатом будет NullReferenceException , поскольку оно не будет инициализировано (пожалуйста, прочитайте выпуск 6, открытый пользователем lordofscripts: #6). LowPerformance : Получает или задает индикатор низкой производительности. Это свойство привязано к свойству LowPerFormanceColor , и его значение будет устанавливать графическую область часов низкой производительности с цветом LowPerFormanceColor .
MediumPerformance : Получает или задает показатель средней производительности. Это свойство привязано к свойству MediumPerFormanceColor , и его значение задает графическую область часов средней производительности с цветом MediumPerFormanceColor .
HighPerformance : Получает или задает индикатор высокой производительности. Это свойство привязано к свойству HighPerFormanceColor , и его значение задает графическую область часов высокой производительности с цветом HighPerFormanceColor .
HighPerFormanceColor : Получает или задает графическую область высокой производительности в часах с выбранным цветом (привязанным к свойству HighPerFormance ).
MediumPerFormanceColor : Получает или задает область производительности графического носителя в часах с выбранным цветом (привязанным к свойству MediumPerformance ).
LowPerFormanceColor : Получает или задает графическую область низкой производительности на часах с выбранным цветом (привязанным к свойству LowPerformance ).
NeedleBaseColor : Получает или задает цвет фона основания иглы (стрелки часов).
NeedleBaseWeight : Получает или задает вес (толщину) пикселя основания иглы (стрелки часов).
NeedleOuterColor : Получает или задает цвет фона внешней области стрелки (стрелки часов).
NeedleOuterWeight : Получает или задает вес (толщину) пикселя внешней области иглы (стрелки часов).
NeedleInnerColor : Получает или задает цвет фона внутренней области стрелки (стрелки часов).
NeedleInnerWeight : Получает или задает вес (толщину) пикселя внутренней области стрелки (стрелки часов).
ShowInnerCutForPerformance : Получает или задает значение, указывающее, будет ли визуальный внутренний разрез (косая черта), представляющий производительность, отображаться в середине границы часов.
InnerCutPreformanceColor : Получает или задает цвет визуальной внутренней границы (косой черты), которая представляет производительность в середине границы тактовой частоты.
InnerCutPerformanceWeight : Получает или задает вес (толщину) внутреннего разреза (косой черты), который представляет производительность в середине границы тактовой частоты.
BarFont : Получает или задает шрифт текста, описывающего процент PercentOfGoals.
BarBackColor : Получает или задает цвет фона индикатора производительности.
BarForeColor : Получает или задает цвет шрифта панели производительности.
BarValueDigitsForeColor : Получает или задает цвет шрифта меток max(100%) и min(0%) панели.
BarValueDigitsBackColor : Получает или задает цвет фона меток max(100%) и min(0%) панели.
BarValueDigitsFont : Получает или задает шрифт меток max(100%) и min(0%) панели.
Характеристики:
waitText : Получает или устанавливает текст в середине часов. Методы:
SetArrayColors(ByVal arrayOfColors() As Color) : устанавливает серию цветов, которые будут меняться после каждого поворота на 360 градусов. .dll написан на VB.NET.
Вы также можете использовать его с проектами C#.
Добавлены два идентичных примера для C# и для VB.NET.
Это проект с открытым исходным кодом: Исходный код
Мы используем SemVer для управления версиями.
Базовый класс GoalsClock имеет поле константы Version : используйте его для проверки номера версии библиотеки.
Этот раздел еще в разработке, в ближайшее время.
Здесь вы найдете пояснения и примеры для разработчиков, которые хотят принять участие в проекте и написать свои собственные графики времени.
WaitClock , пока приложение выполняет длинную задачу в фоновом режиме с использованием потоков.Пример кода C# с комментариями:
/*
**************************************************************************
* AUTHOR: Jonathan Applebaum *
* DESCRIPTION: An example that describes how to use WaitClock object *
* from another thread in order to execute a long task in the beckground *
* DATE: 06/01/2017 *
* ************************************************************************
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessClocks.ExecutiveClocks;
namespace WindowsFormsApplication19
{
public partial class Form1 : Form
{
private WaitClock waitClock;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// show wait clock on a different thread until LongTask finish executing
System.Threading.Thread waitThread = new System.Threading.Thread(LoadWaitClock);
waitThread.Start();
// start a new thread to execute LongTask() parallel to the waitThread
System.Threading.Thread longTaskThread = new System.Threading.Thread(LongTask);
longTaskThread.Start();
}
// put the code of your task that you want to execute in the background in that method
private void LongTask()
{
// loop to represent a long task
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
}
// the "long task" inside the method finished to execute - dispose the wait clock from the GUI
panel1.Invoke(new Action(waitClock.Dispose));
// promt to screen
label1.Invoke(new Action(NotifyTaskHasFinished));
}
private void LoadWaitClock()
{
// use action delegate to update GUI changes from another thread
panel1.Invoke(new Action(AddClock));
}
private void AddClock()
{
// configure and initilize the clock
waitClock = new WaitClock(120, 120, "Loading...");
waitClock.ClockBackGroundColor = Color.White;
waitClock.FontColor = Color.Black;
waitClock.Clock.Location = new Point(5, 5);
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular);
waitClock.SetArrayColors(new Color[] { Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204) });
waitClock.OuterCircleWeight = 8;
waitClock.InnerCircleWeight = 5;
waitClock.Create(true);
this.panel1.Controls.Add(waitClock.Clock);
}
private void NotifyTaskHasFinished()
{
label1.Text = "LongTask() method has finished";
}
}
}
Пример кода Visual Basic.NET с комментариями:
' **************************************************************************
' * AUTHOR: Jonathan Applebaum *
' * DESCRIPTION: An example that describes how To use WaitClock Object *
' * from another thread in order to execute a long task in the beckground *
' * DATE: 06/01/2017 *
' * ************************************************************************
Imports BusinessClocks.ExecutiveClocks
Public Class Form1
Private waitClock As WaitClock
Private Sub Form1_Load_1(sender As Object, e As EventArgs) Handles MyBase.Load
Dim waitThread As System.Threading.Thread = New System.Threading.Thread(AddressOf LoadWaitClock)
waitThread.Start()
Dim longTaskThread As System.Threading.Thread = New System.Threading.Thread(AddressOf LongTask)
longTaskThread.Start()
End Sub
Private Sub LongTask()
For i As Integer = 0 To 9
System.Threading.Thread.Sleep(1000)
Next
Panel1.Invoke(New Action(AddressOf waitClock.Dispose))
Label1.Invoke(New Action(AddressOf NotifyTaskHasFinished))
End Sub
Private Sub LoadWaitClock()
Panel1.Invoke(New Action(AddressOf AddClock))
End Sub
Private Sub AddClock()
waitClock = New WaitClock(120, 120, "Loading...")
waitClock.ClockBackGroundColor = Color.White
waitClock.FontColor = Color.Black
waitClock.Clock.Location = New Point(5, 5)
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular)
waitClock.SetArrayColors(New Color() {Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204)})
waitClock.OuterCircleWeight = 8
waitClock.InnerCircleWeight = 5
waitClock.Create(True)
Me.Panel1.Controls.Add(waitClock.Clock)
End Sub
Private Sub NotifyTaskHasFinished()
Label1.Text = "LongTask() method has finished"
End Sub
End Class