- tarik
- عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
أداة PrintDocument أفضل من كريستال روبرت >>> الدرس الاول : طباعة لست بوكس فى شكل جدول
الإثنين أكتوبر 15, 2012 9:38 am
تعالو ننفذ المشروع الاول البسيط جدا والذى يحتوى على لست بوكس بداخلها مجموع من الاسماء ونود طباعتها فى جدول مسلسل فى منتصف الورقة
هيا نبدأ العمل..
سوف نقوم بداية بسحب أداة PrintDocument وأداة PrintPreviewDialog
قمنا بتغيير اسم الاداة الاولى print_doc والاداة الثانية الى print_prev
فى خاصية document للاداة print_prev سنختار print_doc وهذا يعنى أن أداة المعاينة قبل الطباعة
سوف تبنى مادتها الطباعية على الاداة print_doc
اضغط ضغطا مزدوجا على الاداة print_doc لتدخل حدث PrintPage وابدأ بكتابة الاكواد التالية
للحصول على عرض الورقة وهوهنا جعلناه 19 سم حيث رقم 19 يمثل العرض بالسم و10 تحويله الى مليمتر و3.94 يمثل تحويل الملمتر الى طريقة قياس الشاشة
Dim wdth_lin As Single = 19 * 10 * 3.94
تحديد الهامش الشمالى حيث طرحنا عرض الورقة الكلى (e.PageBounds.Width)من العرض المخصص وقسمنا على 2 لتحديد الهوامش
Dim pns As New Pen(Color.Black, 0.75)
تغيير الذاحة الشمالية الى 6.5 سم وهى تمثل عرض الصفحة 19سم مطروحا منه عرض الجدول 6سم ومقسوم الناتج على 2 حتى نضمن توسيط الجدول
strt = 6.5 * 10
أمر رسم الحدود الرئيسية ( الخارجية ) للجدول
e.Graphics.DrawRectangle(pns, lft + strt, tp, wdth, hght)
أمر رسم الخطوط الرأسية للجدول الاول وهو خط واحد فاصل على بعد 5سم من الحد الشمالى للجدول
strt = strt + 5 * 10 : tp = 5 * 10 : pns.Color = Color.Black
e.Graphics.DrawLine(pns, lft + strt, tp, lft + strt, tp + hght)
ارجاع الاذاحة الشمالية مرة اخرى الى 6.5 سم
strt = 6.5 * 10
تعريف متغير يمثل قيمة ارتفاع الصف فى الجدول المرسوم
رسم الخطوط الافقية للجدول الاول عن طريق وضع امر الرسم داخل حلقة تكرارية تمثل عدد صفوف الجدول
For ii As Integer = 1 To lst_emp.Items.Count
زيادة الاذاحة العلوية فى كل مرة ( ارتفاع الصف )
er = er + 1 * 10
زيادة سمك خط الرسم اذا كان الخط المرسوم هو الاخط الافقى الاول والا تخفيضه
If ii = 1 Then pns.Width = 0.5 Else pns.Width = 0.25
امر رسم الخط الافقى
e.Graphics.DrawLine(pns, lft + strt, tp + er, lft + strt + wdth, tp + er)
Next
زيادة الاذاحة العلوية بمقدار 1 سم وزيادتها بمقدار 0.5 سم وهو نصف ارتفاع الصف لضمان توسيط النص عموديا
er = tp + 1 * 10 + 0.5 * 10
تعريف متغير يمثل المسلسل
Dim mslsl As Integer
طباعة عناويين الجدول
txt = "الموظف"
strt = 2.5 * 10 + 6.5 * 10 : er = tp + 0.5 * 10
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
txt = "م"
strt = 5.5 * 10 + 6.5 * 10 : er = tp + 0.5 * 10
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
حلقة تكرارية لقراءة النص فى الليست بوكس
For i As Integer = 0 To lst_emp.Items.Count - 1
strt = 2.5 * 10 + 6.5 * 10 : er = er + 1 * 10
lst_emp.SelectedIndex = i
txt = lst_emp.Text
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
strt = 5.5 * 10 + 6.5 * 10
mslsl += 1
txt = mslsl.ToString
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
Next
اسحب 2 بوتن ()على الفورم واجعل واحدا لتشغيل معاينة قبل الطباعة والاخر للطباعة
داخل بوتن المعاينة اكتب الكود التالى فى حدث click
prnt_prev.ShowDialog
داخل بوتن الطباعة اكتب الكود التالى فى حدث click
prnt_doc.Print
هيا نبدأ العمل..
سوف نقوم بداية بسحب أداة PrintDocument وأداة PrintPreviewDialog
قمنا بتغيير اسم الاداة الاولى print_doc والاداة الثانية الى print_prev
فى خاصية document للاداة print_prev سنختار print_doc وهذا يعنى أن أداة المعاينة قبل الطباعة
سوف تبنى مادتها الطباعية على الاداة print_doc
اضغط ضغطا مزدوجا على الاداة print_doc لتدخل حدث PrintPage وابدأ بكتابة الاكواد التالية
للحصول على عرض الورقة وهوهنا جعلناه 19 سم حيث رقم 19 يمثل العرض بالسم و10 تحويله الى مليمتر و3.94 يمثل تحويل الملمتر الى طريقة قياس الشاشة
Dim wdth_lin As Single = 19 * 10 * 3.94
تحديد الهامش الشمالى حيث طرحنا عرض الورقة الكلى (e.PageBounds.Width)من العرض المخصص وقسمنا على 2 لتحديد الهوامش
- الكود:
Dim lft As Single = ((e.PageBounds.Width - wdth_lin) / 2) / 3.94
- الكود:
Dim tp As Single = 5 * 10
- الكود:
e.Graphics.PageUnit = GraphicsUnit.Millimeter
- الكود:
Dim strt As Single
- الكود:
Dim txt As String
- الكود:
Dim strfrmt As New StringFormat(0, 1)
- الكود:
strfrmt.Alignment = StringAlignment.Center
strfrmt.LineAlignment = StringAlignment.Center
- الكود:
strfrmt.SetDigitSubstitution(1, StringDigitSubstitute.Traditional)
- الكود:
Dim fnt1 As New Font("Times New Roman", 4, FontStyle.Bold, GraphicsUnit.Millimeter)
Dim fnt2 As New Font("Monotype Koufi", 5, FontStyle.Regular, GraphicsUnit.Millimeter)
- الكود:
Dim er As Single = 2 * 10
- الكود:
strt = 9.5 * 10
- الكود:
txt = lbl_cmny.Text
- الكود:
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
- الكود:
er = er + 1.5 * 10
- الكود:
strt = 9.5 * 10
- الكود:
txt = lbl_names.Text
- الكود:
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
- الكود:
er = 0
- الكود:
Dim wdth As Single = 6 * 10
Dim hght As Single = (lst_emp.Items.Count + 1) * 10
Dim pns As New Pen(Color.Black, 0.75)
تغيير الذاحة الشمالية الى 6.5 سم وهى تمثل عرض الصفحة 19سم مطروحا منه عرض الجدول 6سم ومقسوم الناتج على 2 حتى نضمن توسيط الجدول
strt = 6.5 * 10
أمر رسم الحدود الرئيسية ( الخارجية ) للجدول
e.Graphics.DrawRectangle(pns, lft + strt, tp, wdth, hght)
أمر رسم الخطوط الرأسية للجدول الاول وهو خط واحد فاصل على بعد 5سم من الحد الشمالى للجدول
strt = strt + 5 * 10 : tp = 5 * 10 : pns.Color = Color.Black
e.Graphics.DrawLine(pns, lft + strt, tp, lft + strt, tp + hght)
ارجاع الاذاحة الشمالية مرة اخرى الى 6.5 سم
strt = 6.5 * 10
تعريف متغير يمثل قيمة ارتفاع الصف فى الجدول المرسوم
رسم الخطوط الافقية للجدول الاول عن طريق وضع امر الرسم داخل حلقة تكرارية تمثل عدد صفوف الجدول
For ii As Integer = 1 To lst_emp.Items.Count
زيادة الاذاحة العلوية فى كل مرة ( ارتفاع الصف )
er = er + 1 * 10
زيادة سمك خط الرسم اذا كان الخط المرسوم هو الاخط الافقى الاول والا تخفيضه
If ii = 1 Then pns.Width = 0.5 Else pns.Width = 0.25
امر رسم الخط الافقى
e.Graphics.DrawLine(pns, lft + strt, tp + er, lft + strt + wdth, tp + er)
Next
زيادة الاذاحة العلوية بمقدار 1 سم وزيادتها بمقدار 0.5 سم وهو نصف ارتفاع الصف لضمان توسيط النص عموديا
er = tp + 1 * 10 + 0.5 * 10
تعريف متغير يمثل المسلسل
Dim mslsl As Integer
طباعة عناويين الجدول
txt = "الموظف"
strt = 2.5 * 10 + 6.5 * 10 : er = tp + 0.5 * 10
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
txt = "م"
strt = 5.5 * 10 + 6.5 * 10 : er = tp + 0.5 * 10
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
حلقة تكرارية لقراءة النص فى الليست بوكس
For i As Integer = 0 To lst_emp.Items.Count - 1
strt = 2.5 * 10 + 6.5 * 10 : er = er + 1 * 10
lst_emp.SelectedIndex = i
txt = lst_emp.Text
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
strt = 5.5 * 10 + 6.5 * 10
mslsl += 1
txt = mslsl.ToString
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
Next
اسحب 2 بوتن ()على الفورم واجعل واحدا لتشغيل معاينة قبل الطباعة والاخر للطباعة
داخل بوتن المعاينة اكتب الكود التالى فى حدث click
prnt_prev.ShowDialog
داخل بوتن الطباعة اكتب الكود التالى فى حدث click
prnt_doc.Print
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى