شاطر
اذهب الى الأسفل
عدد المساهمات : 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 lft As Single = ((e.PageBounds.Width - wdth_lin) / 2) / 3.94
تعريف متغيريمثل بداية رسم الجدول بدءا من الحافة العلوية للورقة حيث رقم 5 يمثل القيمة بالسم
الكود:

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)
تعريف متغير يستقل قيم الاذاحة العلوية وجعل الاذاحة المبدئية 2 سم من الاعلى
الكود:

Dim er As Single = 2 * 10
طباعة اسم الشركة وجعلنا قيمة الاذاحة اليسرى هى 9.5 سم وهى تمثل نصف عرض الورقة المخصص لتوسيط الكلمة
الكود:

strt = 9.5 * 10
استقبال النص الموجود داخل الليبول الاول
الكود:

txt = lbl_cmny.Text
امر طباعة النص السابق استقباله
الكود:

e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
زيادة الاذاحة العلوية بمقدار 1.5 سم ( سطر اسفل )
الكود:

er = er + 1.5 * 10
طباعة اسم الموظف وجعلنا قيمة الاذاحة اليسرى هى 9.5 سم وهى تمثل نصف عرض الورقة المخصص لتوسيط الكلمة
الكود:

strt = 9.5 * 10
استقبال النص الموجود داخل الليبول الثانى
الكود:

txt = lbl_names.Text
امر طباعة النص السابق استقباله
الكود:

e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)
تصفير الذاذاحة العلوية
الكود:

er = 0
تعريف متغيرين يمثلان عرض وارتفاع الجدول المراد رسمه بقياس 6× عدد عناصر الليست ( سم )
الكود:

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
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى