Hier die erste Variante:
''' <summary>
''' Misst die Zeichenfolge TEXT, wenn diese mit der angegebenen SCHRIFT
' dargestellt wird. Bei Vorgabe einer
''' verfügbaren BREITE des Darstellungsbereiches ist das Funktionsergebnis
' die erforderliche Bereichshöhe.
''' Mit Hilfe der Felder SizeDispl (Ausgabemdium "PrintPreviewControl") und
' SizePrint (Ausgabemedium "Drucker"), die
''' als Class-Variable im Datentyp SIZEF definiert sind, wird eine
' abweichende Berechnung der erforderlichen Breite
''' und Höhe ermittelt. Das Ausgabemedium "PrintPreviewControl" hat in
' diesem Vergleich das Primat. Der für das
''' Ausgabemedium "Drucker" mit der Graphics-Funktion MEASURSTRING
' ermittelte Wert wird mit dem in der Variablen
''' hinterlegten Korrekturfaktor angepaßt.
''' Die Funktion setzt voraus, daß jeder Ausgabe auf das Medium "Drucker"
' eine Ausgabe auf das Medium
''' "PrintPreviewControl" oder "PrintPreviewDialog" vorausgeht.
''' </summary>
''' <param name="Grafik">Verbindungsglied zum Ereignisargument e.Graphics
' in der Ereignisroutine PRINTDOCUMENT.PRINTPAGE</param>
''' <param name="Text">Der im Ausgabemedium darzustellende Text.</param>
''' <param name="Schrift">Die FONT-Einstellungen, die bei der
' TEXT-Darstellung Verwendung finden.</param>
''' <param name="Breite">Vorgabe einer einzuhaltenden maximalen Breite
' des Darstellungsbereiches in Grafikpunkte.
''' Ist die Vorgabe =-1, so wird die Breite den Anforderungen von TEXT und
' FONT in einzeiliger Darstellung berechnet.</param>
''' <returns>Beschreibung des Raumes (Höhe und Breite), der zur
' Darstellung von TEXT benötigt wird.</returns>
Friend Shared Function _MeasureStringKorr(ByVal Grafik As _
System.Drawing.Graphics, _
ByVal Text As String, _
ByVal Schrift As _
System.Drawing.Font, _
Optional ByVal Breite As Integer = _
-1) As SizeF
Dim _Font As System.Drawing.Font
Dim _Ber As SizeF
If (SizeFakt.Width = 0 And SizeFakt.Height = 0) Then ' Wurde
' der Korrekturfaktor bereits berechnet?
If Not IsPrinterOut AndAlso _
(SizeDispl.Width = 0 And SizeDispl.Height = 0) Then ' (
' NEIN) Musterwerte für PrintPreviewControl ermittelt?
_Font = New Font("Arial", 11, FontStyle.Regular) '
' (NEIN)
SizeDispl = Grafik.MeasureString("GM gm", _Font) '
' Musterwerte für PrintPreviewControl ermitteln
End If
If IsPrinterOut AndAlso _
(SizePrint.Width = 0 And SizePrint.Height = 0) Then ' (
' JA) Musterwerte für Drucker ermittelt?
_Font = New Font("Arial", 11, FontStyle.Regular) '
' (NEIN)
SizePrint = Grafik.MeasureString("GM gm", _Font) '
' Musterwerte für Drucker ermitteln
End If
If (SizeDispl.Width <> 0 And SizeDispl.Height <> 0) AndAlso _
(SizePrint.Width <> 0 And SizePrint.Height <> 0) Then _
' Musterwerte für die Ausgabemedien ermittelt?
SizeFakt.Width = ((SizeDispl.Width - SizePrint.Width) / _
SizePrint.Width) + 1 ' (NEIN) Korrekturfaktoren berechnen
SizeFakt.Height = ((SizeDispl.Height - SizePrint.Height) / _
SizePrint.Height) + 1
End If
End If
If IsPrinterOut Then '
' Ausgabemedium Drucker?
If (SizeFakt.Width <> 0 And SizeFakt.Height <> 0) Then _
' (JA) Wurde der Korrekturfaktor bereits berechnet?
If Breite > 0 Then _
' (JA) vorgegebene Druckbreite?
_Ber = Grafik.MeasureString(Text, Schrift, Breite / _
SizeFakt.Width) ' (JA)
Else
_Ber = Grafik.MeasureString(Text, Schrift) _
' (NEIN)
End If
Return New SizeF(_Ber.Width * SizeFakt.Width, _Ber.Height * _
SizeFakt.Height)
End If
End If
If Breite > 0 Then '
' vorgegebene Druckbreite?
Return Grafik.MeasureString(Text, Schrift, Breite) ' (
' JA)
Else
Return Grafik.MeasureString(Text, Schrift) ' (
' NEIN)
End If
End Function |