السلام عليكم ورحمة الله وبركاتوا
اتجاه الصفحة
اضف Module
Option Explicit 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(Frm_main.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
----------------------------------------------------------
هذا الاجراء يكون مع زر الطباعة بحيث تحدد اتجاه الصفحه
If PrinterIsFound = True And PrinterInstalled = True Then
If PrintWidth = True Then GoTo 10
Dim PrintW As New PrinterControl
PrintW.ReSetOrientation ' طول
' PrintW.ChngOrientationLandscape عرض
PrintWidth = False
Else
MsgBox ".."
Exit Sub
End If
-----------------------------------------------------------------------------------------------------------------------------
او تقوم بتثبيت رقعه النظام Service Pack 6 for Visual Basic 6.0
وتستخدم فقط الاجراء التالي لتغيير اتجاه الصفحه :
DataReport.Orientation = rptOrientPortrait
مقاس الصفحة
عن طريق الاجراءهذا مثلاً حجم الطباعة على أبون النقطيه :
DataReport.Height = 4429
DataReport.Width = 3283
تتحكم بمقاس التقرير طبعاً الداتا ربورت تاخذ حجم الصفحة وقت التشغيل يعني انت مصمم تقرير A3 ولما تشغل البرنامج وإعدادات الطابعة الافتراضية على A4 يــــــوقف وعلشان تشتغل براحتك استخدم :
On Error Resume Next
الطريقة السهله والمختصره لربط التقرير بقاعده البيانات
Dim Rs As New ADODB.Recordset Rs .Open "select * from USER ", ADB, adOpenStatic, adLockOptimistic Rs .MoveFirst Set DataReport.DataSource = Rs هنا كود تغيير حجم ومقاس الورقه ' DataReport.Show 1
أخوكم العتيق