مرحبًا بك في الرسوم البيانية على مدار الساعة لـ Winforms، وهي مكتبة أكواد برمجية مفتوحة المصدر.
الغرض الرئيسي من هذا المشروع هو توفير كائنات رسومية "تشبه الساعة" لمطوري C# وVB.NET Winforms. المكتبة مصممة بشكل أساسي للتطبيقات التي تقدم بيانات محسوبة فيما يتعلق بالأداء (لوحة تحكم مبيعات الشركة على سبيل المثال).
يحتوي كل كائن على مدار الساعة على مجموعة متنوعة من الخصائص المستخدمة للتخصيص، ويمكن أن تتضمن الساعات رسومًا متحركة عند تحديثها أو تحميلها.
قم بتنزيل أحدث إصدار من 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 في الوقت الحالي) ترث goalClock
ملكيات:
Clock:
مثيل الكائن الرسومي الذي يمثل الساعة، والذي تم تهيئته بعد استدعاء Create()
.ClockWidth
: الحصول على عرض الساعة أو ضبطه.ClockHeight
: الحصول على أو ضبط ارتفاع الساعة.xPos
و Ypos
: يحصل على موضع x أو y للمستطيل الذي يحتوي على الساعة.ClockBackGroundColor
: الحصول على لون خلفية الساعة أو تعيينه.FontColor
: الحصول على أو تعيين لون خط النص الذي يصف النسبة المئوية لـ PercentOfGoals
.ClockFont
: الحصول على أو تعيين خط النص الذي يصف النسبة المئوية لـ PercentOfGoals. يرجى الملاحظة:font
لأن مُحصل هذه الخاصية يستدعي وظيفة LoadFont()
لحساب حجم الخط المناسب ونمطه بالنسبة لحجم الساعة باستخدام النظام الداخلي.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()
: يُرجع حجم الخط المناسب ونمطه بالنسبة لحجم الساعة باستخدام الخوارزمية الداخلية.LoadFont()
لإعادة ضبط الخط.Dispose()
: يتم تنفيذ الأسلوب من واجهة IDisposable (في تجميع mscorlib.dll)، عندما يتم التخلص من كائن الساعة المستدعى وسيتم تحرير كافة كائنات GDI من الذاكرة.ملكيات:
ClockPanel
(حقل): يُستخدم للاحتواء داخل كائن Clock
إذا كان شريط النص مطلوبًا. هام: عندما يكون BaseBar = True
، سيتم استضافة كائن Clock
داخل ClockPanel
لتقديم شريط نص الأداء أسفل الساعة.BaseBar = True
فاستخدم عنصر التحكم هذا (وليس خاصية الساعة) للحصول على الساعة باستخدام شريط النص.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
: الحصول على أو تعيين لون الخط لعلامات الشريط القصوى (100%) والحد الأدنى (0%).
BarValueDigitsBackColor
: الحصول على أو تعيين لون الخلفية لعلامات الشريط القصوى (100%) والحد الأدنى (0%).
BarValueDigitsFont
: الحصول على أو تعيين خط الحد الأقصى (100%) والحد الأدنى (0%) للشريط.
ملكيات:
waitText
: الحصول على النص أو تعيينه في منتصف الساعة. طُرق:
SetArrayColors(ByVal arrayOfColors() As Color)
: يضبط سلسلة من الألوان التي ستتغير بعد كل دوران 360 درجة. تتم كتابة .dll في VB.NET.
يمكنك أيضًا استخدامه مع مشاريع C#.
تمت إضافة مثالين متطابقين، لـ C# وVB.NET.
هذا مشروع مفتوح المصدر: كود المصدر
نحن نستخدم SemVer للإصدار.
تحتوي الفئة الأساسية لـ goalClock على حقل 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