オープン ソース コード ライブラリであるグラフィック winforms クロック チャートへようこそ。
このプロジェクトの主な目的は、C# および VB.NET Winforms 開発者にグラフィックの「時計のような」オブジェクトを提供することです。このライブラリは主に、パフォーマンスに関する計算データを表示するアプリケーション (会社の売上ダッシュボードなど) 向けに設計されています。
各クロック オブジェクトにはカスタマイズに使用されるさまざまなプロパティがあり、クロックには更新時またはロード時のアニメーションを含めることができます。
最新バージョンの BusinessClocks.dll をローカル コンピューターにダウンロードします。
最新バージョンは、リポジトリの master ブランチでいつでも見つけることができます。
Visual Studio を使用して、.dll を winforms プロジェクトにロードします。
DLL をプロジェクトにロードする手順:
Form1
ファイルの先頭にある名前空間BusinessClocks.ExecutiveClocks
に、 Using
(C#) ステートメントまたはImports
(VB.NET) ステートメントを追加します。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 Create()
が呼び出された後に初期化されます。ClockWidth
: クロック幅を取得または設定します。ClockHeight
: クロックの高さを取得または設定します。xPos
およびYpos
: 時計を含む四角形の x または y 位置を取得します。ClockBackGroundColor
: 時計の背景色を取得または設定します。FontColor
: PercentOfGoals
割合を説明するテキストのフォントの色を取得または設定します。ClockFont
: PercentOfGoals のパーセンテージを説明するテキストのフォントを取得または設定します。ご注意ください:font
プロパティを変更しないことをお勧めします。これは、このプロパティのゲッターが、内部 elgoriitem を使用してクロック サイズに関連した適切なフォント サイズとスタイルを計算するためにLoadFont()
関数を呼び出しているためです。LoadFont()
を呼び出すことができます。InnerCircleColor
: 内側の円弧の色を取得または設定します。InnerCircleWeight
: 内側の円弧のピクセルの重み (幅) を取得または設定します。OuterCircleColor
: 外側の円弧の色を取得または設定します。OuterCircleWeight
: 外側の円弧のピクセルの重み (幅) を取得または設定します。PercentOfGoals
: クロック値を取得または設定します。たとえば、0.1Fの値 = 10%、0.5Fの値 = 50%、1.1Fの値 = 110%など...GoalsPercentDecimalValue
: クロックの Deciaml 値を取得します。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()
: 内部 elgoriitem を使用して、クロック サイズに相対した適切なフォント サイズとスタイルを返します。LoadFont()
を呼び出すことができます。Dispose()
: このメソッドは IDisposable インターフェイス (mscorlib.dll アセンブリ内) から実装され、呼び出されるとクロック オブジェクトが破棄され、すべての GDI オブジェクトがメモリから解放されます。プロパティ:
ClockPanel
(フィールド): テキスト バーが必要な場合、 Clock
オブジェクト内に含めるために使用します。重要: BaseBar = True
の場合、 Clock
オブジェクトはClockPanel
内でホストされ、時計の下にパフォーマンス テキストのバーが表示されます。BaseBar = True
の場合、(Clock プロパティではなく) このコントロールを使用して、テキスト バーで時計を取得します。BaseBar = False
でこのプロパティを使用しない場合、初期化されないため、結果はNullReferenceException
になります (ユーザー lordofscripts によって開かれた issue6 を読んでください: #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 の 2 つの同一の例が追加されています。
これはオープンソース プロジェクトです: ソース コード
バージョン管理には 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