Κλάση clsPrinting Ver 1.3 

Μία πολύτιμη κλάση που λειτουργεί ως γεννήτρια εκτυπώσεων τύπου Στηλών. Έχει παρόμοια λειτουργικότητα με το RptGenerator control αλλά μπορεί να χρησιμοποιηθεί απ’ ευθείας στον κώδικα. Επιπλέον, παρέχει περισσότερες δυνατότητες, όπως διαφορετική γραμματοσειρά ανά στήλη, χρώματα, διαχωριστικές κάθετες γραμμές ή χαρακτήρες μεταξύ των στηλών  κ.α. Ένας προγραμματιστής μπορεί να τη χρησιμοποιήσει ως βάση για να φτιάξει το δικό του Report Generator.

 

Χρήστος Μουρατίδης Σεπτέμβριος 2005

 

Τι νέο υπάρχει στην έκδοση 1.1

Τι νέο υπάρχει στην έκδοση 1.2

Τι νέο υπάρχει στην έκδοση 1.3

 

Αποσυμπιέσετε με ένα πρόγραμμα συμπίεσης πχ. WinZip τα περιεχόμενα του αρχείου clsPrinting.zip σε κάποιο φάκελο στο δίσκο. Θα δείτε να δημιουργούνται δύο φάκελοι : Ένας με όνομα  clsPrinting που περιέχει τον κώδικα της κλάσης (και το solution αρχείο), κι ένας με όνομα clsPrinting Test ο οποίος περιέχει ένα project δείγματος χρήσης της κλάσης.

Επίσης, περιλαμβάνει και το παρόν readme αρχείο.

Λίγα λόγια για την κλάση clsPrinting

Με την κλάση αυτή, μπορούμε προγραμματιστικά, με χρήση μερικών ιδιοτήτων, μεθόδων και αντικειμένων να δημιουργήσουμε ένα 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 

 περιέχει το μήνυμα λάθους.

 

Public Αντικείμενα

 

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” ή “999”). Συνδυάζεται με την απαρίθμηση

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.

 

ΠΡΟΒΛΗΜΑ ΜΕ ΤΟ PROJECT ΔΕΙΓΜΑΤΟΣ ΧΡΗΣΗΣ - ΛΥΣΗ.

 

Αν στα 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 στην παρακάτω διεύθυνση.

 

mouratx@yahoo.com

 

Δείγμα :

 Ο κώδικας που αναφέρθηκε παραπάνω θα τυπώσει το εξής δείγμα : (φαίνεται ένα μέρος της σελίδας)

 

 

 

Τι νέο υπάρχει στην έκδοση 1.1

 

1)    Νέες ιδιότητες :

                       

·           PrintFooterLine       :    Ενεργοποιεί ή όχι την εκτύπωση της γραμμής του footer. Τώρα, μπορούμε να καθορίσουμε να

    τυπώνεται ή όχι η γραμμή του footer.

·           PrintLineOnFieldsOnly : Καθορίζει αν θα τυπώνεται διαχωριστική γραμμή μόνο στο πλάτος των πεδίων ή σε όλο το

πλάτος της σελίδας. Τώρα, αν έχουμε π.χ. 3 πεδία που καταλαμβάνουν το μισό πλάτος της σελίδας να τυπώνεται η διαχωριστική γραμμή μέχρι εκεί και όχι σε όλο το πλάτος της σελίδας.

 

2)    Ομαλότερη εκτύπωση των γραμμών.

                       

Τι νέο υπάρχει στην έκδοση 1.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” ή “999”). Συνδυάζεται με την απαρίθμηση MeasureColumnWidthEnum.BySampleText (δηλαδή, με την τιμή που έχει πάρει η ιδιότητα MeasureColumnWidth).

 

3)    Έχει διορθωθεί ένα πρόβλημα που υπήρχε όταν μία στήλη υπερέβαινε το δεξί περιθώριο. Τώρα, αποκόπτεται η τελευταία στήλη, που χωράει, σε συγκεκριμένο πλάτος ώστε να μην ξεπερνά το δεξί περιθώριο.

 

4)    Ο διαχωριστής στήλης (Delimiter) τυπώνεται στο σωστό σημείο τώρα.

 

Τι νέο υπάρχει στην έκδοση 1.3

 

1)    Στο υποσέλιδο (Footer) έχουμε τη δυνατότητα να καθορίσουμε να τυπώνεται ή όχι το πλήθος των σελίδων, της μορφής (Τρέχουσα σελίδα / Πλήθος σελίδων, π.χ. 2 / 10)

Για να γίνει αυτό, προτέθηκε στη δομή PrintPageNumberStruct μία μεταβλητή Boolean, με όνομα DisplayTotalPages.