Tipp 0502 Schriftgröße und Zeichenbreite einer Schrift
Autor/Einsender:
Datum:
  Detlev Schubert
12.07.2006
Entwicklungsumgebung:   VB 6
Häufig wird zur Einstellung von Schriften (Fonts) der entsprechende Standarddialog verwendet. Dies ist allerdings relativ umständlich. Einfacher geht es, diese Auswahl in die eigene Anwendung zu integrieren.
Der Wert für die Schriftgröße (FontSize) wird ermittelt, indem die Schriftart der Form an die ausgewählte Schrift angepasst wird. In einer Schleife wird dieser Wert gesetzt und ist dieser größer als der vorherige Wert wird er in die Liste übernommen.
Bei den Schriftarten wird zwischen Proportional- und Nicht-Proportionalschriften unterscheiden (siehe Tipp Proportional-Schriften erkennen). Bei den Proportionalschriften hat, im Gegensatz zu den Nicht-Proportionalschriften (z.B. Courier) bei denen jedes Zeichen die gleiche Breite hat, jedes Zeichen eine andere Zeichenbreite (Proportion). Daher ist die Gestaltung von Tabellen mit Proportionalschriften relativ schwierig. Es gibt nämlich keine Font-Eigenschaft, die die individuelle Zeichenbreite zurückgibt. Diese Eigenschaft ist nur für Formen und PictureBoxen verfügbar.
So wird für die Ermittlung der einzelnen Zeichenbreite der gleiche Trick angewandt, wie für die Schriftgröße. Die einzelnen Zeichen werden auf die Form übertragen, und so wird die entsprechende Zeichenbreite zurückgegeben. Zu beachten ist hierbei, dass die Zeichenbreite entsprechend des eingestellten ScaleMode der Form zurückgegeben wird, und dass für alle notwendigen, verwendeten Steuerelemente der gleiche ScaleMode eingestellt ist.
 
Option Explicit

Dim Obj As Object, FntObj As Variant

Private Sub Form_Load()
  Option1(0).Value = True
  List1.ListIndex = 0
End Sub

Private Sub List1_Click()
  Dim intM As Integer
  Dim FontSize As Double

  On Error GoTo ListError

  FntObj.FontName = List1.List(List1.ListIndex)
  Label1.FontName = FntObj.FontName
  List2.Clear
  List3.Clear
  For intM = 5 To 60
    FntObj.FontSize = intM
    If FntObj.FontSize > FontSize Then
      FontSize = FntObj.FontSize
      List2.AddItem FntObj.FontSize
    End If
  Next

  Exit Sub

ListError:
  If Err.Number = 380 Then
     MsgBox "Für eine Druckerschrift ist keine Vorschau " & _
            "auf dem Desktop möglich!", vbOKOnly, "Hinweis"
  End If
  Resume Next
End Sub

Private Sub List2_Click()
  Dim intM As Integer
  If TypeOf FntObj Is Form Then
    Label1.FontName = List1.List(List1.ListIndex)
    Label1.FontSize = List2.List(List2.ListIndex)
  End If

  List3.Clear
  FontName = Label1.FontName
  FontSize = Label1.FontSize

  For intM = 32 To 255
    List3.AddItem "Ascii " & Format$(intM, "000") & ": " & _
          TextWidth(Chr$(intM))
  Next
End Sub

Private Sub List3_Click()
  MsgBox Chr$(List3.ListIndex + 32), vbOKOnly, "Zeichen"
End Sub

Private Sub Option1_Click(Index As Integer)
  Dim intI As Integer

  Select Case Index
    Case 0 ' Bildschirmschriften
      Set Obj = Screen
      Set FntObj = Me
    Case 1 ' Druckerschriften
      Set Obj = Printer
      Set FntObj = Obj
  End Select

  List1.Clear
  For intI = 0 To Obj.FontCount - 1
    List1.AddItem Obj.Fonts(intI)
  Next
End Sub
 
Links zum Thema
Proportional-Schriften erkennen
Bildschirm- und Drucker-Schriftarten ermitteln

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,4 kB) Downloads bisher: [ 433 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Mittwoch, 24. August 2011