ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 03.07.2000

Diese Seite wurde zuletzt aktualisiert am 03.07.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Schriftgrößen auflisten

Zurück...


Anzeige

(-hg) mailto:hg_fontsizes@aboutvb.de

Während das Screen- und Printer-Objekt uns Listen der für den Bildschirm oder den eingestellten Drucker verfügbaren Fonts liefern, finden wir leider nirgendwo eine Liste der verfügbaren Schriftgrößen eines Fonts. Zwar können Sie einem Font-Objekt (eines Steuerelements oder eines Containers) jede beliebige Größe in der Maßeinheit vbPoints zuweisen. Doch werden Sie feststellen, dass der tatsächliche Wert nach einer Zuweisung oft vom ursprünglichen zugewiesenen Wert abweicht. Das Font-Objekt berechnet automatisch die auf dem Bildschirm real darstellbare Größe und gibt diese in seiner Size-Eigenschaft zurück.

Soll der Anwender eine Schriftgröße aus einer Liste (etwa in einer ComboBox) auswählen können, wäre es naheliegend, ihm auch nur die tatsächlich verfügbaren Schriftgrößen zur Auswahl zu stellen. Denn diese sind nicht bei allen Schriften gleich. Bei Truetype-Schriften gibt es meistens (systemabhängig) nur zwei verschiedene Wertefolgen. Aber bei den verfügbaren Schriftgrößen der Standard- und Systemschriften (Fixedsys, MS Serif, MS Sans Serif, System) gibt es doch größere Unterschiede. Diese sind auch nicht frei skalierbar und stehen in nur wenigen festen Größen zur Verfügbar.

Um eine Liste der tatsächlichen Schriftgrößen zu erhalten, machen wir uns die Eigenschaft des Font-Objekts zunutze, nach einer Zuweisung jeweils den realen Wert zurück zu geben. Weisen Sie der Reihe nach alle Größen eines gewünschten Bereichs (etwa von 1 bis 100) der Size-Eigenschaft zu und lesen Sie den Wert der Eigenschaft sofort wieder aus. Da dabei manche Werte mehrfach vorkommen, müssen Sie diese Dubletten irgendwie aussieben. Der einfachste Weg ist die Verwendung einer Collection, in die Sie die gefundenen Größen einfügen. Verwenden Sie dabei den Wert auch als Schlüssel (in einen String konvertiert), können Sie jeden Wert nur einmal einfügen. Die überzähligen Einfügeversuche können Sie über eine Fehlerbehandlung automatisch ignorieren.

Wenn Sie die Werte in einem anderen ScaleMode-Maßstab als vbPoints benötigen, können Sie die Werte vor dem Einfügen in die Collection mit der ScaleY-Methode eines Containers (Form, PictureBox, Printer, UserControl usw.) umrechnen.

Die Funktion FontSizes liefert Ihnen eine so zusammengestellte Liste zu jeder beliebigen Schrift für einen frei wählbaren Größenbereich (Voreinstellung 1 bis 100). Geben Sie im optionalen Parameter ScaleMode einen anderen Maßstab als vbPoints an, erfolgt die Umrechnung automatisch - Sie müssen dann allerdings den Container dazu angeben.

Public Function FontSizes(FontName As String, _
 Optional ByVal MinSize As Single = 1, _
 Optional ByVal MaxSize As Single = 100, _
 Optional Container As Object, _
 Optional ByVal ScaleMode As ScaleModeConstants = vbPoints) _
 As Collection

  Dim nFont As New StdFont
  Dim i As Integer
  Dim nSize As Single
  Dim nFontSizes As Collection
  
  Set nFontSizes = New Collection
  With nFont
    .Name = FontName
    If ScaleMode <> vbPoints Then
      On Error Resume Next
      For i = MinSize To MaxSize
        .Size = i
        nSize = Container.ScaleY(.Size, vbPoints, ScaleMode)
        nFontSizes.Add nSize, CStr(nSize)
      Next 'i
    Else
      On Error Resume Next
      For i = MinSize To MaxSize
        .Size = i
        nSize = .Size
        nFontSizes.Add nSize, CStr(nSize)
      Next 'i
    End If
  End With
  Set FontSizes = nFontSizes
End Function

Die Funktion FontSizesArray liefert die Größenliste als Array. Intern ruft sie dazu die obenstehende FontSizes-Funktion auf, damit wieder die Dubletten eliminiert werden. Im optionalen Parameter OptionBase können Sie zusätzlich angeben, an welcher Untergrenze das Array beginnen soll (Voreinstellung 1).

Public Function FontSizesArray(FontName As String, _
 Optional ByVal MinSize As Single = 1, _
 Optional ByVal MaxSize As Single = 100, _
 Optional ByVal OptionBase As Integer = 1, _
 Optional Container As Object, _
 Optional ByVal ScaleMode As ScaleModeConstants = vbPoints) _
 As Variant

  Dim nFontSizes As Collection
  Dim i As Integer
  Dim nArray() As Single
  Dim nIndex As Integer
  
  Set nFontSizes = _
   FontSizes(FontName, MinSize, MaxSize, Container, ScaleMode)
  nIndex = OptionBase
  ReDim nArray(OptionBase To OptionBase + nFontSizes.Count - 1)
  For i = 1 To nFontSizes.Count
    nArray(nIndex) = nFontSizes(i)
    nIndex = nIndex + 1
  Next 'i
  FontSizesArray = nArray
End Function

Die beiden Prozeduren FontSizesList und FontSizesCombo füllen eine ListBox bzw. eine ComboBox mit der Liste der Schriftgrößen. Auch sie erstellen intern zunächst eine Collection über die Funktion FontSizes.

Public Sub FontSizesList(ListBox As ListBox, FontName As String, _
 Optional ByVal MinSize As Single = 1, _
 Optional ByVal MaxSize As Single = 100, _
 Optional Container As Object, _
 Optional ByVal ScaleMode As ScaleModeConstants = vbPoints)

  Dim nFontSizes As Collection
  Dim i As Integer
  
  Set nFontSizes = _
   FontSizes(FontName, MinSize, MaxSize, Container, ScaleMode)
  With ListBox
    .Clear
    For i = 1 To nFontSizes.Count
      .AddItem nFontSizes(i)
    Next
  End With
End Sub

Public Sub FontSizesCombo(ComboBox As ComboBox, FontName As String, _
 Optional ByVal MinSize As Single = 1, _
 Optional ByVal MaxSize As Single = 100, _
 Optional Container As Object, _
 Optional ByVal ScaleMode As ScaleModeConstants = vbPoints)

  Dim nFontSizes As Collection
  Dim i As Integer
  
  Set nFontSizes = _
   FontSizes(FontName, MinSize, MaxSize, Container, ScaleMode)
  With ComboBox
    .Clear
    For i = 1 To nFontSizes.Count
      .AddItem nFontSizes(i)
    Next
  End With
End Sub

Modul modFontSizes und Beispiel-Projekt (fontsizes.zip - ca. 3,2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer