تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
طباعة الداتاقريد Print DataGridView
#1
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
 
تمنيت ان تكون المناقشة و التصميم خطوة بخطوة للوصول الى الهدف المنشود عبر الموقع هنا
لكن تجري الرياح بما لا تشتهي السفن , منذ سنة تقريبا كان لدي مشروع و كان لا بد من طريقة ما لطباعة محتويات الداتا قريد
و المشكلة التي واجهتني يومها انني امام تقارير متغيرة حسب الحاجة ,وليس عملياً تصميم تقارير منفردة في بيئة 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() 

حيث dg1 هو القريد المراد طباعته

 

الاجراء 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(selprintconprint)
 
       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.ObjectAs System.EventArgsHandles 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"9FontStyle.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.OKMessageBoxIcon.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.ObjectAs System.EventArgsHandles 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 كود :
رسم منحني
[code]
 
   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.0F0.0F100.0F200.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(blackPenrectstartAnglesweepAngle)
 
   End Sub

[/code


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


PHP كود :
رسم خط متموج
[code]
 
   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(100100)
 
       Dim control1 As New Point(20010)
 
       Dim control2 As New Point(35050)
 
       Dim [end] As New Point(500100)

 
       ' Draw arc to screen.
        e.Graphics.DrawBezier(blackPen, start, control1, control2, [end])
    End Sub

[/code] 


PHP كود :
رسم منحني مغلق
[code]
 
   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.0F50.0F)
 
       Dim point2 As New PointF(100.0F25.0F)
 
       Dim point3 As New PointF(200.0F5.0F)
 
       Dim point4 As New PointF(250.0F50.0F)
 
       Dim point5 As New PointF(300.0F100.0F)
 
       Dim point6 As New PointF(350.0F200.0F)
 
       Dim point7 As New PointF(250.0F250.0F)
 
       Dim curvePoints As PointF() = {point1point2point3point4_
        point5
point6point7}

 
       ' Draw lines between original points to screen.
        e.Graphics.DrawLines(redPen, curvePoints)

        ' 
Draw closed curve to screen.
 
       e.Graphics.DrawClosedCurve(greenPencurvePoints)
 
   End Sub

[/code


PHP كود :
رسم شكل بيضوي
[code]
 
   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(00200100)

 
       ' Draw ellipse to screen.
        e.Graphics.DrawEllipse(blackPen, rect)
    End Sub

[/code] 


PHP كود :
رسم  ايقونة من ملف (الايقونة موجودة داخل مجلد bin)
[
code]
 
   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(100100200200)

 
       ' Draw icon to screen.
        e.Graphics.DrawIconUnstretched(newIcon, rect)
    End Sub

[/code] 


PHP كود :
رسم صورة من ملف(موجودة في مجلد bin)
[
code]
 
   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(2020)

 
       ' Draw image to screen.
        e.Graphics.DrawImage(newImage, ulCorner)
    End Sub

[/code] 


PHP كود :
رسم صورة من ملف بشكل منحرف
[code]
 
   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(100100)
 
       Dim urCorner As New Point(550100)
 
       Dim llCorner As New Point(150250)
 
       Dim destPara As Point() = {ulCornerurCornerllCorner}

 
       ' Draw image to screen.
        e.Graphics.DrawImage(newImage, destPara)
    End Sub
[/code] 


PHP كود :
رسم صورة من ملف
[code]
 
   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(100100)
 
       Dim urCorner As New Point(325100)
 
       Dim llCorner As New Point(150250)
 
       Dim destPara As Point() = {ulCornerurCornerllCorner}

 
       ' 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(newImagedestParasrcRectunits)
 
   End Sub

[/code


PHP كود :
رسم خط بتحديد نقاط التموضع مع اللون و السماكة
[code]
 
   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(100100)
 
       Dim point2 As New Point(500100)

 
       ' Draw line to screen.
        e.Graphics.DrawLine(blackPen, point1, point2)
    End Sub

[/code] 


PHP كود :
رسم خط بزوايا (وفق مصفوفة نقاط)
[
code]
 
   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(1010), New Point(10100), _
        New Point
(20050), New Point(250300)}

 
       'Draw lines to screen.
        e.Graphics.DrawLines(blackPen, points)
    End Sub

[/code] 


PHP كود :
رسم مضلع
[code]
 
   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(5050)
 
       Dim point2 As New Point(10025)
 
       Dim point3 As New Point(2005)
 
       Dim point4 As New Point(25050)
 
       Dim point5 As New Point(300100)
 
       Dim point6 As New Point(350200)
 
       Dim point7 As New Point(250250)
 
       Dim curvePoints As Point() = {point1point2point3point4_
        point5
point6point7}

 
       ' Draw polygon to screen.
        e.Graphics.DrawPolygon(blackPen, curvePoints)
    End Sub

[/code] 


PHP كود :
رسم مستطيل
[code]
 
   Public Sub DrawRectangleRectangle(ByVal e As PaintEventArgs)

 
       ' Create pen.
        Dim blackPen As New Pen(Color.Black, 3)

        ' 
Create rectangle.
 
       Dim rect As New Rectangle(00200200)

 
       ' Draw rectangle to screen.
        e.Graphics.DrawRectangle(blackPen, rect)
    End Sub

[/code] 


PHP كود :
رسم مجموعة مستطيلات
[code]
 
   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(00100200), _
        New Rectangle
(10020025050), _
        New Rectangle
(300050100)}

 
       ' Draw rectangles to screen.
        e.Graphics.DrawRectangles(blackPen, rects)
    End Sub

[/code] 


PHP كود :
رسم نص داخل مستطيل
[code]
 
   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(blackPenxywidthheight)

 
       ' Draw string to screen.
        e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect)
    End Sub

[/code] 


PHP كود :
رسم  نص عمودي
[code]
 
   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

[/code] 


PHP كود :
رسم نص داخل مستطيل مع محاذاة النص للوسط
[code]
 
   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(blackPenxywidthheight)

 
       ' Set format of string.
        Dim drawFormat As New StringFormat
        drawFormat.Alignment = StringAlignment.Center

        ' 
Draw string to screen.
 
       e.Graphics.DrawString(drawStringdrawFontdrawBrush_
        drawRect
drawFormat)
 
   End Sub

[/code


PHP كود :
رسم نص مع التنسيق
[code]
 
   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

[/code] 


PHP كود :
رسم مستطيل و ملئه بلون ازرق
[code]
 
   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

[/code] 


PHP كود :
ملئ مستطيل بلون و نص على الحافة الخارجية
[code]
 
   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.LightSalmone.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.0FFontStyle.Regular), _
            Brushes
.Black0.0F0.0F)

 
   End Sub

[/code


PHP كود :
ملئ الفورم بلون جديد و رسم مستطيل باللون السابق للفورم
[code]
 
   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

[/code] 


PHP كود :
رسم نص و احاطته بمستطيل
[code]
 
   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(measureStringstringFont)

 
       ' 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(measureStringstringFontBrushes.Black, New PointF(00))
 
   End Sub

[/code


PHP كود :
استخدام خواص التنعيم و التقطيع في رسم الخط
[code]
 
   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(greenPen20.0F20.0F100.0F240.0F)

 
       ' Change the SmoothingMode to none.
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.None

        ' 
Draw another line.
 
       e.Graphics.DrawLine(greenPen100.0F240.0F160.0F20.0F)

 
       ' Dispose of the custom pen.
        greenPen.Dispose()
    End Sub

[/code] 


PHP كود :
استخدام القلم في المحاذاة و استخدام خاصية التعريض
[code]
 
   Private Sub PenAlignmenting(ByVal e As PaintEventArgs)
 
       Dim blackPen As New Pen(Color.FromArgb(255000), 1)
 
       Dim greenPen As New Pen(Color.FromArgb(25502550), 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(blackPen1010010050)
 
   End Sub

[/code


PHP كود :
رسم نص داخل المستطيل مع استخدام المحاذاة
[code]
 
   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.BlackdisplayRectangle)
 
       e.Graphics.DrawString("Showing Format1"Me.FontBrushes.Red_
            RectangleF
.op_Implicit(displayRectangle), format1)
 
       e.Graphics.DrawString("Showing Format2"Me.FontBrushes.Red_
            RectangleF
.op_Implicit(displayRectangle), format2)
 
   End Sub

[/code

[php]رسم نص طويل داخل المستطيل مع خاصية الالتفاف
[code]
   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


الملفات المرفقة
.rar   gridprinting.rar (الحجم : 104.78 ك ب / التحميلات : 202)
.pdf   طباعة القريد.pdf (الحجم : 355.49 ك ب / التحميلات : 195)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
تم الشكر بواسطة: العزابي , الوادي , sniperjawadino
#2
مجهود كبير، شكراً أستاذنا.  Heart
الرد }}}}
تم الشكر بواسطة: ابو ليلى
#3
منور يا غالي و الحمد لله على سلامتك افتقدناك
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
تم الشكر بواسطة: الوادي
#4
رائع
شكرا لك على الإفادة
الرد }}}}
تم الشكر بواسطة: ابو ليلى
#5
اداة رائعة بالفعل

هناك بعض الاشكاليات
1- عند طباعة داتا جرايد فيها صفوف كثيرة لا تضهر كل الصفوف من المفترض تضهر كل الصفوف ويكون حجم كل عمود نسبة معينة من حجم الورقة
2- عند الطباعة بالاتجاه العربي يبداء الطباعة من الاتجاة الايسر
الرد }}}}
تم الشكر بواسطة: ابو ليلى


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 267 11-09-16, 07:20 AM
آخر رد: أبووسم
  تصدير DataGridView الى xls HASAN6.0 1 268 07-04-16, 11:17 PM
آخر رد: A_Baidak
  جمع قيم عمود معين فى datagridview الجندى 6 1,787 09-12-15, 04:40 PM
آخر رد: waled_life2002
  [كود] DataGridView Copy & Paste HASAN6.0 0 1,087 11-11-15, 11:51 AM
آخر رد: HASAN6.0
  [VB.NET] جمع العمود في datagridview في vb net أحمد النجار 0 637 26-01-15, 01:28 AM
آخر رد: أحمد النجار
  [VB.NET] تنسيق البينات بناء على المدخلات datagridview vb net فيديو أحمد النجار 0 595 24-01-15, 07:42 PM
آخر رد: أحمد النجار

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم