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

هل يوجد طريقة لعمل Chart

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

بســم الله الـرحمــن الرحيــم

اخواني الكرام

السلام عليكم

هل تعامل احدكم من قبل مع اداء Office XP Web Components

والتى من خلالها استطيع عمل chart

يحتوي على احصائيات لعدد الموظفين ( الموقوفين - الفاعلين _الخ)

وذلك دون استخدام الكريستال ريبوت

يعني شي يكون على ويندوز ابليكاشن form

36cm7.gif
#2

اخي الفاضل

أولا : لا انصحك ان ترسم مباشرة علي الفورم من الأفضل ان ترسم ما تريد في PicturBox مثلا

ملحوظه هامه كلامي هذا لا يعني أنك لا تستطيع الرسم علي الفورم مباشرة حتي لاتفهمني خطأ

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

لذا يجب علينا أن نعكس هذه النقطة ونجعلها في اقصي اليسار من اسفل و يكون انجاه الرسم الي أعلي والي اتجاه اليمين أيضا ونفعل ذلك باستخدام Matrix ومن ثم نقوم باستخدام الأمر Transform لنعكس اتجاه الرسم ثم باستخدام +GDI نستطيع أن نرسم ما نريد والمثال التالي يوضح ذلك

افتح فورم جديد وأضف له PictureBox وفي الحدث Paint الخاص بهذه PictureBox قم برسم ما تريد

وإن أردت أن ترسم في الفورم مباشرة يمكنك عمل نفس الشئ اي انك تقوم بالرسم من داخل الحدث Paint الخاص بالفورم

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

عموما الأسلوب واحد في الحالتين

الكود سيكون بالشكل التالي



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

اعتقد دي فكرة بسيطة سوف تساعدك لكي تبدأ ما تريد

بالتوفيق

أخوك عمر

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