|
Proportionale Schriften unterscheiden sich von
nicht-proportionalen Schriften durch die unterschiedliche Breite der
verschiedenen Buchstaben und Zeichen. Bei einem proportionalen
Schrift-Font ist beispielsweise das I wesentlich
schmaler als das M. Bei einem nicht proportionalen Font
ist dagegen die Breite aller Zeichen gleich, etwa wie bei einer
typischen Schreibmaschinen-Schrift wie "New Courier".
Anhand der unterschiedlichen Breite der Zeichen können Sie sehr
zuverlässig feststellen, um welche Art Schrift es sich handelt,
indem Sie mittels der VB-Methode TextWidth die Breite der zwei sich
in der Breite am markantesten unterscheidenden Zeichen I
und M miteinander vergleichen. Zwar bietet auch das
Windows-API mehrere Möglichkeiten, die gesuchte Information zu
erhalten - aber die API-Funktionen in Sachen Font sind meistens
etwas schwierig und umständlich handzuhaben.
Die Funktion IsFontProportional liefert Ihnen die Information, ob
ein Font proportional ist. Sie übergeben im ersten Parameter
irgendein Test-Objekt, das über die TextWidth-Methode
verfügt (Form, PictureBox usw.). Lassen Sie den
zweiten optionalen Parameter weg, wird der aktuell diesem Objekt
zugeordnete Font getestet. Sie können in diesem Parameter aber auch
ein beliebiges anderes Font-Objekt oder den Namen eines Fonts als
String übergeben. Im beiden Fällen wird der dem Test-Objekt
zugeordnete Font gesichert und vorübergehend durch das übergebene
Font-Objekt bzw. durch ein anhand des Namens neu instanziertes
Font-Objekt ersetzt.
Public Function IsFontProportional(ByVal FormObject As Variant, _
Optional Font As Variant) As Boolean
Dim nSaveFont As StdFont
With FormObject
If Not IsMissing(Font) Then
Set nSaveFont = .Font
If IsObject(Font) Then
If TypeOf Font Is StdFont Then
Set .Font = Font
Else
Exit Function
End If
ElseIf VarType(Font) = vbString Then
Set .Font = New StdFont
nTestFont.Name = CStr(Font)
End If
End If
IsFontProportional = _
CBool(.TextWidth("I") <> .TextWidth("M"))
If Not (nSaveFont Is Nothing) Then
Set .Font = nSaveFont
End If
End With
End Function
|