طباعة الداتاقريد Print DataGridView
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
تمنيت ان تكون المناقشة و التصميم خطوة بخطوة للوصول الى الهدف المنشود عبر الموقع هنا
لكن تجري الرياح بما لا تشتهي السفن , منذ سنة تقريبا كان لدي مشروع و كان لا بد من طريقة ما لطباعة محتويات الداتا قريد
و المشكلة التي واجهتني يومها انني امام تقارير متغيرة حسب الحاجة ,وليس عملياً تصميم تقارير منفردة في بيئة Microsoft.Reports.rdlc
رغم انها تخدم العمل بشكل جيد,لكن الحاجة لطباعة DataGridView هي متجددة دائما و كثير ما نحتاجها,لذا كان من الافضل تصميم كلاس ما
يخدمني في كل المشاريع التي تحتاج الى طباعة القريد فيها و بالتالي اختصار للوقت و الجهد و امكانية التعديل كما اريد مستقبلا.
اذا الفكرة تكمن في تصميم المشروع كمكتبة و تخريج المحتوى الى ملف و استيراد هذا الملف الى المشاريع التي احتاج فيها الى طباعة القريد
و الاختصارقدر الامكان في طرق الاستدعاء و الحصول على المطلوب .
على اي حال لا اريد الاطالة عليكم بامكانكم تجاوز المقدمة و الدخول في المضمون مباشرة
المكتبة عبارة عن ملف Dll يحتوي على طرق معالجة و طباعة DataGridView عبر اجراء واحد بسيط طبعا بعد استيراد المكتبة
الى داخل مشروعك
المكتبة تم تجريبها و هي تعمل بشكل جيد (ربما تجد فيها خلل او نقص ما) و هو ناتج عن عدم المراجعة الكاملة مرة اخرى للمكتبة
مضى على المشروع اكثر من سنة و لا اتذكر كل التفاصيل , لذا المشروع يحتاج الى مراجعة من قبل المهتمين و التعديل كما يحب البعض
ساقدم هنا السورس كود الخاص بالمكتبة و هو عبارة عن مشروع Class Librrary معمول على VS 2010
بامكانكم التعديل فيه كما تشاؤون .
و ان شاء الله ساقدم مثال على استخدام المكتبة لطباعة DataGridView او طباعة اعمدة محددة من قبل المستخدم و كذلك مع امكانية
فرض حقول محوسبة(حقول للمجاميع) في نهاية التقرير.
الحقول المحوسبة فقط لانواع الحقول الرقمية من النوع Integer
تظهر لك قائمة بكل الحقول الرقمية التي يمكن شملها في التقرير و انت تحدد اي حقول تريدها ان تظهر (الحقول تقوم بعملية جمع قيم العمود في كل التقرير)
بالاضافة الى ثلاث خانات في اعلى التقرير و خانة في اسفل التقرير و ذلك لوضع ملاحظات او تسميات تحبذها
مع امكانية اظهار التاريخ (تاريخ الطباعة) و كذلك خانة لاسم المستخدم الذي قام بالطباعة
كما قلت سابقا الملف مفتوح للتعديل لمن يحب التعديل حسب مزاجه.
خطوات العمل
انسخ الملف المسمى gridprinting.dll الى داخل المشروع لديك الى مجلد Bin
ثم قم بعمل استيراد المرجع الى مشروعك عبر Add Referance و تحديد الملف من داخل المجلد الذي نسخت اليه الملف السابق gridprinting.dll
ثم قم بعمل Import له داخل الكلاس المراد استخدامه فيه
لنفرض ان لدينا مشروع فيه Form1 داخل الفورم نعمل Import للمكتبة للتعامل معها
PHP كود :
Imports PrintGrid
بعد ذلك اذا كان الفورم لديك مجهز و يحتوي على DatagridView تعرض بيانات
يتبقى عليك عمل التالي , في حدث زر ما يتوجب عليك تعريف متغير كما يلي
PHP كود :
Dim s1 As PrintGridView
الان ما عليك الا اسناد القريد المراد طباعته الى الكائن S1 كما يلي
PHP كود :
s1.SetGrid = dg1
s1.ShowPrintWizared()
الاجراء ShowPrintWizared
يظهر لك نموذج بسيط مضمن ضمن المكتبة كما بالصورة
كما هو موضح الطباعة في الاتجاهين يمين و يسار
صناديق التسمية في اعلى و اسفل الصفحة يمكنك تغيرها كما تحب
حقول المجاميع التي تريد تضمينها في التقرير فقط اشر اليها و هي تقوم بعمل حساب للحقل في اخر التقرير
طبعا عدد الحقول الخاصة بالمجاميع يتغير حسب عددها لديك , ما عليك الى التجريب فقط.
امكانية تحديد اتجاه طباعة الصفحة عمودي او افقي من اعدادت الصفحةاو انوع الورق و الهوامش
امكانية المعاينة و الطباعة المباشرة
مثال : لامكانية تحديد اعمدة محددة من القريد لطباعتها
الفكرة تكمن في تصميم نموذج شبيه بهذه الصورة
يحتوي النموذج على DataGridView يحتوي على 3 اعمدة
اسم الحقل بالعربي / مربع نص
اسم الحقل الحقيقي / مربع نص /مخفي
طباعة / CheckBox
مهمة القريد في هذا النموذج هي عرض جميع اعمدة القريد المراد طباعته و فق جملة استعلام
(طبعا عرض اسماء الاعمدة و ليس البيانات التي بداخلها)
شرح المثال
اعمل فورم جديد لديك بالاسم Frprint1.vb
اضف DataGridView بالاسم DgSelect و واحد اخر بالاسم DataGridView1
اضف 3 اعمدة للقريد DgSelect بالاسماء التالية
1- coldisc2 و اجعل HeaderText = اسم الحقل
2- colname2 و اجعل HeaderText = اسم الحقل الحقيقي/مخفي
3- colstate و جعل HeaderText = تحديد للطباعة / هذا العمود من النوع CheckBox
اضف زر امر بالاسم Btnloadfilds
اضف كائن BindingSource الى النموذج وسمه bnprint1 او يمكنك الاستغناء عنه
اجعل التصميم كما بالصورة السابقة
انتقل الى محرر الكود و استورد ما يلي
PHP كود :
Imports System.Data.OleDb
Imports gridprinting
طبعا بفرض لدي القاعدة قاعدة اكسس
عرف الكائنات التالية في بداية النموذج
PHP كود :
Public Class Frprint1
Public conprint As New OleDb.OleDbConnection
Dim ds_print As New DataSet
Dim adab_print1 As New OleDbDataAdapter
Dim adap_print2 As New OleDbDataAdapter
Dim dtprint1 As DataTable
Dim dtprint2 As DataTable
هذه الكائنات سنستخدمها للاتصال مع القاعدة و تخزين المعطيات
الان في حدث تحميل النموذج سنقوم بتامين الاتصال مع القاعدة و جلب الاعمدة التي نحتاج اليها
كما بالكود التالي
PHP كود :
Dim selprint As String = "select ID,fake_id,NationalNum,ms_details,Num,flname1,Mother,pfage,address,phone,cntinp from qprint "
adab_print1 = New OleDbDataAdapter(selprint, conprint)
adab_print1.Fill(ds_print, "tb_print1")
FiledCaptions() ' 'اسماء الاعمدة بالعربي
bnprint1.DataSource = ds_print.Tables("tb_print1")
DataGridView1.DataSource = bnprint1
'
loadfieldspriting() 'تحميل الاعمدة و اسمائها الى جدول خاص
كما يتضح القريد الاساسي الذي يحتوي على البيانات هو DataGridView1
ومهمتنا هي جلب اسماء الاعمدة الى القريد الثاني مع امكانية التحديد للاعمدة المراد طباعتها فقط
لان مكتبة gridprinting تقوم فقط بطباعة الاعمدة المرئية في كائن DataGridView اي الاعمدة التي تمتلك الخاصية (Visible=True)
لذا عند اختيارنا لعمود ما نحن نفعل هذه الخاصية
(طبعا بامكانك اللعب بالكود باكثر من طريقة لتفعيل او تعطيل الخاصية كما تشاء ... )
ملاحظة:الكائن DataGridView يمكنك جعله خارج حدود الرؤية بالنسبة للمستخدم كأن تضعه خلف القريد DgSelect
او ان تجعله خارج مساحة العمل ثم تقوم بتضييق النموذج لكي لا يراه المستخدم.
الاجراءت الاضافية كما يلي
الاجراء FiledCaptions
هذا الاجراء مهمته تعبئة الخاصية Caption باسماء عربية للحقول المتواجدة في الجدول tb_print1
PHP كود :
Sub FiledCaptions()
ds_print.Tables("tb_print1").Columns("ID").Caption = "كود المريض"
ds_print.Tables("tb_print1").Columns("fake_id").Caption = "م.مريض"
ds_print.Tables("tb_print1").Columns("NationalNum").Caption = "الرقم الوطني"
ds_print.Tables("tb_print1").Columns("ms_details").Caption = "رقم التخزين"
ds_print.Tables("tb_print1").Columns("Num").Caption = "رقم الاضبارة"
ds_print.Tables("tb_print1").Columns("flname1").Caption = "الاسم"
ds_print.Tables("tb_print1").Columns("Mother").Caption = "الام"
ds_print.Tables("tb_print1").Columns("pfage").Caption = "العمر"
ds_print.Tables("tb_print1").Columns("address").Caption = "العنوان"
ds_print.Tables("tb_print1").Columns("phone").Caption = "الهاتف"
ds_print.Tables("tb_print1").Columns("cntinp").Caption = "مرات الدخول"
End Sub
الاجراء loadfieldspriting
هذا الاجراء نقوم فيه بانشاء جدول جديد نسميه dtprint1
يحتوي على 3 اعمدة مشابه لاعمدة DataGridView التي سميناها سابقا بالاسم DgSelect
ثم نقوم بعدها بعمل حلقة تقوم بالمرور على اعمدة الجدول المسمى tb_print1
و نخزن معلومات اسم العمود (name) و كذلك التسمية الخاصة بالعمود (Caption)
في اعمدة الجدول الجديد dtprint1
بعد تعبئة الجدول الجديد نقوم باسناده للكائن DataGridView المسمى DgSelect
PHP كود :
Sub loadfieldspriting()
If ds_print IsNot Nothing And ds_print.Tables.Count > 0 Then
If ds_print.Tables.Contains("tb_print1") Then
dtprint1 = New DataTable
dtprint1.TableName = "dt_print1"
Dim colname2 As New DataColumn
Dim coldisc2 As New DataColumn
Dim colcheck As New DataColumn
''''''
colname2.DataType = System.Type.GetType("System.String")
coldisc2.DataType = System.Type.GetType("System.String")
colcheck.DataType = System.Type.GetType("System.String")
colname2.ColumnName = "colname2"
coldisc2.ColumnName = "coldisc2"
colcheck.ColumnName = "colcheck"
'''''''
dtprint1.Columns.Add(colname2)
dtprint1.Columns.Add(coldisc2)
dtprint1.Columns.Add(colcheck)
'--
ds_print.Tables.Add(dtprint1)
'--
Dim row As DataRow
For Each colprint1 As DataColumn In ds_print.Tables("tb_print1").Columns
row = dtprint1.NewRow
row.Item("colname2") = colprint1.ColumnName
row.Item("coldisc2") = colprint1.Caption
dtprint1.Rows.Add(row)
Next
ds_print.Tables("dt_print1").Rows(0).Item("coldisc2") = "كود المريض"
ds_print.Tables("dt_print1").Rows(1).Item("coldisc2") = "م.مريض"
ds_print.Tables("dt_print1").Rows(2).Item("coldisc2") = "الرقم الوطني"
ds_print.Tables("dt_print1").Rows(3).Item("coldisc2") = "رقم التخزين"
ds_print.Tables("dt_print1").Rows(4).Item("coldisc2") = "رقم الاضبارة"
ds_print.Tables("dt_print1").Rows(5).Item("coldisc2") = "الاسم الكامل"
ds_print.Tables("dt_print1").Rows(6).Item("coldisc2") = "الام"
ds_print.Tables("dt_print1").Rows(7).Item("coldisc2") = "العمر"
ds_print.Tables("dt_print1").Rows(8).Item("coldisc2") = "العنوان"
ds_print.Tables("dt_print1").Rows(9).Item("coldisc2") = "الهاتف"
ds_print.Tables("dt_print1").Rows(10).Item("coldisc2") = "مرات الدخول"
DgSelect.DataSource = dtprint1
End If
End If
End Sub
اجراء زر الامر Btnloadfilds
هذا الاجراء كما هو مبين يقوم بالمرور على كل صفوف القريد المسمى DgSelect و فحص حالة العمود colstate فاذا كان العمود غير محدد سنقوم باخفائه
اي جعل القيمة Visible = False و بالتالي عدم طباعته
ثم بعد ذلك تعريف كائن جديد PrintGridView
و نسند له القريد التي نريد طباعتها كما اسلفنا سابقا و نستدعي الطريقة ShowPrintWizared
و الباقي كما ورد في بداية الشرح.
PHP كود :
Private Sub Btnloadfilds_Click(sender As System.Object, e As System.EventArgs) Handles Btnloadfilds.Click
Try
Dim cnt As Integer = 0
If dtprint1.Rows.Count > 0 Then
For Each gridrow As DataGridViewRow In DgSelect.Rows
If (gridrow.Cells("colstate").Value.ToString) = "1" Then
DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = True
cnt += 1
Else
DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = False
End If
Next
End If
Try
DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("tahoma", 9, FontStyle.Regular)
If cnt <= 0 Then
MsgBox(" لا يوجد حقول لطباعتها , حدد الحقول اولاً " & " ؟ ", 48 + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkOnly, "معالج الطباعة")
Exit Sub
End If
Dim s1 As PrintGridView
s1 = New PrintGridView
s1.SetGrid = DataGridView1
s1.ShowPrintWizared()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
الكود الكامل للنموذج
PHP كود :
Imports System.Data.OleDb
Imports gridprinting
Public Class Frprint1
Public conprint As New OleDb.OleDbConnection
Dim ds_print As New DataSet
Dim adab_print1 As New OleDbDataAdapter
Dim adap_print2 As New OleDbDataAdapter
Dim dtprint1 As DataTable
Dim dtprint2 As DataTable
'كائن نقل البيانات لجدول الاحالات
' Dim adapter_sentto As New OleDbDataAdapter
Private Sub Frprint1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'تغيير لغة لوحة المفاتيح الى اللغه العربية
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New Globalization.CultureInfo("AR"))
Dim selprint As String = "select ID,fake_id,NationalNum,ms_details,Num,flname1,Mother,pfage,address,phone,cntinp from qprint "
adab_print1 = New OleDbDataAdapter(selprint, conprint)
adab_print1.Fill(ds_print, "tb_print1")
FiledCaptions() ' 'اسماء الاعمدة بالعربي
bnprint1.DataSource = ds_print.Tables("tb_print1")
DataGridView1.DataSource = bnprint1
'
loadfieldspriting() 'تحميل الاعمدة و اسمائها الى جدول خاص
'
End Sub
'اسماء الاعمدة بالعربي
Sub FiledCaptions()
ds_print.Tables("tb_print1").Columns("ID").Caption = "كود المريض"
ds_print.Tables("tb_print1").Columns("fake_id").Caption = "م.مريض"
ds_print.Tables("tb_print1").Columns("NationalNum").Caption = "الرقم الوطني"
ds_print.Tables("tb_print1").Columns("ms_details").Caption = "رقم التخزين"
ds_print.Tables("tb_print1").Columns("Num").Caption = "رقم الاضبارة"
ds_print.Tables("tb_print1").Columns("flname1").Caption = "الاسم"
ds_print.Tables("tb_print1").Columns("Mother").Caption = "الام"
ds_print.Tables("tb_print1").Columns("pfage").Caption = "العمر"
ds_print.Tables("tb_print1").Columns("address").Caption = "العنوان"
ds_print.Tables("tb_print1").Columns("phone").Caption = "الهاتف"
ds_print.Tables("tb_print1").Columns("cntinp").Caption = "مرات الدخول"
End Sub
'اضافة الاعمدة و اسمائها الى جدول خاص
Sub loadfieldspriting()
If ds_print IsNot Nothing And ds_print.Tables.Count > 0 Then
If ds_print.Tables.Contains("tb_print1") Then
dtprint1 = New DataTable
dtprint1.TableName = "dt_print1"
Dim colname2 As New DataColumn
Dim coldisc2 As New DataColumn
Dim colcheck As New DataColumn
colname2.DataType = System.Type.GetType("System.String")
coldisc2.DataType = System.Type.GetType("System.String")
colcheck.DataType = System.Type.GetType("System.String")
colname2.ColumnName = "colname2"
coldisc2.ColumnName = "coldisc2"
colcheck.ColumnName = "colcheck"
'''''''
dtprint1.Columns.Add(colname2)
dtprint1.Columns.Add(coldisc2)
dtprint1.Columns.Add(colcheck)
'--
ds_print.Tables.Add(dtprint1)
'--
Dim row As DataRow
For Each colprint1 As DataColumn In ds_print.Tables("tb_print1").Columns
row = dtprint1.NewRow
row.Item("colname2") = colprint1.ColumnName
row.Item("coldisc2") = colprint1.Caption
dtprint1.Rows.Add(row)
Next
ds_print.Tables("dt_print1").Rows(0).Item("coldisc2") = "كود المريض"
ds_print.Tables("dt_print1").Rows(1).Item("coldisc2") = "م.مريض"
ds_print.Tables("dt_print1").Rows(2).Item("coldisc2") = "الرقم الوطني"
ds_print.Tables("dt_print1").Rows(3).Item("coldisc2") = "رقم التخزين"
ds_print.Tables("dt_print1").Rows(4).Item("coldisc2") = "رقم الاضبارة"
ds_print.Tables("dt_print1").Rows(5).Item("coldisc2") = "الاسم الكامل"
ds_print.Tables("dt_print1").Rows(6).Item("coldisc2") = "الام"
ds_print.Tables("dt_print1").Rows(7).Item("coldisc2") = "العمر"
ds_print.Tables("dt_print1").Rows(8).Item("coldisc2") = "العنوان"
ds_print.Tables("dt_print1").Rows(9).Item("coldisc2") = "الهاتف"
ds_print.Tables("dt_print1").Rows(10).Item("coldisc2") = "مرات الدخول"
DgSelect.DataSource = dtprint1
End If
End If
End Sub
Private Sub Btnloadfilds_Click(sender As System.Object, e As System.EventArgs) Handles Btnloadfilds.Click
Try
Dim cnt As Integer = 0
If dtprint1.Rows.Count > 0 Then
For Each gridrow As DataGridViewRow In DgSelect.Rows
If (gridrow.Cells("colstate").Value.ToString) = "1" Then
DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = True
cnt += 1
Else
DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = False
End If
Next
End If
Try
DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("tahoma", 9, FontStyle.Regular)
If cnt <= 0 Then
MsgBox(" لا يوجد حقول لطباعتها , حدد الحقول اولاً " & " ؟ ", 48 + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkOnly, "معالج الطباعة")
Exit Sub
End If
Dim s1 As PrintGridView
s1 = New PrintGridView
s1.SetGrid = DataGridView1
s1.ShowPrintWizared()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
بالنسبة لقاعدة البيانات في الشرح بامكانك تصميمها في الاكسس كما تريد لتمشي مع المثال (حيث اسماء الحقول موجودة في الكود)
او ان تجرب اي قاعدة موجودة لديك مع مراعاة تغير اسماء الحقول
المرفقات تحتوي على المكتبة موجود فيها ملف gridprinting.dll و هو في مجلد Bin الخاص بالمشروع
بعد اجرائك اي تعديلات على المكتبة و فق رغبتك اعمل للمكتبة Build من القائمة Build
لتسري التعديلات على ملف المكتبة .
مع تمنياتي للجميع بالتوفيق . ولا تنسونا من صالح دعائكم
بعض دوال الرسم و كيفية التعامل معها
طبعا ليس موضوعنا هنا هو اعطاء دورة في دوال الرسم و التصميم
ولكن هي بعض الاكواد التي تساعدك في الرسم ,رايت ان اضعها مرفقة مع الموضوع
لتجربة الاكواد و التعامل معها انشئ مشروع جديد يحتوي على Form1 و في حدث Paint
الخاص بالنموذج حاول تجربة الاكواد
طبعا بعد استيراد فضاءات الاسماء التالية
PHP كود :
Imports System.Windows.Forms.VisualStyles
Imports System.Drawing.Drawing2D
رسم منحني
PHP كود :
Private Sub DrawArcRectangleF(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create rectangle to bound ellipse.
Dim rect As New RectangleF(0.0F, 0.0F, 100.0F, 200.0F)
' Create start and sweep angles on ellipse.
Dim startAngle As Single = 45.0F
Dim sweepAngle As Single = 270.0F
' Draw arc to screen.
e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle)
End Sub
استدعي الاجراء السابق في حدث Paint الخاص بالنموذج و شغل المشروع و هكذا مع بقية الاكواد
رسم خط متموج
PHP كود :
Private Sub DrawBezierPoint(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create points for curve.
Dim start As New Point(100, 100)
Dim control1 As New Point(200, 10)
Dim control2 As New Point(350, 50)
Dim [end] As New Point(500, 100)
' Draw arc to screen.
e.Graphics.DrawBezier(blackPen, start, control1, control2, [end])
End Sub
رسم منحني مغلق
PHP كود :
Private Sub DrawClosedCurvePointF(ByVal e As PaintEventArgs)
' Create pens.
Dim redPen As New Pen(Color.Red, 3)
Dim greenPen As New Pen(Color.Green, 3)
' Create points that define curve.
Dim point1 As New PointF(50.0F, 50.0F)
Dim point2 As New PointF(100.0F, 25.0F)
Dim point3 As New PointF(200.0F, 5.0F)
Dim point4 As New PointF(250.0F, 50.0F)
Dim point5 As New PointF(300.0F, 100.0F)
Dim point6 As New PointF(350.0F, 200.0F)
Dim point7 As New PointF(250.0F, 250.0F)
Dim curvePoints As PointF() = {point1, point2, point3, point4, _
point5, point6, point7}
' Draw lines between original points to screen.
e.Graphics.DrawLines(redPen, curvePoints)
' Draw closed curve to screen.
e.Graphics.DrawClosedCurve(greenPen, curvePoints)
End Sub
رسم شكل بيضوي
PHP كود :
Private Sub DrawEllipseRectangle(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create rectangle for ellipse.
Dim rect As New Rectangle(0, 0, 200, 100)
' Draw ellipse to screen.
e.Graphics.DrawEllipse(blackPen, rect)
End Sub
PHP كود :
Private Sub DrawIconRectangle(ByVal e As PaintEventArgs)
' Create icon.
Dim newIcon As New Icon("sample.ico")
' Create rectangle for icon.
Dim rect As New Rectangle(100, 100, 200, 200)
' Draw icon to screen.
e.Graphics.DrawIconUnstretched(newIcon, rect)
End Sub
PHP كود :
Private Sub DrawImagePoint(ByVal e As PaintEventArgs)
' Create image.
Dim newImage As Image = Image.FromFile("sample.jpg")
' Create Point for upper-left corner of image.
Dim ulCorner As New Point(20, 20)
' Draw image to screen.
e.Graphics.DrawImage(newImage, ulCorner)
End Sub
رسم صورة من ملف بشكل منحرف
PHP كود :
Private Sub DrawImagePara(ByVal e As PaintEventArgs)
' Create image.
Dim newImage As Image = Image.FromFile("sample.jpg")
' Create parallelogram for drawing image.
Dim ulCorner As New Point(100, 100)
Dim urCorner As New Point(550, 100)
Dim llCorner As New Point(150, 250)
Dim destPara As Point() = {ulCorner, urCorner, llCorner}
' Draw image to screen.
e.Graphics.DrawImage(newImage, destPara)
End Sub
رسم صورة من ملف
PHP كود :
Private Sub DrawImageParaRect(ByVal e As PaintEventArgs)
' Create image.
Dim newImage As Image = Image.FromFile("sample.jpg")
' Create parallelogram for drawing image.
Dim ulCorner As New Point(100, 100)
Dim urCorner As New Point(325, 100)
Dim llCorner As New Point(150, 250)
Dim destPara As Point() = {ulCorner, urCorner, llCorner}
' Create rectangle for source image.
Dim srcRect As New Rectangle(50, 50, 150, 150)
Dim units As GraphicsUnit = GraphicsUnit.Pixel
' Draw image to screen.
e.Graphics.DrawImage(newImage, destPara, srcRect, units)
End Sub
رسم خط بتحديد نقاط التموضع مع اللون و السماكة
PHP كود :
Public Sub DrawLinePoint(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create points that define line.
Dim point1 As New Point(100, 100)
Dim point2 As New Point(500, 100)
' Draw line to screen.
e.Graphics.DrawLine(blackPen, point1, point2)
End Sub
PHP كود :
Public Sub DrawLinesPoint(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create array of points that define lines to draw.
Dim points As Point() = {New Point(10, 10), New Point(10, 100), _
New Point(200, 50), New Point(250, 300)}
'Draw lines to screen.
e.Graphics.DrawLines(blackPen, points)
End Sub
رسم مضلع
PHP كود :
Public Sub DrawPolygonPoint(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create points that define polygon.
Dim point1 As New Point(50, 50)
Dim point2 As New Point(100, 25)
Dim point3 As New Point(200, 5)
Dim point4 As New Point(250, 50)
Dim point5 As New Point(300, 100)
Dim point6 As New Point(350, 200)
Dim point7 As New Point(250, 250)
Dim curvePoints As Point() = {point1, point2, point3, point4, _
point5, point6, point7}
' Draw polygon to screen.
e.Graphics.DrawPolygon(blackPen, curvePoints)
End Sub
رسم مستطيل
PHP كود :
Public Sub DrawRectangleRectangle(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create rectangle.
Dim rect As New Rectangle(0, 0, 200, 200)
' Draw rectangle to screen.
e.Graphics.DrawRectangle(blackPen, rect)
End Sub
رسم مجموعة مستطيلات
PHP كود :
Public Sub DrawRectanglesRectangle(ByVal e As PaintEventArgs)
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create array of rectangles.
Dim rects As Rectangle() = {New Rectangle(0, 0, 100, 200), _
New Rectangle(100, 200, 250, 50), _
New Rectangle(300, 0, 50, 100)}
' Draw rectangles to screen.
e.Graphics.DrawRectangles(blackPen, rects)
End Sub
PHP كود :
Public Sub DrawStringRectangleF(ByVal e As PaintEventArgs)
' Create string to draw.
Dim drawString As [String] = "Sample Text"
' Create font and brush.
Dim drawFont As New Font("Arial", 16)
Dim drawBrush As New SolidBrush(Color.Black)
' Create rectangle for drawing.
Dim x As Single = 150.0F
Dim y As Single = 150.0F
Dim width As Single = 200.0F
Dim height As Single = 50.0F
Dim drawRect As New RectangleF(x, y, width, height)
' Draw rectangle to screen.
Dim blackPen As New Pen(Color.Black)
e.Graphics.DrawRectangle(blackPen, x, y, width, height)
' Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect)
End Sub
PHP كود :
Public Sub DrawStringPointFFormat(ByVal e As PaintEventArgs)
' Create string to draw.
Dim drawString As [String] = "Sample Text"
' Create font and brush.
Dim drawFont As New Font("Arial", 16)
Dim drawBrush As New SolidBrush(Color.Black)
' Create point for upper-left corner of drawing.
Dim drawPoint As New PointF(150.0F, 50.0F)
' Set format of string.
Dim drawFormat As New StringFormat
drawFormat.FormatFlags = StringFormatFlags.DirectionVertical
' Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, _
drawPoint, drawFormat)
End Sub
PHP كود :
Public Sub DrawStringRectangleFFormat(ByVal e As PaintEventArgs)
' Create string to draw.
Dim drawString As [String] = "Sample Text"
' Create font and brush.
Dim drawFont As New Font("Arial", 16)
Dim drawBrush As New SolidBrush(Color.Black)
' Create rectangle for drawing.
Dim x As Single = 150.0F
Dim y As Single = 150.0F
Dim width As Single = 200.0F
Dim height As Single = 50.0F
Dim drawRect As New RectangleF(x, y, width, height)
' Draw rectangle to screen.
Dim blackPen As New Pen(Color.Black)
e.Graphics.DrawRectangle(blackPen, x, y, width, height)
' Set format of string.
Dim drawFormat As New StringFormat
drawFormat.Alignment = StringAlignment.Center
' Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, _
drawRect, drawFormat)
End Sub
PHP كود :
Public Sub DrawStringFloatFormat(ByVal e As PaintEventArgs)
' Create string to draw.
Dim drawString As [String] = "Sample Text"
' Create font and brush.
Dim drawFont As New Font("Arial", 16)
Dim drawBrush As New SolidBrush(Color.Black)
' Create point for upper-left corner of drawing.
Dim x As Single = 150.0F
Dim y As Single = 50.0F
' Set format of string.
Dim drawFormat As New StringFormat
drawFormat.FormatFlags = StringFormatFlags.DirectionVertical
' Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, _
x, y, drawFormat)
End Sub
رسم مستطيل و ملئه بلون ازرق
PHP كود :
Public Sub ExcludeClipRectangle(ByVal e As PaintEventArgs)
' Create rectangle for exclusion.
Dim excludeRect As New Rectangle(100, 100, 200, 200)
' Set clipping region to exclude rectangle.
e.Graphics.ExcludeClip(excludeRect)
' Fill large rectangle to show clipping region.
e.Graphics.FillRectangle(New SolidBrush(Color.Blue), 0, 0, _
300, 300)
End Sub
PHP كود :
Private Sub SetAndFillClip(ByVal e As PaintEventArgs)
' Set the Clip property to a new region.
e.Graphics.Clip = New Region(New Rectangle(10, 10, 100, 200))
' Fill the region.
e.Graphics.FillRegion(Brushes.LightSalmon, e.Graphics.Clip)
' Demonstrate the clip region by drawing a string
' at the outer edge of the region.
e.Graphics.DrawString("Outside of Clip", _
New Font("Arial", 12.0F, FontStyle.Regular), _
Brushes.Black, 0.0F, 0.0F)
End Sub
PHP كود :
Private Sub DemonstrateRegionData2(ByVal e As PaintEventArgs)
'Create a simple region.
Dim region1 As New Region(New Rectangle(10, 10, 100, 100))
' Extract the region data.
Dim region1Data As System.Drawing.Drawing2D.RegionData = region1.GetRegionData
Dim data1() As Byte
data1 = region1Data.Data
' Create a second region.
Dim region2 As New Region
' Get the region data for the second region.
Dim region2Data As System.Drawing.Drawing2D.RegionData = region2.GetRegionData()
' Set the Data property for the second region to the Data from the first region.
region2Data.Data = data1
' Construct a third region using the modified RegionData of the second region.
Dim region3 As New Region(region2Data)
' Dispose of the first and second regions.
region1.Dispose()
region1.Dispose()
' Call ExcludeClip passing in the third region.
e.Graphics.ExcludeClip(region3)
' Fill in the client rectangle.
e.Graphics.FillRectangle(Brushes.Red, Me.ClientRectangle)
region3.Dispose()
End Sub
PHP كود :
Private Sub MeasureStringMin(ByVal e As PaintEventArgs)
' Set up string.
Dim measureString As String = "Measure String"
Dim stringFont As New Font("Arial", 16)
' Measure string.
Dim stringSize As New SizeF
stringSize = e.Graphics.MeasureString(measureString, stringFont)
' Draw rectangle representing size of string.
e.Graphics.DrawRectangle(New Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height)
' Draw string to screen.
e.Graphics.DrawString(measureString, stringFont, Brushes.Black, New PointF(0, 0))
End Sub
PHP كود :
Private Sub ShowPensAndSmoothingMode(ByVal e As PaintEventArgs)
' Set the SmoothingMode property to smooth the line.
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
' Create a new Pen object.
Dim greenPen As New Pen(Color.Green)
' Set the width to 6.
greenPen.Width = 6.0F
' Set the DashCap to round.
greenPen.DashCap = Drawing2D.DashCap.Round
' Create a custom dash pattern.
greenPen.DashPattern = New Single() {4.0F, 2.0F, 1.0F, 3.0F}
' Draw a line.
e.Graphics.DrawLine(greenPen, 20.0F, 20.0F, 100.0F, 240.0F)
' Change the SmoothingMode to none.
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.None
' Draw another line.
e.Graphics.DrawLine(greenPen, 100.0F, 240.0F, 160.0F, 20.0F)
' Dispose of the custom pen.
greenPen.Dispose()
End Sub
PHP كود :
Private Sub PenAlignmenting(ByVal e As PaintEventArgs)
Dim blackPen As New Pen(Color.FromArgb(255, 0, 0, 0), 1)
Dim greenPen As New Pen(Color.FromArgb(255, 0, 255, 0), 10)
greenPen.Alignment = PenAlignment.Center
' Draw the line with the wide green pen.
e.Graphics.DrawLine(greenPen, 10, 100, 100, 50)
' Draw the line with the thin black pen.
e.Graphics.DrawLine(blackPen, 10, 100, 100, 50)
End Sub
PHP كود :
Private Sub ShowLineAndAlignment(ByVal e As PaintEventArgs)
' Construct a new Rectangle.
Dim displayRectangle _
As New Rectangle(New Point(40, 40), New Size(80, 80))
' Construct two new StringFormat objects
Dim format1 As New StringFormat(StringFormatFlags.NoClip)
Dim format2 As New StringFormat(format1)
' Set the LineAlignment and Alignment properties for
' both StringFormat objects to different values.
format1.LineAlignment = StringAlignment.Near
format1.Alignment = StringAlignment.Center
format2.LineAlignment = StringAlignment.Center
format2.Alignment = StringAlignment.Far
' Draw the bounding rectangle and a string for each
' StringFormat object.
e.Graphics.DrawRectangle(Pens.Black, displayRectangle)
e.Graphics.DrawString("Showing Format1", Me.Font, Brushes.Red, _
RectangleF.op_Implicit(displayRectangle), format1)
e.Graphics.DrawString("Showing Format2", Me.Font, Brushes.Red, _
RectangleF.op_Implicit(displayRectangle), format2)
End Sub
رسم نص طويل داخل المستطيل مع خاصية الالتفاف
PHP كود :
Private Sub ShowStringTrimming(ByVal e As PaintEventArgs)
Dim format1 As New StringFormat
Dim quote As String = "Not everything that can be counted counts," & _
" and not everything that counts can be counted."
format1.Trimming = StringTri
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال