Gå til innhold

VB.NET: Fiks for PageSetupDialog


Anbefalte innlegg

Alle som har forsøkt seg med PageSetupDialog vet at det er noe som

er helt feil.

 

Feilen kommer av en dobbel konvertering av marger i PageSetupDialog vist

systemet er innstilt for å bruke metriske verdier.

 

Du trenger 2 Button for å teste dette, btnSideoppsettMedFiks og btnSideoppsettUtenFiks.

 

Dialogboksene er konstruert med kode.

 

'På toppen
Imports System.Drawing.Printing


   Private Const LOCALE_IMEASURE As Integer = &HD

   Private Enum IMEASURE_TYPE
       METRISK = 0
       TOMMER = 1
   End Enum

   Private Declare Auto Function GetLocaleInfo Lib "Kernel32" ( _
                                           ByVal lcID As Integer, _
                                           ByVal lcType As Integer, _
                                           ByVal lcData As String, _
                                           ByVal lcDataLen As Integer) As Integer

   Private Declare Function GetUserDefaultLCID Lib "Kernel32" () As Integer



   Private mMargerUtenFiks As New Margins(100, 100, 100, 100)
   Private mMargerMedFiks As New Margins(100, 100, 100, 100)

   Private Sub btnSideoppsettMedFiks_Click(ByVal sender As System.Object, _
                                           ByVal e As System.EventArgs) _
                                           Handles btnSideoppsettMedFiks.Click

       Dim tmpPrintDok As New System.Drawing.Printing.PrintDocument
       tmpPrintDok.DefaultPageSettings.Margins = mMargerMedFiks

       Dim dlgUtskriftOppsett As New PageSetupDialog
       dlgUtskriftOppsett.Document = tmpPrintDok

       Dim lcID As Integer = GetUserDefaultLCID
       Dim iLcInfoLengde As Integer = 10
       Dim sLcInfo As String

       'Noen mener sikker jeg kunne brukt CultureInfo for å sjekke dette.
       'Men det tar ikke hensyn til om du har gjort egne valg.
       Dim iMeasureType As IMEASURE_TYPE
       iMeasureType = GetLocaleInfo(lcID, LOCALE_IMEASURE, sLcInfo, iLcInfoLengde)

       If iMeasureType = IMEASURE_TYPE.METRISK Then
           dlgUtskriftOppsett.Document.DefaultPageSettings.Margins = _
               PrinterUnitConvert.Convert( _
                               dlgUtskriftOppsett.Document.DefaultPageSettings.Margins, _
                               PrinterUnit.Display, _
                               PrinterUnit.TenthsOfAMillimeter)
       End If

       If dlgUtskriftOppsett.ShowDialog() = DialogResult.OK Then
           mMargerMedFiks = dlgUtskriftOppsett.PageSettings.Margins
       End If

   End Sub

   Private Sub btnSideoppsettUtenFiks_Click(ByVal sender As System.Object, _
                                           ByVal e As System.EventArgs) _
                                           Handles btnSideoppsettUtenFiks.Click

       Dim tmpPrintDok As New System.Drawing.Printing.PrintDocument
       tmpPrintDok.DefaultPageSettings.Margins = mMargerUtenFiks

       Dim dlgUtskriftOppsett As New PageSetupDialog
       dlgUtskriftOppsett.Document = tmpPrintDok

       If dlgUtskriftOppsett.ShowDialog() = DialogResult.OK Then
           mMargerUtenFiks = dlgUtskriftOppsett.PageSettings.Margins
       End If
   End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...