09-10-12, 04:13 AM
ناجي إبراهيم كتب :السلام عليكم...
الكود التالي قمت بتجربته للطباعة على 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
نرجو بعد تجربة الكود أن تخبرنا بالنتيجة... و أرجو الاستفادة و السلام.
فى مشكلة صغيرة جدا بس هى انه مش بيطبع الفرام كامل بيطبع جزء منه
