Μία πολύτιμη κλάση που λειτουργεί ως γεννήτρια εκτυπώσεων τύπου Στηλών. Έχει παρόμοια λειτουργικότητα με το RptGenerator control αλλά μπορεί να χρησιμοποιηθεί απ’ ευθείας στον κώδικα. Επιπλέον, παρέχει περισσότερες δυνατότητες, όπως διαφορετική γραμματοσειρά ανά στήλη, χρώματα, διαχωριστικές κάθετες γραμμές ή χαρακτήρες μεταξύ των στηλών κ.α. Ένας προγραμματιστής μπορεί να τη χρησιμοποιήσει ως βάση για να φτιάξει το δικό του Report Generator.
Χρήστος Μουρατίδης Σεπτέμβριος 2005
Τι νέο υπάρχει στην έκδοση 1.1
Τι νέο υπάρχει
στην έκδοση 1.2
Τι νέο υπάρχει
στην έκδοση 1.3
Αποσυμπιέσετε με ένα πρόγραμμα συμπίεσης πχ. WinZip τα περιεχόμενα του αρχείου clsPrinting.zip σε κάποιο φάκελο στο δίσκο. Θα δείτε να δημιουργούνται δύο φάκελοι : Ένας με όνομα clsPrinting που περιέχει τον κώδικα της κλάσης (και το solution αρχείο), κι ένας με όνομα clsPrinting Test ο οποίος περιέχει ένα project δείγματος χρήσης της κλάσης.
Επίσης, περιλαμβάνει και το παρόν readme αρχείο.
Με την κλάση αυτή, μπορούμε προγραμματιστικά, με χρήση μερικών ιδιοτήτων, μεθόδων και αντικειμένων να δημιουργήσουμε ένα report. Στην ιδιότητα DataSource, λαμβάνει ένα αντικείμενο DataView που περιέχει τις προς εκτύπωση εγγραφές. Η κλάση χρησιμοποιεί μερικές άλλες χρήσιμες κλάσεις για τη λειτουργία της :
· Η κλάση ColumnsPrinting, περιλαμβάνει αντικείμενα τύπου ColumnPrintItem, καθένα εκ των οποίων αντιπροσωπεύει μία στήλη
εκτύπωσης.
· Η κλάση ColumnPrintItem, περιλαμβάνει τα χαρακτηριστικά εκτύπωσης κάθε στήλης του report, όπως το όνομα του πεδίου
δεδομένων, επικεφαλίδα, πλάτος, μορφοποίηση επικεφαλίδας και δεδομένων κ.α.
· Η κλάση FormatPrint, περιλαμβάνει χαρακτηριστικά μορφοποίησης, όπως γραμματοσειρά, χρώμα, στοίχιση κ.α.
Η ιδιότητα Columns είναι τύπου ColumnsPrinting και αποτελεί τη συλλογή των στηλών εκτύπωσης. Στο υποσέλιδο τυπώνεται αριστερά η ημερομηνία και δεξιά η αρίθμηση των σελίδων.
Παρακάτω, δίνεται ένα δείγμα δημιουργίας ενός report :
‘Δημιουργία
αντικειμένου report :
Dim objReport As New clsPrinting.clsPrinting()
'Βάλε τίτλο στο report
:
Dim
TitleReport As TitleStruct
TitleReport.Title
= "ΠΕΛΑΤΕΣ ΕΞΩΤΕΡΙΚΟΥ" : TitleReport.TitleFormat = New
FormatPrint(objReport.Title.TitleFormat)
TitleReport.TitleFormat.ForeColor
= Color.Blue
objReport.Title
= TitleReport
H δομή TitleStruct της κλάσης περιλαμβάνει τις πληροφορίες (χαρακτηριστικά) για τον τίτλο, όπως το κείμενο (Title), τη μορφοποίησή του (TitleFormat), το χρώμα (ForeColor). Κατόπιν εκχωρούμε την μεταβλητή (που περιέχει τα δικά μας χαρακτηριστικά) στην ιδιότητα Title. H ιδιότητα Title δέχεται μία μεταβλητή δομής TitleStruct. Να σημειωθεί ότι κατά την δημιουργία του αντικειμένου (με την μέθοδο New), το αντικείμενο λαμβάνει κάποιες έτοιμες προκαθορισμένες τιμές, τις οποίες εμείς μπορούμε να αλλάξουμε. Αρκετές ιδιότητες είναι τύπου δομής και ο παραπάνω τρόπος είναι ενδεικτικός της απόδοσης τιμής σε αυτές.
'Θέσε τις
επικεφαλίδες με πράσινο χρώμα :
Dim newHeaderFormat As New FormatPrint(objReport.HeaderFormat)
newHeaderFormat.ForeColor
= Color.Green
objReport.HeaderFormat
= New FormatPrint(newHeaderFormat)
Η ιδιότητα HeaderFormat
καθορίζει την εξ΄ορισμού μορφοποίηση των επικεφαλίδων
του report. Βεβαίως, μπορούμε να καθορίσουμε ξεχωριστά για κάθε στήλη.
'Θέσε την
αυτόματη αρίθμηση των εγγραφών ως ενεργοποιημένη (ή όχι) και χρώμα επικεφαλίδας
ίδιο με τις επικεφαλίδες των άλλων στηλών :
Dim autoAA As AutoAAStruct
autoAA.Enabled
= True : autoAA.StartFrom = 1 : autoAA.Details
= objReport.AutoAA.Details
autoAA.Details.HeaderFormat.ForeColor
= objReport.HeaderFormat.ForeColor : autoAA.Details.UseDelimiter = ColumnPrintItem.DelimeterTypeEnum.VerticalLine
'Εντονο στυλ στην αρίθμηση.
autoAA.Details.DetailFormat.Font
= New Font(objReport.AutoAA.Details.DetailFormat.Font.FontFamily,
objReport.AutoAA.Details.DetailFormat.Font.Size, FontStyle.Bold, objReport.PrintUnit)
objReport.AutoAA
= autoAA
Στην ιδιότητα AutoAA καθορίζουμε τα χαρακτηριστικά της αυτόματης αρίθμησης. Αν θα είναι ενεργοποιημένη (Enabled), Τιμή εκκίνησης (StartFrom), αντικείμενο Details τύπου ColumnPrintItem, όπου θέτουμε τη μορφή της επικεφαλίδας του (Details.HeaderFormat), τον τύπο του διαχωριστή με την επόμενη στήλη (εδώ κάθετη γραμμή – Details.UseDelimeter), μορφή του περιεχομένου της στήλης (Details.DetailFormat)
Αν ενεργοποιήσουμε την αυτόματη αρίθμηση τότε στη συλλογή στηλών εκτύπωσης θα προστεθεί πρώτη αυτή της αυτόματης αρίθμησης
'Θέσε την πηγή
δεδομένων :
objReport.DataSource = PelatesView (ένα Dataview)
'Θέσε κάθετη
γραμμή στο αριστερό αλλά όχι στο δεξί περιθώριο :
objReport.PrintVerticalLineOnLeftMargin = True
objReport.PrintVerticalLineOnRightMargin
= False
Αυτές οι δύο ιδιότητες αν τεθούν true προσθέτουν αριστερά και δεξιά αντίστοιχα κάθετες γραμμές εκτύπωσης.
Αν δεν θέλουμε
να τυπωθεί η γραμμή του Footer : (νέο
στην έκδοση 1.1.)
objReport.PrintFooterLine = False
Αν θέλουμε να εμφανίζεται
και το πλήθος των σελίδων στο υποσέλιδο (Footer) : (νέο στην
έκδοση 1.3)
Dim PgNumber As PrintPageNumberStruct
= objReport.PrintPageNumber
PgNumber.DisplayTotalPages
= True
objReport.PrintPageNumber = PgNumber
'Αν θέλουμε
να τυπωθούν διαχωριστικές γραμμές μεταξύ
των εγγραφών :
objReport.PrintDetailLines = True
‘Αν θέλουμε οι
διαχωριστικές γραμμές να φτάνουν όχι μέχρι το δεξί περιθώριο αλλά μέχρι το τελευταίο
πεδίο (στήλη) : (νέο στην έκδοση 1.1.)
PrintLineOnFieldsOnly= True
'Θεσε κόκκινο χρώμα για τη διαχωριστική γραμμή των εγγραφών
(PenForDetailLine) :
Dim PenStruct As PensPrintingStruct
= objReport.PensPrinting
PenStruct.PenForDetailLine
= New Pen(Color.Red)
objReport.PensPrinting = PenStruct
H ιδιότητα PensPrinting καθορίζει τα χαρακτηριστικά των γραμμών εκτύπωσης (επικεφαλίδων-υποσέλιδου και γραμμής δεδομένων)
'Αν θέλουμε
αλλαγή προσανατολισμού εκτύπωσης :
objReport.PageOrientation = PageOrientationEnum.Landscape
'Αν θέλουμε
κάποια αλλαγή περιθωρίων σελίδας με portrait προσανατολισμό :
Dim NewMargins As PageMarginsStruct
NewMargins.Portrait
= New Margins(30, 270, 20,
420)
NewMargins.Landscape
= New Margins() : NewMargins.Landscape = objReport.PageMarginsCurrent.Landscape
objReport.PageMarginsCurrent
= NewMargins
Στην ιδιότητα PageMarginsCurrent καθορίζουμε τα περιθώρια σελίδας για Portrait και Landscape προσανατολισμό.
‘Διαχωριστικό κενό μεταξύ των στηλών. (Εξ΄ορισμού η τιμή είναι σε points) :
objReport.SpaceWidth = 10
Bάλε τις στήλες του
report :
'1η
Dim
colitem As New ColumnPrintItem()
With
colitem
.ColumnName
= "CompanyName" ‘Το όνομα του πεδίου από το DataView.
.HeaderText = "Εταιρεία"
.HeaderFormat
= New FormatPrint(objReport.HeaderFormat)
.DetailFormat
= New FormatPrint(objReport.DetailFormat)
'Αυτή θα τυπωθεί σε μέγεθος 12 points. (Τα υπόλοιπα είναι σε default
10)
.DetailFormat.Font
= New Font("Arial", 12, FontStyle.Regular, objReport.PrintUnit)
.Width
= 110 'default Points
.UseDelimiter
= ColumnPrintItem.DelimeterTypeEnum.VerticalLine
End
With
objReport.Columns.Add(colitem)
colitem = Nothing
'2η
colitem = New ColumnPrintItem()
With
colitem
.ColumnName
= "Address"
.HeaderText
= "Διεύθυνση"
.HeaderFormat
= New FormatPrint(objReport.HeaderFormat)
.DetailFormat
= New FormatPrint(objReport.DetailFormat)
.Width = 100
.UseDelimiter
= ColumnPrintItem.DelimeterTypeEnum.Character
.DelimiterCharacter.Character
= "*" 'Γι' αυτήν τη στήλη ο διαχωριστής θα είναι ο αστερίσκος!
End With
objReport.Columns.Add(colitem)
colitem = Nothing
'3η
colitem = New ColumnPrintItem()
With
colitem
.ColumnName
= "Country"
.HeaderText
= "Χώρα"
.HeaderFormat
= New FormatPrint(objReport.HeaderFormat)
.DetailFormat
= New FormatPrint(objReport.DetailFormat)
.HeaderFormat.Alignment
= AlignmentEnum.Center
.DetailFormat.Alignment
= AlignmentEnum.Center
'Σε αυτή τη στήλη ας κάνουμε την
μέτρηση του πλάτους σε χαρακτήρες. 8 χαρακτήρες να τυπώνει.
.MeasureColumnWidth
= ColumnPrintItem.MeasureColumnWidthEnum.ByCharacters
.NbrOfCharacters
= 8
.UseDelimiter
= ColumnPrintItem.DelimeterTypeEnum.VerticalLine
End With
objReport.Columns.Add(colitem)
colitem = Nothing
'4η
colitem = New ColumnPrintItem()
With
colitem
.ColumnName
= "Debt" 'Αριθμητικός τύπος
.HeaderText
= "Χρέος"
.HeaderFormat
= New FormatPrint(objReport.HeaderFormat.Font, Color.Red, AlignmentEnum.Right) 'κοκκινο χρώμα στο χρέος
.DetailFormat
= New FormatPrint(objReport.DetailFormat.Font, objReport.DetailFormat.ForeColor, AlignmentEnum.Right,
FormatPrint.ContentFormatTypeEnum.IsNumberFormat,
"#,###")
.Width = 40
.UseDelimiter
= ColumnPrintItem.DelimeterTypeEnum.VerticalLine
End
With
objReport.Columns.Add(colitem)
colitem = Nothing
'5η
colitem = New ColumnPrintItem()
With
colitem
.ColumnName
= "IsCritical" 'Λογικός τύπος.
.HeaderText
= "Κρίσιμος;"
.HeaderFormat
= New FormatPrint(objReport.HeaderFormat)
.HeaderFormat.Alignment
= AlignmentEnum.Center
.DetailFormat
= New FormatPrint(objReport.DetailFormat)
.DetailFormat.Alignment
= AlignmentEnum.Center
.DetailFormat.ContentFormatType
= FormatPrint.ContentFormatTypeEnum.IsBooleanFormat
.DetailFormat.BooleanTranslateFormat
= FormatPrint.BooleanTranslateEnum.Check
.Width = 60
.UseDelimiter
= ColumnPrintItem.DelimeterTypeEnum.VerticalLine
.DelimiterVerticalLine.Width
= 1.5
.DelimiterVerticalLine.Color
= Color.Green
End
With
objReport.Columns.Add(colitem)
colitem = Nothing
‘Κάνε
προεπισκόπηση :
objReport.PrintDoc.DocumentName
= "Προεπισκόπηση πελατών εξωτερικού" 'Το
όνομα της εργασίας εκτύπωσης όπως θα εμφανίζεται στην ουρά εκτύπωσης (print queue)
objReport.PrintPreview()
H κλάση χρησιμοποιεί εσωτερικά ένα αντικείμενο PrintDocument στο οποίο μπορεί να έχει άμεση πρόσβαση ο προγραμματιστής.
'Καθάρισε τη
συλλογή στηλών εκτύπωσης, μετά το κλείσιμο της προεπισκόπησης :
objReport.Columns.Clear()
Αυτό είναι ένα τυπικό δείγμα χρήσης. Η βασική δουλειά γίνεται κατά την προσθήκη στηλών στη συλλογή Columns. Προσέχουμε να θέτουμε τα χαρακτηριστικά που θέλουμε σε κάθε στήλη, τύπου ColumnPrintItem.
Για περισσότερα δείτε στην υποδειγματική εφαρμογή που συνοδεύει την κλάση.
Παρακάτω παρουσιάζονται οι ιδιότητες, μέθοδοι και τα γεγονότα της κλάσης.
1)
DataSource : H
πηγή δεδομένων,
τύπου DataView
2)
Title : O
τίτλος της
εκτύπωσης, τύπου TitleStruct (δομής).
3)
HeaderFormat : H
default μορφοποίηση των επικεφαλίδων (Header zone),
τύπου FormatPrint.
4)
DetailFormat : H default
μορφοποίηση των
γραμμών δεδομένων (Detail zone), τύπου FormatPrint.
5)
PageOrientation : Προσανατολισμός σελίδας, τύπου PageOrientationEnum
6)
PageMarginsCurrent :Τα περιθώρια σελίδας για Portrait και
Landscape προσανατολισμό, τύπου PageMarginsStruct
7)
PrintDetailLines : Ενεργοποιεί ή όχι την εκτύπωση διαχωριστικών γραμμών
μεταξύ των γραμμών δεδομένων.
8)
PrintFooterLine : Ενεργοποιεί ή όχι την εκτύπωση της γραμμής του footer
(νέο στην έκδοση 1.1).
9)
PrintLineOnFieldsOnly : Καθορίζει αν θα τυπώνεται διαχωριστική γραμμή μόνο στο πλάτος
των πεδίων ή σε όλο το
πλάτος της σελίδας (νέο στην έκδοση 1.1).
10) AutoAA : Καθορίζει τα χαρακτηριστικά της αυτόματης αρίθμησης των
εγγραφών, τύπου AutoAAStruct
11) PrintDate : Καθορίζει τα χαρακτηριστικά της εκτύπωσης της ημερομηνίας
του υποσέλιδου, τύπου
PrintDateStruct
12) PrintPageNumber : Καθορίζει τα χαρακτηριστικά της εκτύπωσης της
αρίθμησης σελίδας του υποσέλιδου, τύπου
PrintPageNumberStruct
13)
PrintUnit : H μονάδα μέτρησης της
εκτύπωσης, τύπου GraphicsUnit (Points, pixels, inches κλπ).
14)
PensPrinting : Οι πένες (pens)
εκτύπωσης των γραμμών επικεφαλίδων/υποσέλιδου και γραμμών δεδομένων, τύπου
PensPrintingStruct
15)
SpaceWidth : To πλάτος του διαχωριστικού
κενού μεταξύ των στηλών, τύπου Single.
16)
PrintVerticalLineOnLeftMargin : Να τυπωθεί ή όχι κάθετη γραμμή στο αριστερό
περιθώριο.
17)
PrintVerticalLineOnRightMargin
: Να τυπωθεί ή
όχι κάθετη γραμμή στο δεξί περιθώριο.
18)
VerticalLineOnLeftMargin : Tα χαρακτηριστικά της κάθετης
γραμμής στο αριστερό περιθώριο, τύπου
ColumnPrintItem.VerticalLineStruct (πάχος, χρώμα)
19)
VerticalLineOnRightMargin : Tα χαρακτηριστικά της κάθετης
γραμμής στο δεξί περιθώριο, τύπου
ColumnPrintItem.VerticalLineStruct
20)
PrintRemainingVerticalLinesOnMargins :
Καθορίζουμε (True/False) αν θα τυπώνονται οι κάθετες γραμμές των περιθωρίων
μέχρι το υποσέλιδο για τις απομένουσες κενές γραμμές της τελευταίας σελίδας του
report (νέο
στην έκδοση 1.2).
21)
DisplayMessageWhenFieldIsOverMargin : Καθορίζουμε
(True/False) αν θα τυπώνεται ένα προειδοποιητικό μήνυμα όταν το
πλάτος ενός πεδίου (στήλης) υπερβαίνει το δεξί περιθώριο της σελίδας (νέο στην έκδοση 1.2).
1)
New :
Μέθοδος κατασκευής αντικειμένου της κλάσης. Εδώ, αρχικοποιούνται οι ιδιότητες
με κάποιες
προκαθορισμένες τιμές.
2)
PrintPreview :
Κάνει προεπισκόπηση εκτύπωσης.
3)
Print : Εκτυπώνει.
1)
OnErrorPrinting(ByVal
ErrorMessage$) : Ενεργοποιείται όταν συμβεί
κάποιο σφάλμα εκτύπωσης. Η παράμετρος ErrorMessage
περιέχει το μήνυμα λάθους.
1)
Columns : Η συλλογή
στηλών εκτύπωσης, τύπου ColumnsPrinting.
2)
PrintDoc : To αντικείμενο PrintDocument για το rendering της
εκτύπωσης.
3)
TitleStruct : H
δομή για τον τίτλο
της εκτύπωσης. Περιλαμβάνει :
a. Title : Το κείμενο του τίτλου
b. TitleFormat : H μορφοποίηση του τίτλου,
τύπου FormatPrint
4)
AutoAAStruct : H δομή για την αυτόματη
αρίθμηση των εγγραφών. Περιλαμβάνει:
a. Enabled : Ενεργοποιημένη ή όχι.
b. StartFrom : Τιμή
εκκίνησης.
c. AA : O
μετρητής, τύπου
Integer.
d. Details : Τα χαρακτηριστικά της
στήλης, τύπου ColumnPrintItem.
5)
PageMarginsStruct :
Η δομή για τα περιθώρια σελίδας. Περιλαμβάνει:
a. Portrait : Για κατακόρυφο
προσανατολισμό, τύπου Margins
b. Landscape : Για οριζόντιο προσανατολισμό, τύπου Margins
6)
PrintDateStruct : H
δομή για την
ημερομηνία στο υποσέλιδο. Περιλαμβάνει:
a. Enabled : Ενεργοποιημένη ή όχι (δεν θα τυπώνεται).
b. DateLabel : Η ετικέτα.
c. DateString : Η τρέχουσα ημερομηνία ή
οριζόμενη
d. DateFormat : Μορφοποίηση, τύπου FormatPrint.
7)
PrintPageNumberStruct : H δομή για την αρίθμηση
σελίδων στο υποσέλιδο. Περιλαμβάνει:
a. Enabled : Ενεργοποιημένη
ή όχι
b. DisplayTotalPages : Να τυπώνεται
το πλήθος των σελίδων; (νέο στην έκδοση
1.3)
c. PageLabel : Η
ετικέτα.
d. PageNumber : Ο
αριθμός σελίδας
e. PageNumberFormat : Μορφοποίηση, τύπου FormatPrint.
8)
PensPrinting : H
δομή για τις
πένες εκτύπωσης των γραμμών σχεδίασης για Header/Footer και Detail ζώνης.
Περιλαμβάνει:
a. PenForDetailLine : Αντικείμενο Pen
για τη σχεδίαση της Detail γραμμής σχεδίασης
b. PenForHeadFootLine : Αντικείμενο Pen
για τη σχεδίαση της Header/Footer γραμμής σχεδίασης
c. PenForDetailLineWidth : To πάχος της Detail
γραμμής
σχεδίασης
d. PenForDetailLineHeight :
Το ύψος της Detail γραμμής σχεδίασης
e. PenForHeadFootWidth : To πάχος της Detail
γραμμής σχεδίασης
f. PenForHeadFootLineHeight : Το ύψος της Detail
γραμμής
σχεδίασης
9)
PageOrientationEnum : Απαρίθμηση για τον
προσανατολισμό σελίδας. Περιλαμβάνει δύο τιμές :
a. Portrait
b. Landscape
10)AlignmentEnum : Απαρίθμηση για τη στοίχιση. Περιλαμβάνει
:
a. Left
b. Center
c. Right
Η κλάση ColumnsPrinting
Προέρχεται από την κλάση System.Collections.CollectionBase, η οποία είναι η καταλληλότερη όταν θέλουμε να φτιάξουμε strong type συλλογές. Εδώ, έχει δημιουργηθεί ώστε να αποθηκεύει αντικείμενα τύπου ColumnPrintItem.
Ιδιότητες :
1. Item : Default. Επιστρέφει ή θέτει ένα
αντικείμενο ColumnPrintItem σε μία καθορισμένη θέση.
Μέθοδοι :
1. Add : Προσθέτει
ένα αντικείμενο ColumnPrintItem στη λίστα.
2. Remove : Αφαιρεί ένα αντικείμενο ColumnPrintItem από τη λίστα.
3. Find : Βρίσκει ένα αντικείμενο ColumnPrintItem με βαση όνομα της στήλης.
Η κλάση ColumnPrintItem
Αντιπροσωπεύει μία στήλη εκτύπωσης.
Public αντικείμενα :
1. DelimeterTypeEnum : Απαρίθμηση για το είδος του διαχωριστή με
την επόμενη στήλη. Περιλαμβάνει τιμές:
a)
None : Κανένας διαχωριστής
b)
VerticalLine :
Κάθετη γραμμή
c)
Character : Ο διαχωριστής είναι χαρακτήρας
2. VerticalLineStruct : Δομή για τον διαχωριστή κάθετης γραμμής :
Περιλαμβάνει :
a)
Width :
Το πάχος της
b)
Color : Το χρώμα της, τύπου Color
3. DelimiterCharacterStruct : Δομή για τον διαχωριστή
χαρακτήρα. Περιλαμβάνει :
a)
Character : Ο χαρακτήρας
b)
Color : Το χρώμα
4. MeasureColumnWidthEnum : Τώρα
ο υπολογισμός του πλάτους μία στήλης μπορεί να γίνει με τρεις τρόπους: (νέο στην έκδοση 1.2)
v
ByPoints : Ο Default τρόπος. Ο καθορισμός του
πλάτους θα γίνει μέσω της τιμής που θα δώσουμε στη μεταβλητή Width.
v
ΒyCharacters : O καθορισμός του πλάτους θα
γίνει με βάση τον αριθμό των χαρακτήρων που θα προσδιορίσουμε στη νέα μεταβλητή
NbrOfCharacters.
v BySampleText : O καθορισμός του πλάτους θα
γίνει με βάση ένα δειγματικό string που θα προσδιορίσουμε στη νέα
μεταβλητή SampleText. (Π.χ. “ΧΧΧΧΧΧ
Ιδιότητες :
1. ColumnName : Το όνομα του πεδίου-στήλης του DataView
2. HeaderText : Περιγραφή επικεφαλίδας στήλης
3. HeaderFormat : Μορφοποίηση επικεφαλίδας, τύπου FormatPrint
4. DetailFormat : Μορφοποίηση πεδίου-περιεχομένου, τύπου FormatPrint
5. StartX : H Θέση έναρξης της στήλης στον x-άξονα
6.
MeasureColumnWidth : Παίρνει ως τιμή μία σταθερά
από την απαρίθμηση MeasureColumnWidthEnum. Τρόπος υπολογισμού πλάτους
στήλης.
7. Width : Το πλάτος της στήλης (εξ’ ορισμού σε points). Συνδυάζεται με την απαρίθμηση
MeasureColumnWidthEnum.ByPoints (δηλαδή, με την τιμή που έχει
πάρει η ιδιότητα MeasureColumnWidth).
8. NbrOfCharacters : Εδώ θέτουμε το πλάτος της στήλης σε χαρακτήρες.
Συνδυάζεται με την απαρίθμηση
MeasureColumnWidthEnum.ByCharacters (δηλαδή, με την τιμή που έχει πάρει η
μεταβλητή MeasureColumnWidth). (νέο στην έκδοση 1.2)
9. SampleText : Tο πλάτος της στήλης με βάση
ένα δειγματικό text (Πχ. “XXXXX” ή “
MeasureColumnWidthEnum.BySampleText (δηλαδή, με την τιμή που έχει
πάρει η μεταβλητή MeasureColumWidth). (νέο
στην έκδοση 1.2)
10. DelimiterVerticalLine : Τα χαρακτηριστικά του διαχωριστή κάθετης
γραμμής, τύπου VerticalLineStruct
11. DelimiterCharacter : Τα
χαρακτηριστικά τoυ διαχωριστή χαρακτήρα, τύπου DelimiterCharacterStruct
12. UseDelimiter : Το είδος
του διαχωριστή στήλης (κάθετης γραμμής ή χαρακτήρα ή τίποτα), τύπου
DelimeterTypeEnum
13. IsOverRightMargin : Αν έχει υπερβεί το δεξί περιθώριο της
σελίδας. Συμπληρώνεται αυτόματα από τον κώδικα
κατά
τον υπολογισμό των θέσεων
StartX
Η κλάση FormatPrint
Αποτελεί μία κλάση μορφοποίησης στοιχείων.
Ιδιότητες :
1)
Font : Γραμματοσειρά
2)
ForeColor : Χρώμα
3)
Alignment :
Στοίχιση, τύπου clsPrinting.AlignmentEnum
4) ContentFormatType : Τύπος μορφοποίησης
(αριθμού/ημερομηνίας ή τίποτα), τύπου ContentFormatTypeEnum
5)
ContentFormat : To format μορφοποίησης π.χ.
"dd/mm/yyyy" ή "Short
Date" ή "#.###", τύπου String
6)
BooleanTranslateFormat : Ο τρόπος εμφάνισης της boolean τιμής ενός πεδίου, τύπου BooleanTranslateEnum
Public αντικείμενα :
1)
ContentFormatTypeEnum :Απαρίθμηση για τον τύπο
μορφοποίησης (αριθμού, ημερομηνίας ή τίποτα). Περιλαμβάνει τις τιμές:
a. ΝοDefined : Δεν έχει
οριστεί μορφοποίηση.
b. IsNumberFormat : Η
μορφοποίηση είναι για αριθμητικό πεδίο
c. IsDateFormat : Η μορφοποίηση είναι για ημερομηνιακό
πεδίο
d. IsBooleanFormat : Η μορφοποίηση είναι για
πεδίο Booolean.
2)
BooleanTranslateEnum :
Απαρίθμηση για τον τρόπο εμφάνισης της boolean τιμής
ενός πεδίου. Περιλαμβάνει τις τιμές:
a. ΝαίΌχι
b. YesNo
c. ΑληθέςΨευδές
d. TrueFalse
e. ΙσχύειΔενΙσχύει
f. Check
Χρησιμοποιήστε ελεύθερα την κλάση στις εφαρμογές σας. Ο κώδικας είναι ανοικτός. Μπορείτε να κάνετε τις βελτιώσεις που θέλετε. Θα ήμουν ευγνώμων να με ενημερώσετε για τυχόν βελτιώσεις.
Το assembly αρχείο clsPrinting.dll θα το βρείτε στο φάκελο bin.
Αν στα References του project δείγματος χρήσης εμφανίζει
με κίτρινο θαυμαστικό την κλάση τότε πρέπει να ενημερώσετε τα Reference Path του project ώστε να ψάχνει στο φάκελο
που έχετε βάλει το dll της κλάσης.
1) Στο Solution Explorer κάντε δεξί κλικ στο prοject και επιλέξτε Properties.
2) Στο παράθυρο ιδιοτήτων του project
που ανοίγει, πηγαίνετε στο τμήμα Common Properties και Reference Path.
3) Δεξιά, πατήστε το browse button (...) για να βρείτε το Folder
όπου βρίσκεται το καθένα assembly dll στον δικό σας
υπολογιστή.
4) Πατήστε το button Update. Σώστε το project,
κλείστε το και ξανανοίξτε το. Τώρα, πρέπει να εμφανίζονται όλα κανονικά.
Για οποιεσδήποτε παρατηρήσεις στείλτε e-mail στην παρακάτω διεύθυνση.
Ο κώδικας που
αναφέρθηκε παραπάνω θα τυπώσει το εξής δείγμα : (φαίνεται ένα μέρος της
σελίδας)
1) Νέες ιδιότητες :
·
PrintFooterLine : Ενεργοποιεί ή όχι την εκτύπωση της γραμμής του footer.
Τώρα, μπορούμε να καθορίσουμε να
τυπώνεται
ή όχι η γραμμή του footer.
·
PrintLineOnFieldsOnly : Καθορίζει αν θα τυπώνεται διαχωριστική γραμμή μόνο στο πλάτος
των πεδίων ή σε όλο το
πλάτος της σελίδας. Τώρα, αν έχουμε π.χ. 3 πεδία που
καταλαμβάνουν το μισό πλάτος της σελίδας να τυπώνεται η διαχωριστική γραμμή
μέχρι εκεί και όχι σε όλο το πλάτος της σελίδας.
2)
Ομαλότερη
εκτύπωση των γραμμών.
Η μηχανή εκτύπωσης έχει υποστεί σημαντικές βελτιώσεις στην αναβάθμιση αυτή.
1) Νέες ιδιότητες :
·
DisplayMessageWhenFieldIsOverMargin : Μπορούμε να καθορίσουμε (True/False) αν
θα τυπώνεται ένα προειδοποιητικό μήνυμα όταν το πλάτος ενός πεδίου (στήλης)
υπερβαίνει το δεξί περιθώριο της σελίδας.
·
PrintRemainingVerticalLinesOnMargins :
Μπορούμε να
καθορίσουμε (True/False) αν θα τυπώνονται οι κάθετες γραμμές των περιθωρίων
μέχρι το υποσέλιδο για τις απομένουσες κενές γραμμές της τελευταίας σελίδας του
report.
2)
Για την κλάση
clsColumnPrintItem έχουν προστεθεί τα εξής :
·
Απαρίθμηση MeasureColumnWidthEnum : Τώρα ο υπολογισμός του πλάτους μία στήλης μπορεί να γίνει με τρεις
τρόπους:
v
ByPoints : Ο Default τρόπος. Ο καθορισμός του
πλάτους θα γίνει μέσω της τιμής που θα δώσουμε στη μεταβλητή Width.
v
ΒyCharacters : O καθορισμός του πλάτους θα
γίνει με βάση τον αριθμό των χαρακτήρων που θα προσδιορίσουμε στη νέα μεταβλητή
NbrOfCharacters.
v BySampleText : O καθορισμός του πλάτους θα
γίνει με βάση ένα δειγματικό string που θα προσδιορίσουμε στη νέα
μεταβλητή SampleText. (Π.χ. “ΧΧΧΧΧΧ”)
Πρέπει να
σημειωθεί ότι ο τρόπος υπολογισμού ByPoints είναι
ακριβής ενώ οι υπόλοιποι δύο προσεγγιστικοί. Είναι καθαρά θέμα του
προγραμματιστή τι θα επιλέξει, ανάλογα με τις ανάγκες του. Για παράδειγμα, στο Report Generator που έχω κατασκευάσει, χρησιμοποιώ και
τους δύο προσεγγιστικούς τρόπους.
·
Νέα ιδιότητα MeasureColumnWidth, τύπου MeasureColumnWidthEnum. Παίρνει ως τιμή μία σταθερά
από την απαρίθμηση.
·
Νέα ιδιότητα NbrOfCharacters : Εδώ θέτουμε το πλάτος της στήλης σε χαρακτήρες.
Συνδυάζεται με την απαρίθμηση MeasureColumnWidthEnum.ByCharacters
(δηλαδή, με την τιμή που έχει πάρει η ιδιότητα MeasureColumnWidth).
·
Νέα ιδιότητα SampleText :
Εδώ θέτουμε το πλάτος της στήλης με βάση ένα δειγματικό
text (Πχ. “XXXXX” ή “
3)
Έχει διορθωθεί ένα πρόβλημα που υπήρχε όταν μία στήλη υπερέβαινε το δεξί
περιθώριο. Τώρα, αποκόπτεται η τελευταία στήλη, που χωράει, σε συγκεκριμένο
πλάτος ώστε να μην ξεπερνά το δεξί περιθώριο.
4)
Ο διαχωριστής στήλης (Delimiter) τυπώνεται στο σωστό σημείο τώρα.
1)
Στο υποσέλιδο (Footer) έχουμε τη δυνατότητα να καθορίσουμε να τυπώνεται ή όχι
το πλήθος των σελίδων, της μορφής (Τρέχουσα σελίδα
/ Πλήθος σελίδων, π.χ. 2 / 10)
Για να γίνει
αυτό, προτέθηκε στη δομή PrintPageNumberStruct μία
μεταβλητή Boolean, με όνομα DisplayTotalPages.