منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغات البرمجة الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=4)
+--- قسم : قسم البرمجة بتقنية WPF (http://vb4arb.com/vb/forumdisplay.php?fid=86)
+---- قسم : قسم دورات تقنية WPF (http://vb4arb.com/vb/forumdisplay.php?fid=87)
+---- الموضوع : [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart (/showthread.php?tid=19973)

الصفحات: 1 2


RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - الشاكي لله - 14-04-17

لفتة بسيطة اخوي شحادة ..

هذا الشارت لايسمى Pie ، لان الـ Pie حسب معلوماتي يكون بهذا الشكل :




RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - السندبااد - 14-04-17

فكرة كود الحذف الموجود في Draw فهمتها جيداً والحمد لله، وقد أجريت عليها عدة تجارب، وهذا الدرس لأهميته تابعته مراراً وطبقت جميع الحالات، والحمد لله لم أعد أواجه أي مشكلة وكل شيء إلى الآن واضح.


بالنسبة للفطيرة Pie كلامك في محله فيما يتعلق بالشكل، ولكن أظن أن الفكرة واحدة؛ فكلاهما يعطيانك نسبة محددة لجزء من المجموع العام، ولكن Pie تكون ممتلئة، كل جزء منها يشبه الفطيرة.

هذا كود تغيير لون أحد categories :
PHP كود :
        PieChart.categories.Item(0).ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("black"), Color)) 



RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - الشاكي لله - 14-04-17

(14-04-17, 11:58 AM)السندبااد كتب : فكرة كود الحذف الموجود في Draw فهمتها جيداً والحمد لله، وقد أجريت عليها عدة تجارب، وهذا الدرس لأهميته تابعته مراراً وطبقت جميع الحالات، والحمد لله لم أعد أواجه أي مشكلة وكل شيء إلى الآن واضح، ولكن يراودني سؤال حسب ردك: هل يمكن تغيير قيمة الـ Color لأحد الـ Categories فقط دون تغيير أي شيء آخر ؟


بالنسبة للفطيرة Pie كلامك في محله فيما يتعلق بالشكل، ولكن أظن أن الفكرة واحدة؛ فكلاهما يعطيانك نسبة محددة لجزء من المجموع العام، ولكن Pie تكون ممتلئة، كل جزء منها يشبه الفطيرة.

على العموم يمكن صناعة الـ PieChart بتغيير خاصية StrokeThickness ضمن الـ Style Smile

جربت تغييرها الى 125 ونجحت العملية ولكن الmargin بين الـ arcs يحتاج تعديل.  Big Grin

المهم ..

--

بالنسبة لسؤالك ، هل تقصد تغيير اللون في الران تايم ؟

فاذا كان كذلك ، انظر هذا الكود :

PHP كود :
 Private Sub button_Click(sender As ObjectAs RoutedEventArgsHandles button.Click
        Dim chart 
As DonutChart TryCast(CType(chartGeneralBorderGrid).Children.Cast(Of FrameworkElement)().Where(Function(aa.GetType() = GetType(DonutChart)).Single(), DonutChart)

 
       'حذف الكاتيغوريس
        PieChart.categories.Clear()
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Visits", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF60C6CF"), Color)), .PercentA = 40})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Members", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF989CFF"), Color)), .PercentA = 25})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Sales", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF59C5A0"), Color)), .PercentA = 23})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Lose", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FFF35958"), Color)), .PercentA = 12})


    End Sub

    Private Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click

        '
تغيير لون الكاتيغوري لووس
        PieChart
.categories.Where(Function(cc.NameA "Lose").Single().ColorA = New SolidColorBrush(Colors.Yellow)

 
   End Sub 


موفق  Heart


RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - الشاكي لله - 14-04-17

(14-04-17, 11:58 AM)السندبااد كتب :
هذا كود تغيير لون أحد categories :
PHP كود :
        PieChart.categories.Item(0).ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("black"), Color)) 


ماشاء الله عليك ياغالي دوما تجيب على اسئلتك بنفسك وهذا شيئ ممتاز جدا Smile


ربما لم اذكر في الفيديو ولكن هذه قوة الـ Notification في هذه التقنية

فاحنا قمنا بالاشتقاق من INotifyPropertyChanged لتطبيق هذا المفهوم وهو اعلام الClasses الاخرى عند حصول اي تغيير في قيم تلك الخصائص

فالـ BindingList والحدث ListChanged لن ينطلق الا بوجود INotifyPropertyChanged في عناصرها   Rolleyes


جمعة مباركة اخوي شحادة انت والمتابعين Smile


RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - السندبااد - 14-04-17

أكرمك الله وربنا يبارك بكل أيامك
كما تفضلت الأداة مرنة جداً، وقد قمت بتغيير قيمة StrokeThickness  إلى 125 والنتيجة كانت رائعة:
[attachment=13876]


وبالنسبة لتغيير اللون هنالك طريقتان:
PHP كود :
        'تغيير لون حسب الرقم
        PieChart.categories.Item(0).ColorA = New SolidColorBrush(Colors.Black)

        '
تغيير لون حسب الاسم
        PieChart
.categories.Where(Function(cc.NameA "Lose").Single().ColorA = New SolidColorBrush(Colors.Yellow



RE: [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart - السندبااد - 15-04-17

أخي الحبيب الشاكي لله لاحظت بق بسيط في الأداة يحدث في الحالة التالية التي سأوضحها لك:
عندك أربعة أصناف هي:
Visits - Members - Sales - Lose
لنفرض إحدى الحالات التالية:
الحالة الأولى: إحدى الأصناف السابقة Percent كان = صفر.
Visits =40
Members =30
Sales =10
Lose = 0

الحالة الثانية: لنفرض أن هذه الأصناف مربوطة نسبها في قاعدة البيانات وفجأة صنف ما أو أكثر من صنف أصبحت نسبته صفر.
مثلاً هكذا:
Visits =40
Members =30
Sales =10
Lose = 0

أو هكذا:
Visits =40
Members =60
Sales =0
Lose = 0

أو هكذا:
Visits =100
Members =0
Sales =0
Lose = 0

في الحالتين السابقتين ستتشوه الأداة وستظهر بشكل مشوه
[attachment=13889]

ما رأيك بهذا الشرط الذي أضفناه للدالة Draw ؟
بحيث يتم التنفيذ إذا كانت قيمة PercentA لا تساوي الصفر
أنا وجدت أنه يحل مشكلة البق:
   
PHP كود :
Private Sub Drow()
        currentAngle 0
        root
.Children.Cast(Of UIElement)().Where(Function(ee.GetType() = GetType(Arc)).ToList().ForEach(Sub(eroot.Children.Remove(e))
        For As Integer 0 To categories.Count 1
            Dim arc 
As DonutArc = New DonutArc(categories(i))
            arc.ArcElment.Stroke arc.ArcCatogry.ColorA
            arc
.ArcElment.StartAngle currentAngle

            
If arc.ArcCatogry.PercentA <> 0 Then
                arc
.ArcElment.EndAngle = (arc.ArcElment.StartAngle + (arc.ArcCatogry.PercentA 100) * 360) - 1
                root
.Children.Add(arc.ArcElment)
                currentAngle arc.ArcElment.EndAngle 1
            End 
If
        Next
    End Sub