Custom Page Settings ...nur wie?

Vamp7771

Mitglied
Hallo zusammen,
dank euch habe ich gestern mein Problem super in Griff bekommen, leider habe
ich schon heute wieder eine Frage:

(zuerst mal der Code)

Code:
  Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage
        ' Declare a variable to hold the position of the last printed char. Declare
        ' as static so that subsequent PrintPage events can reference it.
        Static intCurrentChar As Int32
        Dim font_Middle As New Font("Arial", 12)
        Dim font_Small As New Font("Arial", 9)
        Dim font_Barcode As New Font("Abri Barcode39", 26)
        Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
        With pdoc.DefaultPageSettings
            ' Initialize local variables that contain the bounds of the printing 
            ' area rectangle.
            .PaperSize.Height = 1.57
            .PaperSize.Width = 2.75
            .Margins.Top = 0.015
            .Margins.Bottom = 0.015
            .Margins.Left = 0.015
            .Margins.Right = 0.015            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
            marginLeft = .Margins.Left ' X coordinate
            marginTop = .Margins.Top ' Y coordinate
        End With
        Dim intLineCount As Int32 = CInt(intPrintAreaHeight / Font.Height)
        Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
        Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
        Dim intLinesFilled, intCharsFitted As Int32


Nun die Frage:

Die rot dargestellten Felder muss ich so stehen lassen, weil ich nicht ein A4 bedrucke, sondern ein Etikett mit der Grösse (70mm breit x 40mm hoch)
Ich habe die Werte in Zoll umgerechnet und nun habe ich folgendes Problem:

Fehlermeldung erscheint:
(!)
Eine nicht behandelte Ausnahme des Typs 'System.ArgumentException' ist in system.drawing.dll aufgetreten.
Zusätzliche Informationen: Eine Papiergröße kann nur geändert werden, wenn sie benutzerdefiniert ist.
(!)
Ich verstehe ja was er meint und sehe es auch ein, nur weiß ich nicht wo ich die Papiergrösse als "Custom" definieren kann.

Oder muss es ein neues Objejt sein der System.Drawing Klasse?

Help - ich versuche mich immer selbst schlau zu machen nur ist Drucken, wenn man es zum ersten Mal im VB.net macht echt schwer :)

Euer Vampy^^
 
Zuletzt bearbeitet:
Moin!

Nunja, sowas spezielles hab ich beim Drucken noch nicht gemacht. Als ich aber mal in die MSDN geschaut habe...
You can specify several default page settings through the DefaultPageSettings property. For example, the PageSettings.Color property specifies whether the page prints in color, the PageSettings.Landscape property specifies landscape or portrait orientation, and the PageSettings.Margins property specifies the margins of the page.

To specify settings on a page-by-page basis, handle the PrintPage or QueryPageSettings event and modify the PageSettings argument included in the PrintPageEventArgs or QueryPageSettingsEventArgs, respectively.

Note After printing has started, changes to page settings through the DefaultPageSettings property will not affect pages being printed.
schaut es für mich so aus, dass Du die DefaultPageSettings während eines Druckvorgangs nicht ändern kannst.
Entweder Du machst das vorweg, also noch bevor der Printvorgang gestartet ist
oder du veränderst in dem PrintPage oder in dem QueryPageSettings Ereigniss
die PrintPageEventArgs.PageSettings.

PS: Füll mal dein Profil bitte aus.
 
Danke für die schnelle Antwort!

vorweg die PageSettings zu machen, das wäre genau das, was ich bräuchte.

Sieh mal, ich habe nun folgendes versucht:

Code:
       Static intCurrentChar As Int32
        Dim font_Middle As New Font("Arial", 12)
        Dim font_Small As New Font("Arial", 9)
        Dim font_Barcode As New Font("Abri Barcode39", 26)
        Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
' Initialize local variables that contain the bounds of the printing  ' area rectangle.
        Dim custompaper As New System.Drawing.Printing.PageSettings
        With custompaper
                     
   .PaperSize.Height = 1.57
            .PaperSize.Width = 2.75
            .Margins.Top = 0.015
            .Margins.Bottom = 0.015
            .Margins.Left = 0.015
            .Margins.Right = 0.015           
            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
            marginLeft = .Margins.Left ' X coordinate
            marginTop = .Margins.Top ' Y coordinate
        End With
        pdoc.DefaultPageSettings = custompaper       
       Dim intLineCount As Int32 = CInt(intPrintAreaHeight / Font.Height)
        Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
        Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
        Dim intLinesFilled, intCharsFitted As Int32

aber selbst hier bekommt er Schluckauf und mault mir das Papier an, und dass ich es nur ändern könne, wenn ich die Page Settings benutzerdefiniert angehe.

Ich bin mit meinem Latein echt am Ende.

P.S.: Jap, mach mich gleich mal an mein Profil ran.

Thx Euer Vampy !
 
Zuletzt bearbeitet:
Ließ doch mal bitte was ich geschrieben hab. Du kannst die PrintDocument.DefaultPageSettings
nicht während des Printvorgangs ändern. Das kannst entweder im PrintPage
oder in dem QueryPageSettings Ereigniss. Versuch also die PageSettings
in den PrintPageEventArgs zu verändern. Diese werden der Methode, welches das Ereignis behandelt mitgegeben.

PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage
 
Hallo,

danke nochmals.

nun muss ich meine Blödheit aber echt eingestehen...
Denn VB.Net übernimmt meine Defaultpagesettings vom Druckertreiber...

:)

Wenn ich eine ben.spezifische Einstellung der Papiergrösse möchte, muss ich dies im Druckertreiber angeben.

Sorry für den Stress, habe es eben herausgefunden!

MfG
Vampy
 
Hallo,

danke nochmals.

nun muss ich meine Blödheit aber echt eingestehen...
Denn VB.Net übernimmt meine Defaultpagesettings vom Druckertreiber...

:)

Wenn ich eine ben.spezifische Einstellung der Papiergrösse möchte, muss ich dies im Druckertreiber angeben.

Sorry für den Stress, habe es eben herausgefunden!

MfG
Vampy
 
Zurück