منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طباعة Frame فقط
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم اخوانى اريد طباعة الموجود داخل Frame فقط مع عدم ظهور بقية محتويات الفورم اثناء الطباعة

وشكرا

السلام عليكم...

الكود التالي قمت بتجربته للطباعة على PictureBox (غير Picture1 المذكور في الكود)، و من المفترض أن يعمل مع الطابعة أيضاً لكني لم أتأكد من ذلك لأني لا أملك طابعة جاهزة حالياً:

* أضف PictureBox إلى الـ Form، و لنفرض أن اسمه Picture1. خصائص هذا الـ PictureBox المذكورة في كود الحدث Form_Load يمكن ضبطها أثناء التصميم و حذفها من الكود.

* اكتب الكود التالي:
كود :
' في قسم التصريحات العام
Private Const SRCCOPY = &HCC0020

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

' عند تحميل النافذة. يمكن ضبط هذه الخصائص أثناء التصميم
Private Sub Form_Load()
    With Picture1
        .ScaleMode = vbPixels       ' ( = 3 - Pixel )
        .BorderStyle = 0            ' ( = 0 - None )
        .Width = Frame1.Width
        .Height = Frame1.Height
        .AutoRedraw = True
        .Visible = False
    End With
End Sub

' زر الطباعة
Private Sub Command1_Click()
    Dim hFrameDC As Long
    Dim OldMode As ScaleModeConstants
    Dim WidthPixels As Long
    Dim HeightPixels As Long

' الحصول على المقبض الرسومي للإطار    
    hFrameDC = GetDC(Frame1.hwnd)
    If hFrameDC <> 0 Then
        ' تحويل عرض و طول الإطار إلى وحدة البكسل
        WidthPixels = Me.ScaleX(Frame1.Width, Me.ScaleMode, vbPixels)
        HeightPixels = Me.ScaleY(Frame1.Height, Me.ScaleMode, vbPixels)
        ' مسح مربع الصورة المخفي و رسم صورة الإطار به
        Picture1.Cls
        BitBlt Picture1.hdc, 0, 0, WidthPixels, HeightPixels, hFrameDC, 0, 0, SRCCOPY

        ' ضبط و تهيئة الطابعة
        OldMode = Printer.ScaleMode
        Printer.ScaleMode = vbPixels
        Printer.Print "";
        ' نسخ الصورة إلى الطابعة
        Printer.PaintPicture Picture1.Image, 0, 0, WidthPixels, HeightPixels, 0, 0, WidthPixels, HeightPixels
        ' إعطاء الأمر بالطباعة
        Printer.EndDoc
        Printer.ScaleMode = OldMode
    End If
End Sub

نرجو بعد تجربة الكود أن تخبرنا بالنتيجة... و أرجو الاستفادة و السلام.
ناجي إبراهيم كتب :السلام عليكم...

الكود التالي قمت بتجربته للطباعة على PictureBox (غير Picture1 المذكور في الكود)، و من المفترض أن يعمل مع الطابعة أيضاً لكني لم أتأكد من ذلك لأني لا أملك طابعة جاهزة حالياً:

* أضف PictureBox إلى الـ Form، و لنفرض أن اسمه Picture1. خصائص هذا الـ PictureBox المذكورة في كود الحدث Form_Load يمكن ضبطها أثناء التصميم و حذفها من الكود.

* اكتب الكود التالي:
كود :
' في قسم التصريحات العام
Private Const SRCCOPY = &HCC0020

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

' عند تحميل النافذة. يمكن ضبط هذه الخصائص أثناء التصميم
Private Sub Form_Load()
    With Picture1
        .ScaleMode = vbPixels       ' ( = 3 - Pixel )
        .BorderStyle = 0            ' ( = 0 - None )
        .Width = Frame1.Width
        .Height = Frame1.Height
        .AutoRedraw = True
        .Visible = False
    End With
End Sub

' زر الطباعة
Private Sub Command1_Click()
    Dim hFrameDC As Long
    Dim OldMode As ScaleModeConstants
    Dim WidthPixels As Long
    Dim HeightPixels As Long

' الحصول على المقبض الرسومي للإطار    
    hFrameDC = GetDC(Frame1.hwnd)
    If hFrameDC <> 0 Then
        ' تحويل عرض و طول الإطار إلى وحدة البكسل
        WidthPixels = Me.ScaleX(Frame1.Width, Me.ScaleMode, vbPixels)
        HeightPixels = Me.ScaleY(Frame1.Height, Me.ScaleMode, vbPixels)
        ' مسح مربع الصورة المخفي و رسم صورة الإطار به
        Picture1.Cls
        BitBlt Picture1.hdc, 0, 0, WidthPixels, HeightPixels, hFrameDC, 0, 0, SRCCOPY

        ' ضبط و تهيئة الطابعة
        OldMode = Printer.ScaleMode
        Printer.ScaleMode = vbPixels
        Printer.Print "";
        ' نسخ الصورة إلى الطابعة
        Printer.PaintPicture Picture1.Image, 0, 0, WidthPixels, HeightPixels, 0, 0, WidthPixels, HeightPixels
        ' إعطاء الأمر بالطباعة
        Printer.EndDoc
        Printer.ScaleMode = OldMode
    End If
End Sub

نرجو بعد تجربة الكود أن تخبرنا بالنتيجة... و أرجو الاستفادة و السلام.
شكرا لاهتماك اخى لاكنى اريد طباعة محتويات الFrame فقط لا يوجد بيكتشر بوكس
السلام عليكم...

أعرف أنك تريد طباعة الـ Frame فقط. أما الـ PictureBox فإننا نضيفه إلى الـ Form لغرض إنشاء الصورة ثم طباعتها، و هو لن يكون مرئياً أثناء التنفيذ لأننا نضبط الخاصية Visible له على False (انظر كود الحدث Form_Load) أو يمكنك ضبطه أثناء التصميم.

سلام.
[COLOR="#0000FF"]وعليكم السلام ورحمة الله وبركاته
كود رائع ومذهل أخ ناجي وأبشرك أني قمت بتجريبه ونجحت الفكرة 100 % والحمد لله
سلمت اناملك أيها المبدع Smile[/COLOR]
ناجي إبراهيم كتب :السلام عليكم...

أعرف أنك تريد طباعة الـ Frame فقط. أما الـ PictureBox فإننا نضيفه إلى الـ Form لغرض إنشاء الصورة ثم طباعتها، و هو لن يكون مرئياً أثناء التنفيذ لأننا نضبط الخاصية Visible له على False (انظر كود الحدث Form_Load) أو يمكنك ضبطه أثناء التصميم.

سلام.
شكرا لك اخى كريم وجعلها الله فى ميزان حسناتك
السلام عليكم...

السندبااد كتب :[COLOR="#0000FF"]وعليكم السلام ورحمة الله وبركاته
كود رائع ومذهل أخ ناجي وأبشرك أني قمت بتجريبه ونجحت الفكرة 100 % والحمد لله
سلمت اناملك أيها المبدع Smile[/COLOR]

أشكرك صديقي القديم - عن بعد Smile - السندبااد على مشاركتك في الإجابة. لكن مديحك و إطراءك لي يخجلني جداً، خاصة و أن الجميع يشهد لك - منذ أيام المنتدى القديم - بمواضيعك المتقدمة و المتميزة و المفيدة و الثرية جداً.

أكرر شكري، و أدعو الله أن يعجل بالفرج على إخواننا في سوريا، و السلام.
ناجي إبراهيم كتب :السلام عليكم...

الكود التالي قمت بتجربته للطباعة على PictureBox (غير Picture1 المذكور في الكود)، و من المفترض أن يعمل مع الطابعة أيضاً لكني لم أتأكد من ذلك لأني لا أملك طابعة جاهزة حالياً:

* أضف PictureBox إلى الـ Form، و لنفرض أن اسمه Picture1. خصائص هذا الـ PictureBox المذكورة في كود الحدث Form_Load يمكن ضبطها أثناء التصميم و حذفها من الكود.

* اكتب الكود التالي:
كود :
' في قسم التصريحات العام
Private Const SRCCOPY = &HCC0020

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

' عند تحميل النافذة. يمكن ضبط هذه الخصائص أثناء التصميم
Private Sub Form_Load()
    With Picture1
        .ScaleMode = vbPixels       ' ( = 3 - Pixel )
        .BorderStyle = 0            ' ( = 0 - None )
        .Width = Frame1.Width
        .Height = Frame1.Height
        .AutoRedraw = True
        .Visible = False
    End With
End Sub

' زر الطباعة
Private Sub Command1_Click()
    Dim hFrameDC As Long
    Dim OldMode As ScaleModeConstants
    Dim WidthPixels As Long
    Dim HeightPixels As Long

' الحصول على المقبض الرسومي للإطار    
    hFrameDC = GetDC(Frame1.hwnd)
    If hFrameDC <> 0 Then
        ' تحويل عرض و طول الإطار إلى وحدة البكسل
        WidthPixels = Me.ScaleX(Frame1.Width, Me.ScaleMode, vbPixels)
        HeightPixels = Me.ScaleY(Frame1.Height, Me.ScaleMode, vbPixels)
        ' مسح مربع الصورة المخفي و رسم صورة الإطار به
        Picture1.Cls
        BitBlt Picture1.hdc, 0, 0, WidthPixels, HeightPixels, hFrameDC, 0, 0, SRCCOPY

        ' ضبط و تهيئة الطابعة
        OldMode = Printer.ScaleMode
        Printer.ScaleMode = vbPixels
        Printer.Print "";
        ' نسخ الصورة إلى الطابعة
        Printer.PaintPicture Picture1.Image, 0, 0, WidthPixels, HeightPixels, 0, 0, WidthPixels, HeightPixels
        ' إعطاء الأمر بالطباعة
        Printer.EndDoc
        Printer.ScaleMode = OldMode
    End If
End Sub

نرجو بعد تجربة الكود أن تخبرنا بالنتيجة... و أرجو الاستفادة و السلام.

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