Bienvenido a gráficos de reloj de winforms gráficos, una biblioteca de código abierto.
El objetivo principal de este proyecto es proporcionar objetos gráficos "parecidos a un reloj" para desarrolladores de C# y VB.NET Winforms. La biblioteca está diseñada principalmente para aplicaciones que presentan datos calculados con respecto al rendimiento (por ejemplo, el panel de ventas de la empresa).
Cada objeto de reloj tiene una variedad de propiedades, que se utilizan para personalización, los relojes pueden incluir animación cuando se actualizan o cargan.
Descargue la última versión de BusinessClocks.dll a su computadora local.
Siempre puedes encontrar la última versión en la rama maestra del repositorio.
Cargue el .dll en su proyecto winforms usando Visual Studio.
Instrucciones para cargar dll en su proyecto:
Using
(C#) o Imports
(VB.NET) al espacio de nombres BusinessClocks.ExecutiveClocks
en la parte superior del archivo Form1
.Form1
.Ejemplo de prueba de 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);
}
}
}
Ejemplo de prueba de 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
Nota: Todos los relojes (WaitClock y CarClock por ahora) heredan GoalsClock
Propiedades:
Clock:
Instancia del objeto gráfico que representa el reloj, inicializado después de llamar Create()
.ClockWidth
: Obtiene o establece el ancho del reloj.ClockHeight
: Obtiene o establece la altura del reloj.xPos
and Ypos
: Obtiene la posición xoy del rectángulo que contiene el reloj.ClockBackGroundColor
: Obtiene o establece el color de fondo del reloj.FontColor
: Obtiene o establece el color de fuente del texto que describe el porcentaje PercentOfGoals
.ClockFont
: Obtiene o establece la fuente del texto que describe el porcentaje PercentOfGoals. Tenga en cuenta:font
porque el captador de esta propiedad llama a la función LoadFont()
para calcular el tamaño y estilo de fuente adecuados en relación con el tamaño del reloj utilizando elgoritem interno.LoadFont()
para restablecer la fuente.InnerCircleColor
: Obtiene o establece el color del arco interior.InnerCircleWeight
: Obtiene o establece el peso de píxel (ancho) del arco interior.OuterCircleColor
: Obtiene o establece el color del arco exterior.OuterCircleWeight
: Obtiene o establece el peso de píxel (ancho) del arco exterior.PercentOfGoals
: Obtiene o establece el valor del reloj. por ejemplo, valor de 0,1F = 10%, valor de 0,5F = 50%, valor de 1,1F = 110%, etc.GoalsPercentDecimalValue
: Obtiene el valor deciaml del reloj.Animate
(campo): Obtiene o establece un valor que indica si la animación se activará o no.AnimationLength
: Obtiene o establece la velocidad de la animación (milisecs) según la enumeración AnimationLength: SuperFast = 1, Fast = 4, ModerateFast = 8, Moderate = 15, ModerateSlow = 28, Slow = 50, SuperSlow = 80.TimerInterval
: Obtiene o establece el intervalo de ticks para el temporizador interno. El valor recomendado es 4 (predeterminado) para acelerar el tiempo de actualización, utilice un valor más bajo.Métodos:
Create(ByVal AnimateClock As Boolean)
: la inicialización del objeto de reloj debe llamarse después de configurar todas las propiedades (los desarrolladores deben tener en cuenta: este método es reemplazable/virtual).RefreshClock(ByVal AnimateClock As Boolean)
: actualiza y vuelve a dibujar los gráficos del objeto de reloj; llame a este método después de cambiar las propiedades (PercentOfGoals, InnerCircleColor, por ejemplo). La mayoría de las propiedades del reloj llamarán a este método cuando se cambie su valor. (los desarrolladores deben tener en cuenta: este método es anulable/virtual).LoadFont()
: Devuelve el tamaño y estilo de fuente adecuados en relación con el tamaño del reloj utilizando elgoritem interno.LoadFont()
para restablecer la fuente.Dispose()
: el método se implementa desde la interfaz IDisposable (en el ensamblado mscorlib.dll), cuando se llama, el objeto de reloj se eliminará y todos los objetos GDI se liberarán de la memoria.Propiedades:
ClockPanel
(campo): se utiliza para contener dentro del objeto Clock
si se requiere una barra de texto. Importante: Cuando BaseBar = True
el objeto Clock
se alojará dentro de ClockPanel
para presentar una barra de texto de rendimiento debajo del reloj.BaseBar = True
use este control (y no la propiedad Clock) para obtener el reloj con la barra de texto.BaseBar = False
nunca usa esta propiedad, el resultado será NullReferenceException
porque no se inicializará (lea el problema 6 que abrió el usuario lordofscripts: #6). LowPerformance
: Obtiene o establece la indicación de bajo rendimiento, esta propiedad está vinculada a la propiedad LowPerFormanceColor y su valor establecerá el área gráfica del reloj de bajo rendimiento con el color LowPerFormanceColor .
MediumPerformance
: Obtiene o establece la indicación de rendimiento Medio, esta propiedad está vinculada a la propiedad MediumPerFormanceColor y su valor establecerá el área gráfica del reloj de rendimiento Medio con el color MediumPerFormanceColor .
HighPerformance
: Obtiene o establece la indicación de alto rendimiento, esta propiedad está vinculada a la propiedad HighPerFormanceColor y su valor establecerá el área gráfica del reloj de alto rendimiento con el color HighPerFormanceColor .
HighPerFormanceColor
: Obtiene o establece el área gráfica de alto rendimiento en el reloj con el color seleccionado (vinculado a la propiedad HighPerFormance
).
MediumPerFormanceColor
: Obtiene o establece el área gráfica de rendimiento medio en el reloj con el color seleccionado (vinculado a la propiedad MediumPerformance
).
LowPerFormanceColor
: Obtiene o establece el área gráfica de bajo rendimiento en el reloj con el color seleccionado (vinculado a la propiedad LowPerformance
).
NeedleBaseColor
: Obtiene o establece el color de fondo de la base de la aguja (manecilla del reloj).
NeedleBaseWeight
: Obtiene o establece el peso (grosor) de píxeles de la base de la aguja (manecilla del reloj).
NeedleOuterColor
: Obtiene o establece el color de fondo del área exterior de la aguja (manecilla del reloj).
NeedleOuterWeight
: Obtiene o establece el peso de píxel (grosor) del área exterior de la aguja (manecilla del reloj).
NeedleInnerColor
: Obtiene o establece el color de fondo del área interior de la aguja (manecilla del reloj).
NeedleInnerWeight
: Obtiene o establece el peso de píxel (grosor) del área interna de la aguja (manecilla del reloj).
ShowInnerCutForPerformance
: Obtiene o establece un valor que indica si el corte interior visual (barra oblicua) que representa el rendimiento se dibujará en el medio del borde del reloj.
InnerCutPreformanceColor
: Obtiene o establece el color del corte interior visual (barra) que representa el rendimiento en el medio del borde del reloj.
InnerCutPerformanceWeight
: Obtiene o establece el peso (grosor) del corte interior (barra) que representa el rendimiento en el medio del borde del reloj.
BarFont
: Obtiene o establece la fuente del texto que describe el porcentaje PercentOfGoals.
BarBackColor
: Obtiene o establece el color de fondo de la barra de rendimiento.
BarForeColor
: Obtiene o establece el color de fuente de la barra de rendimiento.
BarValueDigitsForeColor
: Obtiene o establece el color de fuente de las etiquetas max(100%) y min(0%) de la barra.
BarValueDigitsBackColor
: Obtiene o establece el color de fondo de las etiquetas max(100%) y min(0%) de la barra.
BarValueDigitsFont
: Obtiene o establece la fuente de las etiquetas max(100%) y min(0%) de la barra.
Propiedades:
waitText
: Obtiene o establece el texto en la mitad del reloj. Métodos:
SetArrayColors(ByVal arrayOfColors() As Color)
: establece una serie de colores que cambiarán después de cada rotación de 360 grados. El .dll está escrito en VB.NET.
También puedes usarlo con proyectos de C#.
Se agregan dos ejemplos idénticos, para C# y para VB.NET.
Este es un proyecto de código abierto: Código fuente
Usamos SemVer para el control de versiones.
La clase base GoalsClock tiene un campo constante Version
: úselo para verificar el número de versión de la biblioteca.
Este tramo aún está en construcción, en un corto período de tiempo.
Aquí encontrará explicaciones y ejemplos para desarrolladores que quieran participar en el proyecto y escribir sus propios gráficos de reloj.
WaitClock
mientras la aplicación ejecuta una tarea larga en segundo plano mediante subprocesosEjemplo de código C# con comentarios:
/*
**************************************************************************
* 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";
}
}
}
Ejemplo de código de Visual Basic.NET con comentarios:
' **************************************************************************
' * 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