السلام عليكم...
1. أضف إلى الـ Form مكون PictureBox و اضبط اسمه (الخاصية Name) على pbxImageHolder. لا يهم حجمه و لا مكانه لأنه لن يظهر أثناء التشغيل و لا أثناء الطباعة، و إنما سنستعمله كمخزن مؤقت للصورة.
2. ضع التصريحات التالية في قسم التصريحات العام:
كود :
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
3. في الحدث Form_Load اكتب الكود التالي:
كود :
With pbxImageHolder
.ScaleMode = vbPixels
.BorderStyle = 0
.Width = Me.ScaleX(Me.Width, vbTwips, Me.ScaleMode)
.Height = Me.ScaleY(Me.Height, vbTwips, Me.ScaleMode)
.AutoRedraw = True
.Visible = False
End With
4. في زر الطباعة (أو أمر القائمة الخاص بالطباعة) اكتب الكود التالي:
كود :
Dim OldMode As ScaleModeConstants
Dim WidthPixels As Long
Dim HeightPixels As Long
Dim NCx As Long
Dim NCy As Long
WidthPixels = Me.Width / Screen.TwipsPerPixelX
HeightPixels = Me.Height / Screen.TwipsPerPixelY
NCx = (WidthPixels - Me.ScaleX(Me.ScaleWidth, Me.ScaleMode, vbPixels)) \ 2
NCy = HeightPixels - Me.ScaleY(Me.ScaleHeight, Me.ScaleMode, vbPixels) - NCx
pbxImageHolder.Cls
BitBlt pbxImageHolder.hdc, 0, 0, WidthPixels, HeightPixels, Me.hdc, -NCx, -NCy, SRCCOPY
OldMode = Printer.ScaleMode
Printer.ScaleMode = vbPixels
Printer.Print "";
Printer.PaintPicture pbxImageHolder.Image, 0, 0, Printer.ScaleWidth, Printer.ScaleHeight, 0, 0, WidthPixels, HeightPixels
Printer.EndDoc
Printer.ScaleMode = OldMode
5. نرجو الاستفادة و السلام.
*** ملاحظات:
أ. الكود السابق يطبع كامل الـ Form بما في ذلك إطارها و شريط عنوانها. إذا كنت تريد طباعة محتوياتها فقط - دون إطار - فإن الكود يحتاج إلى بعض التعديل. أخبرنا لنعدل الكود.
ب. صورة الـ Form تتم طباعتها على كامل الصفحة.