طباعة محتويات DBGrid1 بدون تقارير باستخدام الكائن Printer Object

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

طباعة محتويات DBGrid1 بدون تقارير باستخدام الكائن Printer Object

مُساهمة من طرف جورج صبحى في السبت ديسمبر 14, 2013 7:38 am

أهلا بكم سوف نتحدث عن كيفية الطباعة دون أي تقرير أو أدوات أخرى....عملية الطباعة هذه تعتمد على حلقة الدوران في كل مرة يتم طباعة سجل وإعادة الحلقة على السجل الذي بعده و ذلك باستخدام كائن الطباعة Printer Object


نفترض أن جدول قاعدة البيانات التي نعمل بها من ثلاث حقول وهي:

tell : رقم الهاتف

name : الإسم

adr : العنوان



وقمنا بستخدام شبكة البيانات DBGrid1 يتكون من أعمدة Column وتختصر Col صفوف Row لعرض حقول الجدول بها ...والأن سوف نطبع كل عمود وصف عن طريق حلقة التكرار و كائن الطباعة Printer Object



_ضع الكود التالي في قسم التصريحات العامة General
الرمز:
Private Sub PrintFont(sFontName As String, _
nFontSize As Integer, _
bFontBold As Boolean, _
bFontItalic As Boolean, _
bFontUnderline As Boolean)
Printer.FontName = sFontName
Printer.FontSize = nFontSize
Printer.FontBold = bFontBold
Printer.FontItalic = bFontItalic
Printer.FontUnderline = bFontUnderline
End Sub

وهو تحديد خصائص الخط الذي سف يظهر على الطابعة.


بعد ذلك سنقوم بإنشاء الاجراء التالي لتحيد إتجاه الطباعة :
الرمز:

Private Sub PrintText(fXCoordinate As Single, _
fYCoordinate As Single, _
sText As String)
Dim lStart As Long
Dim lIndex As Long

Printer.CurrentX = fXCoordinate
Printer.CurrentY = fYCoordinate

lStart = 1
lIndex = InStr(lStart, sText, vbCrLf)
Do While lIndex <> 0
Mid$(sText, lIndex, 2) = ' '
lStart = lStart + lIndex
lIndex = InStr(lStart, sText, vbCrLf)
Loop
Printer.Print sText
End Sub

وبعد ذلك سنقوم بانشاء الاجراء التالى لاستخدام حلقة تكرار و طباعة محتويات DBGrid1 :
الرمز:

Private Sub ResultsPrint()
Dim nLoopCtr As Integer
Dim sOutput(2) As String
Dim nScaleMode As Integer
nScaleMode = Printer.ScaleMode
Printer.ScaleMode = vbInches

'عليك أن تضيف بنفس الطريقة التالية حسب عدد الأعمدة
DBGrid1.Row = 0
DBGrid1.Col = 0
sOutput(0) = DBGrid1.Text
DBGrid1.Col = 1
sOutput(1) = DBGrid1.Text
DBGrid1.Col = 2
sOutput(2) = DBGrid1.Text


'نوع الخط الذي سوف يطبع
PrintFont 'Arial', 16, True, True, False

'العنوان
PrintText 0, 0, 'Print - ' & Me.Caption
PrintFont 'Arial', 12, True, True, False
PrintText 0, 0.5, 'Date: ' & Date$
PrintFont 'Arial', 12, True, False, True

'عليك أن تضيف مثل السطور التالية حسب عدد الأعمدة
PrintText 0, 1, sOutput(0)
PrintText 1, 1, sOutput(1)
PrintText 2, 1, sOutput(2)

PrintFont 'Arial', 12, False, False, False

For nLoopCtr = 1 To mnCurrentRow - 1
DBGrid1.Row = nLoopCtr

'عليك أن تضيف مثل السطور التالية حسب عدد الأعمدة لديك
DBGrid1.Col = 0
sOutput(0) = DBGrid1.Text
DBGrid1.Col = 1
sOutput(1) = DBGrid1.Text
DBGrid1.Col = 2
sOutput(2) = DBGrid1.Text


'عليك أن تضيف مثل السطور التالية حسب عدد الأعمدة لديك
PrintText 0, 1 + (nLoopCtr * 0.25), sOutput(0)
PrintText 1, 1 + (nLoopCtr * 0.25), sOutput(1)
PrintText 2, 1 + (nLoopCtr * 0.25), sOutput(2)
Next nLoopCtr

Printer.EndDoc
Printer.ScaleMode = nScaleMode
End Sub

وفي زر الطباعة سنقوم باستدعاء الاجراء ResultsPrint لتتم عملية الطباعة كما يلى :
الرمز:
Call ResultsPrint

جورج صبحى
.....
.....

تاريخ التسجيل : 18/02/2011
المساهمات : 98
النقاط : 211
التقيم : 3
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: طباعة محتويات DBGrid1 بدون تقارير باستخدام الكائن Printer Object

مُساهمة من طرف بنت البلد في الثلاثاء يناير 21, 2014 3:11 pm

Very Happy Very Happy 

بنت البلد
....
....

تاريخ التسجيل : 18/02/2011
المساهمات : 66
النقاط : 126
التقيم : 6
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى