الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في طباعة التقرير

بدأه الغنام في 12 نوفمبر 2008 · 4 رد · 3,212 مشاهدة · في قسم التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

المشكلة :

طباعة تقرير على ورق مخصص ( حجمة تقريبا نصف مقاس ورق A4 ) وذلك باستخدام طابعة Epson LQ 300

وصف المشكلة :

1- قمت بتغيير مقاسات الورق من (مجلد الطابعات والفاكسات) كالتالي :

ملف - خصائص الملقم - إنشاء نموذج جديد - العرض= 21.50 سم الارتفاع= 13.80 سم ( تقريبا نصف ورقة A4 ) - ثم حفظ نموذج

طبعا هذه الطريقة تستخدم في حالة ان النموذج الذي ستطبع علية غير متوفر في النماذج الإفتراضية للطابعة

2- عندما اقوم بتشغيل البرنامج يظهر التقرير بشكل سليم ولكن عند الطباعة يتم طباعة البيانات رأسيا من الأسفل للأعلى وليس من اليمين لليسار كما هو ظاهر في التقرير.

3- المشكلة ليست من الطابعة لانه عندما اطبع على مقاس A4 تتم الطباعة بشكل سليم من اليمين لليسار.

4- قمت باستخدام الأمر DataReport.Orientation=1 لكن تظهر رسالة DataReport width is lager than paper width

في الختام ،،

أرجو ممن واجهته نفس المشكلة أو يعرف حلاً لها الا يبخل علينا وشكرا لكم

أبو أنس ..

#2

:blink: معقولة ولا رد :blink:

مافي أحد تعامل مع طابعات Epson أو استخدمها في طباعة فواتير مثلاً ؟؟

#3

UP

#4

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

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

1- اضغط على الطابعة بالزر الايمن للماوس(Right Click) واختار خصائص ثم ابحث عن شكل الورق واختار الوضع الطولي ثم اضغط موافق وجرب وان لم ينجح الامر اعرض الرسالة التي عرضت لك وبالتوفيق

#5

اخى العزيز

السلام عليكم ورحمه الله وبركاته

بعد التحيه اليك حل المشكله

أفتح موديل جديد وانسخ الاكواد هذه فيه Modules

Option Explicit

Global PrintWidth  As Boolean
Global PrinterIsFound  As Boolean

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32

'Constants for NT security
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const PRINTER_ACCESS_ADMINISTER = &H4
Private Const PRINTER_ACCESS_USE = &H8
Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)

'Constants used to make changes to the values contained in the DevMode
Private Const DM_MODIFY = 8
Private Const DM_IN_BUFFER = DM_MODIFY
Private Const DM_COPY = 2
Private Const DM_OUT_BUFFER = DM_COPY
Private Const DM_DUPLEX = &H1000&
Public Const DMDUP_SIMPLEX = 1
Private Const DMDUP_VERTICAL = 2
Private Const DMDUP_HORIZONTAL = 3
Private Const DM_ORIENTATION = &H1&

Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * CCHFORMNAME
    dmLogPixels As Integer
    dmBitsPerPel As Long
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
    dmICMMethod As Long        '// Windows 95 only
    dmICMIntent As Long        ' // Windows 95 only
    dmMediaType As Long        ' // Windows 95 only
    dmDitherType As Long       ' // Windows 95 only
    dmReserved1 As Long        ' // Windows 95 only
    dmReserved2 As Long        ' // Windows 95 only
End Type

Private Type PRINTER_DEFAULTS
    pDatatype As String
    pDevMode As Long
    DesiredAccess As Long
End Type
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long

Private Declare Function DocumentProperties Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, ByVal pDevModeOutput As Any, ByVal pDevModeInput As Any, ByVal fMode As Long) As Long
Public Sub SetOrientation(NewSetting As Long, chng As Integer)
    Dim PrinterHandle As Long
    Dim PrinterName As String
    Dim pd As PRINTER_DEFAULTS
    Dim MyDevMode As DEVMODE
    Dim Result As Long
    Dim Needed As Long
    Dim pFullDevMode As Long
    Dim pi2_buffer() As Long     'This is a block of memory for the Printer_Info_2 structure

    PrinterName = Printer.DeviceName
    If PrinterName = "" Then
        Exit Sub
    End If

    pd.pDatatype = vbNullString
    pd.pDevMode = 0&
    pd.DesiredAccess = PRINTER_ALL_ACCESS

    Result = OpenPrinter(PrinterName, PrinterHandle, pd)

    Result = GetPrinter(PrinterHandle, 2, ByVal 0&, 0, Needed)
    ReDim pi2_buffer((Needed \ 4))
    Result = GetPrinter(PrinterHandle, 2, pi2_buffer(0), Needed, Needed)

    pFullDevMode = pi2_buffer(7)

    Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))

    MyDevMode.dmDuplex = NewSetting
    MyDevMode.dmFields = DM_DUPLEX Or DM_ORIENTATION
    MyDevMode.dmOrientation = chng

    Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))

    Result = DocumentProperties(Form1.hwnd, PrinterHandle, PrinterName, ByVal pFullDevMode, ByVal pFullDevMode, DM_IN_BUFFER Or DM_OUT_BUFFER)

    Result = SetPrinter(PrinterHandle, 2, pi2_buffer(0), 0&)

    Call ClosePrinter(PrinterHandle)

    Dim P As Printer
    For Each P In Printers
        If P.DeviceName = PrinterName Then
            Set Printer = P
            Exit For
        End If
    Next P
    Printer.Duplex = MyDevMode.dmDuplex
End Sub
Public Function PrinterInstalled() As Boolean
    On Error Resume Next
    PrinterInstalled = CBool(Printer.hDC)
End Function

ثم في أمر الطباعة اكتب هذا الكود

On Error Resume Next
If PrinterInstalled = True Then
  Screen.MousePointer = vbHourglass
        PrintW.ChngOrientationLandscape
        PrintW.ReSetOrientation
        PrintWidth = True
        PrintW.ReSetOrientation
        PrintW.ChngOrientationLandscape
  Screen.MousePointer = vbDefaul
       Exit Sub
    Else
        MsgBox "لم يتعرف البرنامج على طابعة مثبته لديك ..قم بتثبيت الطابعة أولاً", vbMsgBoxRtlReading, "تنبيه"
        Exit Sub
    End If

وفقنا الله جميعا

تم تعديل هذه المشاركة بواسطة سيدالنبلاء في 14 مايو 2011 في 07:36

مواضيع مشابهة