تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
كلاس بسيط لطباعة صورة الفورم
#1
الكود التالي يوضح شكل كلاس بسيط يمكن استخدامه لطباعة صورة الفورم و ذلك بإستخدام مقياس رسم يتناسب مع حجم ورقة الطباعة

PHP كود :
Imports System.ComponentModel
Imports System
.Drawing.Printing

Public Class PrintForm
    Implements IDisposable

    Private formtoPrint 
As Form
    Private formBackcolor 
As Color
    Private formImage 
As Bitmap
    Private _printDocument 
As PrintDocument
    Private _disposed 
As Boolean

    Public Sub 
New(As Form)
 
       Me.New(fColor.White)
 
   End Sub

    Private Sub 
New(As FormbackColor As Color)
 
       formtoPrint f
        formBackcolor 
backColor
    End Sub

    
<Description("Print Document"), Bindable(False), Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
 
   Public Property PrintDocument() As PrintDocument
        Get
            If Me
._printDocument Is Nothing Then
                Me
._printDocument = New PrintDocument()
 
               AddHandler Me._printDocument.PrintPage, New PrintPageEventHandler(AddressOf Me.pd_PrintPage)
 
           End If
 
           Return Me._printDocument
        End Get
        Set
(value As PrintDocument)
 
           Me._printDocument value
        End Set
    End Property

    Public Property BackColor 
As Color
        Get
            Return Me
.formBackcolor
        End Get
        Set
(value As Color)
 
           Me.formBackcolor value
        End Set
    End Property

    Public ReadOnly Property Form 
As Form
        Get
            Return formtoPrint
        End Get
    End Property

    Public ReadOnly Property Image 
As Bitmap
        Get
            If Me
.formImage Is Nothing Then
                Me
.formImage = New Bitmap(Me.GetFormImage())
 
           End If
 
           Return Me.formImage
        End Get
    End Property

    Friend 
Function CanInvokeForm(As Form) As Boolean
        Return f IsNot Nothing AndAlso Not f
.IsDisposed AndAlso f.IsHandleCreated
    End 
Function

 
   Private Function GetFormImage() As Bitmap
        Dim bmp 
As Bitmap Nothing
        If CanInvokeForm
(Me.FormThen
            bmp 
= New Bitmap(Me.Form.WidthMe.Form.Height)
 
           Dim bounds As Rectangle Me.Form.Bounds
            bounds
.Offset(-bounds.X, -bounds.Y)
 
           Me.Form.DrawToBitmap(bmpbounds)
 
       End If
 
       Return bmp
    End 
Function

 
   Private Sub pd_PrintPage(sender As ObjectAs PrintPageEventArgs)
 
       Paint(e.Graphicse.MarginBounds500)
 
   End Sub

    Private Sub Paint
(As Graphicsbounds As RectanglemarginX As IntegermarginY As Integer)
 
       If Me.Image Is Nothing Then
            Return
        End 
If

 
       Dim rect As Rectangle = New Rectangle(bounds.Xbounds.Ybounds.Widthbounds.Height)
 
       Dim ratio As Double Math.Max(CDbl(Me.Image.Width) / rect.WidthCDbl(Me.Image.Height) / rect.Height)
 
       Dim x As Single CSng(rect.Width ratio Me.Image.Width 2)
 
       Dim y As Single CSng(rect.Height ratio Me.Image.Height 2)
 
       Dim mx As New Drawing2D.Matrix(1.0F CSng(ratio), 001.0F CSng(ratio), 00)
 
       mx.Translate(xy)
 
       g.Transform mx
        g
.DrawImageUnscaled(Me.ImagemarginXmarginY)

 
   End Sub

    Public Sub 
Print(show As Boolean)
 
       If show Then
            Dim result 
As DialogResult = New PrintDialog() With {.Document Me.PrintDocument}.ShowDialog()
 
           If result <> DialogResult.OK AndAlso result <> DialogResult.Yes Then
                Return
            End 
If
 
       End If
 
       Me.PrintDocument.Print()
 
   End Sub

    Public Sub ShowPrintPreview
()
 
       Dim previewDialog As PrintPreviewDialog = New PrintPreviewDialog() With {.Document Me.PrintDocument}
 
       previewDialog.ShowDialog()
 
   End Sub

    Public Sub ShowPageSetup
()
 
       Dim setupDialog As PageSetupDialog = New PageSetupDialog() With {.Document Me.PrintDocument}
 
       setupDialog.ShowDialog()
 
   End Sub

    Protected Overridable Sub Dispose
(disposing As Boolean)
 
       If _disposed Then
            Return
        End 
If
 
       If disposing Then
            If Me
.formImage IsNot Nothing Then
                Me
.formImage.Dispose()
 
               Me.formImage Nothing
            End 
If
 
       End If
 
       _disposed True
    End Sub

    
' TODO: override Finalize() only if Dispose(disposing As Boolean) above has code to free unmanaged resources.
    '
Protected Overrides Sub Finalize()
 
   '    ' Do not change this code Put cleanup code in Dispose(disposing As Booleanabove.
 
   '    Dispose(False)
    ' 
   MyBase.Finalize()
 
   'End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        ' 
TODOuncomment the following line if Finalize() is overridden above.
 
       ' GC.SuppressFinalize(Me)
    End Sub

End Class 

الإستخدام
أضف الكلاس لمشروعك ثم استخدم الكود بالشكل التالي


PHP كود :
       Using pf As New PrintForm(Me)
 
           pf.ShowPrintPreview()
 
           pf.Print(False)
 
       End Using 


أتمني أن يكون الكلاس مفيدا للبعض منكم
و يمكنكم أن تضعوا اي استفسار في حالة إن لم يكن الكود غير واضحا للبعض منكم
الرد
تم الشكر بواسطة: abdualla , abdualla , samira20
#2
تسلم يدك

الله يجزيك الف خير
  Heart   الرجاء البحث قبل وضع السؤال  Heart

   كل عام وانتم بالف بخير.  
الرد
تم الشكر بواسطة:
#3
فهلا كلاس بسيط ومفيد في نفس الوقت

جزاك الله خير
الرد
تم الشكر بواسطة: sendbad100


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كود بسيط لقرائة النصوص بالانجليزي فقط honest 6 1,394 18-06-18, 12:22 PM
آخر رد: basma amel
  فتح الفورم DOX.1 0 150 26-02-18, 12:31 AM
آخر رد: DOX.1
Exclamation طلب كود بسيط !! mohammedvego 8 333 25-11-17, 11:52 PM
آخر رد: mohammedvego
  كلاس التقاط النافذة النشطة سعود 2 340 11-08-17, 08:12 PM
آخر رد: سعود
  لحفظ ملفات مثل PDF أو حتى exe يمكن حفظها في قاعدة البيانات في صورة بايناري ()Byte ثم safalo 2 513 09-06-17, 10:47 PM
آخر رد: nana3466
  كود الاتصال بقاعدة اسيكوال سيرفر2008 على مستوى الفورم ابوبكر الصديق 3 868 16-02-17, 02:07 AM
آخر رد: khodor1985
  [كود] عرض صورة مخزنة في القاعدة بصيغة بيناري سعود 4 1,564 24-12-16, 07:41 PM
آخر رد: سعود
  [VB.NET] ممكن كود لجعل حجم الفورم لايتغير sari 5 1,002 09-10-16, 04:20 PM
آخر رد: خالد الهاشمي
  [كود] بسيط لارسال الصور ومقاطع الفيديو لبرنامج MovieMaker سعود 5 800 22-07-16, 10:23 PM
آخر رد: سعود
Information [كود] تحريك الفورم عن طريق السحب والإفلات من أي مكان Dardery 5 2,992 26-06-16, 11:20 PM
آخر رد: GeneralEG

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


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