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

التحكم ب DataReport

مغلق
بدأه بريق ألماس في 30 مايو 2007 · 0 رد · 934 مشاهدة · في قسم التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1

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

اتجاه الصفحة

اضف 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

أخوكم العتيق

هذا الموضوع مغلق.

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