11-07-14, 03:22 AM
.....
مشكلة DataReport أنه لا يملك خاصية تحديد طابعة مختلفة عن الطابعة الافتراضية لنظام التشغيل (ولا يصلح استخدام الطابعة الافتراضية للبرنامج)
إلا من خلال عرض التقرير (وهذا ما لا تريده كما في سؤالك) لذا.....
هناك حيلة تغيير الطابعة الافتراضية لنظام التشغيل مؤقتاً باستخدام دالة API
لحين إصدار أمر طباعة التقرير بدون عرضه ثم إعادة الطابعة الإفتراضية لنظام التشغيل كما كانت.
غير اسم الطابعة الموجود في الكود ("Test Printer") إلى اسم الطابعة التي تريدها.
.....
مشكلة DataReport أنه لا يملك خاصية تحديد طابعة مختلفة عن الطابعة الافتراضية لنظام التشغيل (ولا يصلح استخدام الطابعة الافتراضية للبرنامج)
إلا من خلال عرض التقرير (وهذا ما لا تريده كما في سؤالك) لذا.....
هناك حيلة تغيير الطابعة الافتراضية لنظام التشغيل مؤقتاً باستخدام دالة API
لحين إصدار أمر طباعة التقرير بدون عرضه ثم إعادة الطابعة الإفتراضية لنظام التشغيل كما كانت.
غير اسم الطابعة الموجود في الكود ("Test Printer") إلى اسم الطابعة التي تريدها.
كود :
Private Declare Function SetDefaultPrinter Lib "winspool.drv" Alias "SetDefaultPrinterA" (ByVal pszPrinter As String) As Long
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias "GetDefaultPrinterA" (ByVal sPrinterName As String, lPrinterNameBufferSize As Long) As Long
Private Sub Command1_Click()
' الاحتفاظ باسم الطابعة الافتراضية الخاصة بالنظام
Dim SysDefPrinter As String: SysDefPrinter = Space$(255)
If GetDefaultPrinter(ByVal SysDefPrinter, 255) <> 0 Then SysDefPrinter = Left(SysDefPrinter, 255 - 1)
Dim PrtIndex As Printer: For Each PrtIndex In Printers
If PrtIndex.DeviceName = SysDefPrinter Then SysDefPrinter = PrtIndex.DeviceName
Next
' تغيير الطابعة الافتراضية للنظام - مؤقتاً - إلى طابعة محددة من البرنامج
SetDefaultPrinter "Test Printer"
' إصدار أمر الطباعة للتقرير إلى الطابعة مباشرة بدون عرض التقرير
DataReport1.PrintReport False
' إعادة الطابعة الافتراضية الخاصة بالنظام التي احتفظنا باسمها في البداية
SetDefaultPrinter SysDefPrinter
End Sub.....



