|
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
|
|
|
|
|
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: [ 540 ]
|
|
|