الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أداة رسم بيانى من تصميمى

بدأه أبو الجود في 25 مارس 2009 · 7 رد · 1,826 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

أخوانى الأعزاء

اليوم اقدم لكم أداة من تصميمى لعمل الرسوم البيانية

الأداة بسيطة واستخدامها بسيط عسى تنفع من يريد استخدامها ( الأداة تحت التطوير وان شاء الله أوافيكم بكل جديد فيها)

لإستخدام الأداة هناك خاصية مهمه وهى Percent وهى لإختيار مقياس الرسم

ولإضافة عمود الى الرسم عن طريق addbar method

(اللون, المكان على المحور السينى, القيمة, العنوان)Chart1.addbar

وستجدون الأداة مع مثال فى المرفقات وأتمنى انها تفيدكم واى استفسار انا تحت امركم

نسألكم الدعاء

chart.rar

WindowsApplication1.rar

أقلب الغريب كقلب أخيك ؟! أعيناه تشبه عينا أخيك ؟؟!! fb.pngtwitter.png

#2

جزاك الله خيراً

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

#3

مرحباً أخي الكريم,

أولاً - مشكور على هذا العمل الجيد,

ثانياً - كنصيحة ( استخدم الحدث Paint لرسم المخطط ) لأنه ومن المعروف أن كل مايرسم بشكل سطحي أي بإستخدام Graphics تابعة لـ Control ما سوف يمسح مكان تحديث ماقبلها, أقصد أنه عند ( إعادة تحجيم المخطط أو الـ( Control, Form ) الحاوي لهذا المخطط سيتم مسح الأجزاء التي تمت تحديثها من المخطط ) أو يمكنك استخدام Bitmap ومن ثم الرسم عليها, وأيضاً عليك أن تغطي جميع التحديثات التي ستطرأ على ذلك المخطط أي عند تغير قيمة ما, عليك إعادة رسم المخطط على تلك الـ Bitmap, تداخل أفكار ؟ !! عذراً, سأحول إنشاء مشروع بسيط يتناول ما أتكلم عنه في أقرب وقت,

الله يعطيك العافية

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#4

السلام عليكــم ورحمـة الله وبركاتــه ،،

مشكور اخى وجزاك الله خير

سيتم عمل الازم لما تقدم

وبالنسبة لعملية التحديث فيوجد ميثود اسمها clear لعمل refresh للأداة ومسح بياناتها

ومرة أخرى اشكرك على تعليقك المفيد جدا

أقلب الغريب كقلب أخيك ؟! أعيناه تشبه عينا أخيك ؟؟!! fb.pngtwitter.png

#5

وجزاك كل خير

أقلب الغريب كقلب أخيك ؟! أعيناه تشبه عينا أخيك ؟؟!! fb.pngtwitter.png

#6

لا شكر على واجب أتمنى لك المزيد من التقدم والإبداع,

أخي الكريم قمت بإنشاء مشروع بسيط, غير مكتمل أي أنه غير متقن بشكل كامل وذلك لعدم دعمه إضافة مايدعى بالـ Bar في وقت التصميم, سأقوم أيضاً في أقرب وقت بتدعيم هذا التحكم ليناسب إحتياجات كل منكم, المشروع المرفق يحوي نموذج للتجربة و صف يرث الـ UserControl الذي سميته BVSChart يمكنك تعديله و تطويره كما يحلو لك, وإذا أردت الإستفسار عن شيء ما, رجاءً لاتتردد في السؤال عنه,

post-178281-1238090681_thumb.jpg

بالتوفيق

BVS_Chart.rar

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 26 مارس 2009 في 21:50

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#7

مرحباً مرة أخرى :P

قمت بإضافة بعض الخصائص كالـ( البعد بين كل شريط, شفافية الأشرطة كلها ), تصميم إطار صغير يعرض النسب من الـ( 0 ) إلى ( 100 ) بشكل متتالي بمقدار زيادة ( 5 ), وأيضاً قمت بصياغة العملية DrawCube لترسمه بشكل كامل اي على هيئة ثلاثية الأبعاد, كل شيء مبين في الصورة التالية :

post-178281-1238103206_thumb.jpg

أصبح لديك كل ماتحتاج إلى تطوير فكرتك, أتمنى لك التوفيق في ماتقدمه للأخوة الأعضاء

BVS_Chart.rar

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#8

أخي الفاضل

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

عند تغيير أبعاد الفورم أو الكونترول بشكل عام يمكن استخدام إما Refresh أو إما Invalidate وذلك من خلال الحدث Resize أو من الممكن أن يتم ذلك عن طريق عمل Overrides للحدث OnResize وبذلك أنت هنا ستقوم بإجبار الكونترول أو الفورم علي رسم نفسه مرة ثانية

عموما انا هدفي من المداخلة توضيح شئ واحد وهو انه هناك كلاس مهم يمكن استخدامه مع Graphics Class وهو الكلاس GraphicsState Class وغالبا ما يستخدم أو يتم تمرير هذا الكلاس الي الكلاس Graphics عن طريق Grahphics .Restore لكي نستطيع حفظ ما رسمناه أثناء عمل Transformation للرسم وحتي لا يحدث تغير في الرسم السابق الذي رسمناه علي الكونترول او علي الفورم

أي أنك تستطيع ان ترسم علي الكونترول أو علي الفورم بدون أن يتغير الرسم أثناء إعادة تغيير أبعاد الفورم أو الكونترول

والكود التالي يوضح الفكرة بشكل عام



Public Class Form1

Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

Dim m_matrix As New Matrix(1, 0, 0, -1, 0, PictureBox1.ClientSize.Height)
e.Graphics.Transform = m_matrix

Dim lgbBrush As New LinearGradientBrush(New Rectangle(0, 0, PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height), Color.Silver, Color.Azure, 90, True)

e.Graphics.FillRectangle(lgbBrush, New Rectangle(0, 0, PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height))


'رسم المحور الأفقي و المحور الراسي

e.Graphics.DrawLine(Pens.Black, 50, 30, 350, 30)
e.Graphics.DrawLine(Pens.Black, 50, 30, 50, 330)

' رسم الأبعاد علي المحور الأفقي
For x As Integer = 0 To 10
e.Graphics.DrawLine(Pens.Green, 45, 30 + (30 * x), 50, 30 + (30 * x))
e.Graphics.DrawLine(Pens.Green, 50 + (30 * x), 25, 50 + (30 * x), 30)
Next

Dim m_pens As Pen() = New Pen() {Pens.Red, Pens.Blue, Pens.Green, Pens.Red}
Dim m_GraphicsSave As GraphicsState = e.Graphics.Save()

Dim m_MatrixCloned As Matrix = m_matrix.Clone()

m_MatrixCloned.Translate(50, 30)

e.Graphics.Transform = m_MatrixCloned

'-----------------------------------------------------------------------

' رسم أي شي تريده
Dim employ1 As Integer = 300
Dim employ1Brush As New SolidBrush(Color.FromArgb(150, Color.Red))

Dim employ2 As Integer = 300 / 2
Dim employ2Brush As New SolidBrush(Color.FromArgb(150, Color.Blue))

Dim employ3 As Integer = 300 / 4
Dim employ3Brush As New SolidBrush(Color.FromArgb(150, Color.Green))

Dim employ4 As Integer = 200
Dim employ4Brush As New SolidBrush(Color.FromArgb(150, Color.Yellow))

Dim employ5 As Integer = 250
Dim employ5Brush As New SolidBrush(Color.FromArgb(150, Color.Purple))

Dim employ6 As Integer = 150
Dim employ6Brush As New SolidBrush(Color.FromArgb(150, Color.Maroon))

Dim employ7 As Integer = 275
Dim employ7Brush As New SolidBrush(Color.FromArgb(150, Color.Khaki))


e.Graphics.DrawRectangle(Pens.Black, 25, 0, 10, employ1)
e.Graphics.FillRectangle(employ1Brush, New Rectangle(25, 0, 10, employ1))

e.Graphics.DrawRectangle(Pens.Black, 55, 0, 10, employ2)
e.Graphics.FillRectangle(employ2Brush, New Rectangle(55, 0, 10, employ2))

e.Graphics.DrawRectangle(Pens.Black, 85, 0, 10, employ3)
e.Graphics.FillRectangle(employ3Brush, New Rectangle(85, 0, 10, employ3))

e.Graphics.DrawRectangle(Pens.Black, 115, 0, 10, employ4)
e.Graphics.FillRectangle(employ4Brush, New Rectangle(115, 0, 10, employ4))

e.Graphics.DrawRectangle(Pens.Black, 145, 0, 10, employ5)
e.Graphics.FillRectangle(employ5Brush, New Rectangle(145, 0, 10, employ5))

e.Graphics.DrawRectangle(Pens.Black, 175, 0, 10, employ6)
e.Graphics.FillRectangle(employ6Brush, New Rectangle(175, 0, 10, employ6))

e.Graphics.DrawRectangle(Pens.Black, 205, 0, 10, employ7)
e.Graphics.FillRectangle(employ7Brush, New Rectangle(205, 0, 10, employ7))

'-----------------------------------------------------------------------

e.Graphics.Restore(m_GraphicsSave)

'رسم التكست علي المحور الراسي
For i As Integer = 10 To 100 Step 10

m_GraphicsSave = e.Graphics.Save()
Dim m_MatrixOffsetY As New Matrix(1, 0, 0, -1, 25, 30 + (i / 10 * 30) + (Font.Height / 2))

m_MatrixCloned = m_matrix.Clone()
m_MatrixCloned.Multiply(m_MatrixOffsetY)

e.Graphics.Transform = m_MatrixCloned
e.Graphics.DrawString(i.ToString(), Font, Brushes.Black, 0, 0, StringFormat.GenericTypographic)
e.Graphics.Restore(m_GraphicsSave)

Next

' رسم التكست علي المحور الأفقي
For s As Integer = 10 To 100 Step 10

m_GraphicsSave = e.Graphics.Save()
Dim m_matrixOffsetX As New Matrix(1, 0, 0, -1, 30 + (s / 10 * 30) + (Font.Height / 2), 25)
m_MatrixCloned = m_matrix.Clone()
m_MatrixCloned.Multiply(m_matrixOffsetX)
e.Graphics.Transform = m_MatrixCloned

e.Graphics.DrawString(s.ToString(), Font, Brushes.Black, 0, 0, StringFormat.GenericTypographic)
e.Graphics.Restore(m_GraphicsSave)

Next

End Sub

Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Invalidate()

End Sub

End Class
Imports System.Drawing.Drawing2D

بالتوفيق

أخوك عمر

تم تعديل هذه المشاركة بواسطة a_pess في 27 مارس 2009 في 00:57

مواضيع مشابهة