تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف يمكن عمل شريط تقدم مثل هذا
#1
Photo 
السلام عليكم ورحمة الله
كيف يمكنني تصميم شريط تقدم نفس هذا بالصورة المرفقة


الملفات المرفقة صورة/صور
   
الرد }}}}
تم الشكر بواسطة:
#2
الكود أدناه عبارة عن Progress Indicator بسيط جدا و إن شاء الله يفي بإحتياجاتك.

كيف تستخدم الكود من داخل مشروعك:

1- افتح مشروع جديد ثم أضف الكود التالي له

2- قم بعمل build ثم اضف الكونترول الي الفورم

كود :
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D

Namespace RiverNile

    '****************************************************************************************'
    ' Module Name:  RiverNile.Indicator
    ' Project:      ProgressIndicatorControl
    ' Copyright (c) RiverNile.Net.
    ' All other rights reserved. silverlight1212@yahoo.com
    ' The sample demonstrates how to buidl a simple progress indicator using backbufferd image
    '
    '
    ' This source is subject to the Public License.
    ' Follow my blog for future enhancement
    '
    '
    ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
    ' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
    ' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
    '****************************************************************************************'
    Public Class Indicator
        Inherits Control

        Private _value As Long
        Private _maximum As Long = 100

        Public Sub New()
            Me.Size = New Size(100, 100)
        End Sub

        Public Property Value() As Long
            Get
                Return _value
            End Get
            Set(value As Long)
                If value > _maximum Then value = _maximum
                _value = value
                Invalidate()
            End Set
        End Property

        Public Property Maximum As Long
            Get
                Return _maximum
            End Get
            Set(value As Long)
                If value < 1 Then value = 1
                _maximum = value
                Invalidate()
            End Set
        End Property

        ''' <summary>
        '''Not Applicaple, as buffered image will be handled by the code.
        ''' </summary>
        ''' <param name="pevent"></param>
        ''' <remarks></remarks>
        Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs)
            'MyBase.OnPaintBackground(pevent)
        End Sub

        Protected Overrides Sub OnPaint(e As PaintEventArgs)
            MyBase.OnPaint(e)

            BufferDrawing.DrawProgressIndicator(e.Graphics, Me.Width, Me.Height, ControlPaint.Dark(Me.BackColor), Me.BackColor, 2, Me._maximum, Me._value, Me.Font)
        End Sub

    End Class ' Indicator

    Public NotInheritable Class BufferDrawing

        Friend Shared Sub DrawProgressIndicator(gr As Graphics, imgWidth As Integer, _
                                     imgHeight As Integer, indicatorColor As Color, _
                                     indicatorBackcolor As Color, thick As Integer, _
                                     maxValue As Long, indicatorValue As Long, textFont As Font)


            Using bmp As New Bitmap(imgWidth, imgHeight)
                Using g As Graphics = Graphics.FromImage(bmp)
                    g.SmoothingMode = SmoothingMode.AntiAlias
                    g.SmoothingMode = SmoothingMode.HighQuality
                    g.Clear(indicatorBackcolor)

                    Using sb As New SolidBrush(indicatorColor)
                        Using indicatorPen As New Pen(sb, thick)
                            indicatorPen.StartCap = LineCap.Round
                            indicatorPen.EndCap = LineCap.Round
                            g.DrawArc(indicatorPen, CInt(thick / 2), CInt(thick / 2), imgWidth - thick - 1, imgHeight - thick - 1, 180, CInt((360 / maxValue) * indicatorValue))
                        End Using
                    End Using

                    Dim indicatorString As SizeF = g.MeasureString(CStr(CInt((100 / maxValue) * indicatorValue)), textFont)
                    g.DrawString(CStr(CInt((100 / maxValue) * indicatorValue)), textFont, Brushes.Black, CInt(imgWidth / 2 - indicatorString.Width / 2), CInt(imgHeight / 2 - indicatorString.Height / 2))
                    gr.DrawImage(bmp, 0, 0)
                End Using
            End Using

        End Sub

    End Class ' BufferDrawing

End Namespace ' RiverNile
3- اضف Timer الي الفورم ثم اكتب الكود بالشكل التالي

كود :
Public Class Form1
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Indicator1.Value += 1
        Indicator1.Invalidate()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
        Timer1.Start()
    End Sub

End Class
الرد }}}}
تم الشكر بواسطة: الشاكي لله , kslawy , Sajad , ali.alfoly , aftfm , king2512010
#3
لا يشترط ان يكون كل شئ اوبجكت او كنترول
التحايل في البرمجة اهم من البرمجة
ضع احدي هذه الصور وضع فوقها بنل به النسبة المؤية








اذا كنت تريد الصورة الخاصة بك تحديدا يمكن البحث عنها
الرد }}}}
تم الشكر بواسطة: Ali Wisam , king2512010 , Sajad
#4
(13-05-14, 04:46 PM)ali.alfoly كتب : لا يشترط ان يكون كل شئ اوبجكت او كنترول
التحايل في البرمجة اهم من البرمجة
ضع احدي هذه الصور وضع فوقها بنل به النسبة المؤية








اذا كنت تريد الصورة الخاصة بك تحديدا يمكن البحث عنها

ان كنت تريد High performance فالطريقة التي تستخدمها تثقل من عمل البرنامج وليست عملية .. استخدام الرسم احسن
الرد }}}}
تم الشكر بواسطة: VB_Local
#5
إقتباس :لا يشترط ان يكون كل شئ اوبجكت او كنترول
التحايل في البرمجة اهم من البرمجة
ضع احدي هذه الصور وضع فوقها بنل به النسبة المؤية

عفوا .....أخي الفاضل .......أختلف معك في موضوع أن التحايل في البرمجة أهم من البرمجة.
لا يوجد تحايل إطلاقا. الأمر عبارة عن ماذا تريد و كيف تريد أن تفعله؟.

و لدينا في مصر...مثلا شعبيا يقول.....كل شيخ و له طريقة...و المقصد هنا ..أن كل مبرمج و له أسلوبه

تقبل تحياتي
الرد }}}}
تم الشكر بواسطة: ali.alfoly , Sajad , مالكـ
#6
اخي محمد ما الدليل علي انها تثقل عمل البرنامج

اخي silverlight كلام جيد جدا ولا خلاف اصلا بين كلامي وكلامك انا فقط احببت ان اقول بدل ما اضيع وقت في صناعة اداة جلب الصورة من النت اسهل وكما قلت كل واحد له طريقة المهم ان نصل الي المطلوب
الرد }}}}
تم الشكر بواسطة: VB_Local
#7
اخي العزيز ali.alfoly

ممكن توضح اين اضع الكود الأول هل اضعة في Module ام في نفس الفورم
وما هي فائدة عمل puild

وهل احتاج الي صور واين اضعها
الرد }}}}
تم الشكر بواسطة:
#8
(14-05-14, 01:21 AM)ali.alfoly كتب : اخي محمد ما الدليل علي انها تثقل عمل البرنامج

اخي silverlight كلام جيد جدا ولا خلاف اصلا بين كلامي وكلامك انا فقط احببت ان اقول بدل ما اضيع وقت في صناعة اداة جلب الصورة من النت اسهل وكما قلت كل واحد له طريقة المهم ان نصل الي المطلوب

ههه والله ساعات احسك انك ماصار لك اسبوع ويا الدوت نت

طبيعي كثرة المكونات الموروثة من System.ComponentModel تزيد من ثقل البرنامج سواء عند التشغيل او عند استعمال البرنامج (لان استهلاك الرام = بطئ ااستجاب التطبيقات)

تبي مقارنة بالارقام بين كودك وكود لاخ silverlight ؟؟



المقارنة بين استعمال الرام (Memory Usage) :-







قد يبدو الفرق صغير فقط 100 كيلو بايت زيادة ، لكني لازلت لا اشجع على استخدام الpicture box كثيرا ، يعني انك تنشر 20 من picture box مع بانل + تايمر ، هذا بخلي برنامجك يزحف ..


بالنسبة لي لا احب ان اتحايل في البرمجة

احب كلشي يكون في موضعه

يعني ايام زمان ايام ماكنت ابرمج بلا حواس ، كنت استعمل الملفات النصية كقواعد بيانات
والسخيف في الموضوع ان كنت منظم الملفات على شكل ملفات xml


تدري كيف كنت اتعامل مع الملفات ؟؟؟

كنت اتعامل معاهم باطريقة التعامل مع المستندات العادية string.spilt ، filestream ، string.remove ، string.replace) والخرابيط هذي

تخيل ، في احد يستخدم دوال string مع مستندات xml !!!!

اتذكر كانت الاكواد طويييلة وكانت تأخذ وقت في التنفيذ ولكن كانت تعمل في النهاية


لكن الحين فهمت على الدنيا وصرت استخدم xmldocument , xmwriter وكل الكائنات الحلوة الي في سطرين تخليك تتعامل مع ملف xml وعناصره مثل الباشا


يعني كانت طريقتين تؤديان نفس الغرض الاولى تافهة وطويلة وتاخذ وقت اطول لكن كنت اجيد استخدام دوال string بشكل جيد جدا

ولكن لم اكن اجيد او اعرف ان هناك كائنات مباشرة تتعامل مع xmldocument فسويت حيلة دوال (string) الي كل ما اذكرها اضحك على نفسي (انا كنت اتحايل في البرمجة ولا اتحايل على نفسي) ههه


نفس الشي فكر في التقنيات والطرق المتطورة ، حتي لو كانت الطريقة تحتاج منك دراسة او فهم ، لأن ذلك سيصب بمصلحتك بالتأكيد
الرد }}}}
تم الشكر بواسطة: مالكـ , king2512010 , VB_Local
#9
الأخ الفاضل الشاكي لله....مشكور قوي علي محهودك و وقتك جزاك الله كل خير

الأخ الفاضل علي الفولي

الفكرة و بشكل عام إنه و عند بناء Library مهما كان نوعها ....هنا انت تقوم ب توفير وقت المبرمج مستقبلا...أيضا هذا الاسلوب يساعدك أو يساعد من يأتي من بعدك من مبرمجين علي تطوير هذا النوع من المكتبات

و مثال علي ذلك:

الكونترول هنا يمكن ان تضيف له صفات كثيرة و ممكن Animation يكون من خلال الكونترول نفسه......و علي فكرة عملية الرسم كلها تحدث علي صورة........و هذا اسهل الاساليب لبناء هذا النوع من الكونترول.
هناك أساليب اخري و هي انه يمكنك ان ترسم بشكل مباشر علي سطح الكونترول لكن هذا يحتاج الي وقت أطول و كود أكبر قليلا

كما قلت سابقا هي وجهات نظر و لك أن تفعل ما تراه صائبا لك.

أخي الفاضل اسمح لي اقول تعليق اخير:

نحن هنا لسنا ف سباق مع بعضنا البعض ...و ليس هدفنا ان نثبت من الأفضل.......بل نحن هنا جميعا لنتعلم من بعضنا البعض

و ربنا يوفقنا جميعا
الرد }}}}
تم الشكر بواسطة: VB_Local
#10
جزاك الله خيرا اخي محمد علي هذا المجهود في التوضيح

توضيح
لم اقل ان التحايل وضع الشئ في غير موضعه
فقط ابحث عن البساطة والسهولة
وما الفرق بين picture box و Control من ناحية الذاكرة
وقلت سابقا انا فضلت وضع الصورة علي ان اقوم ببناء كنترول جديد فقط ليس الا

معلش طول بالك معي
اريد ان اعرف ما هذه الاداة التي عملت بها المقارنة


الاخ الكريم silverlight
فعلا كما تفضلت بتوضيح بناء Library ولاكن اذا استدعي الامر ذلك
وبخصوص التعليق الاخر هههههه انا هنا اتعلم فقط انتم اصحاب الفضل وانا مدين لكم بالكثير والكثير
اسئل الله تعالي ان يجعل ذلك في موازين حسناتكم
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] هل يمكن الاستغناء عن التايمر واستخدام شئ بديل يكون افضل ؟ !! الماجيك مسعد 3 29 منذ 7 ساعة مضت
آخر رد: silverlight
  شريط تقدم مرتبط بزمن نسخ الملفات atefkhalf2004 1 43 أمس, 10:47 PM
آخر رد: adel27
  هل يمكن انشاء صفحة متصفح Mohamed20 2 132 20-11-16, 12:38 AM
آخر رد: myalsailamy
  كيف يمكن اضافة مجموعة حقول الي datagridview والتعديل عليها مباشرتا dark1459 2 68 15-11-16, 10:30 PM
آخر رد: السرور
  كيف يمكن عمل هذا الترتيب rabeh.ram 10 202 15-11-16, 03:11 AM
آخر رد: rabeh.ram
  [سؤال] هل يمكن عرض عناصر الكومبوبوكس عن طريق الكود ؟؟؟؟؟؟؟؟؟؟؟؟ thevirus 1 98 10-11-16, 06:25 PM
آخر رد: أبو عمر
  [VB.NET] سؤال كيف يمكن معرفة التغير في قاعدة البيانات وليد الزنتاني 2 110 10-11-16, 01:20 AM
آخر رد: وليد الزنتاني
  هل يمكن ان تتصل بقاعدة بيانات SQL من دون سيرفر اي اتصال مباشر مثل Access thevirus 4 110 09-11-16, 07:10 PM
آخر رد: thevirus
  كيف يمكن الذهاب لصف جديد فى الداتا جريد فيو walkady 0 67 06-11-16, 11:31 PM
آخر رد: walkady
  [اقتراح] يمكن ان اصنع لكم برنامج تريدونه احمد م. 14 2,444 28-10-16, 06:39 PM
آخر رد: sambro

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم