Alphabetisch sortierte Schriftbildvorschau

Ich benutze das in WIN 11/97 von Ralf Nebelo vorgestellte Makro zur Vorschau auf die Auswirkung eines Schriftartenwechsels. Leider sind die im Dialog angezeigten Schriftarten nicht alphabetisch sortiert. Meine Versuche, eine Sortierung zu erzeugen, blieben leider fruchtlos. Gibt es dennoch einen Weg, die verschiedenen Schriftarten in alphabetischer Reihenfolge anzuzeigen?

Auch wenn Microsoft bei Listenobjekten in Visual Basic auf eine Methode zum Sortieren der ListeneintrΣge verzichtet, steht es Ihnen frei, die Sortierung selbst in die Hand zu nehmen. Sie k÷nnen das mit ein paar ─nderungen der Prozedur UserForm_Initialize erreichen. ZunΣchst lesen Sie die unsortierten Schriftartennamen in ein zusΣtzliches Datenfeld und nicht gleich in das Listenfeld. Das Datenfeld sortieren Sie dann mit Hilfe eines geeigneten internen Sortierverfahrens. Das WIN-Team hat fⁿr diese Sortieraufgabe Selection Sort gewΣhlt, da diese Methode leicht verstΣndlich ist und bei konstanten Durchschnittswerten stabil arbeitet. Anschlie▀end ⁿbernehmen Sie das sortierte Datenfeld in das Listenfeld. Um das Datenfeld anzulegen, ergΣnzen Sie die Dim-Anweisung in Zeile drei. Da Sie nicht wissen k÷nnen, wie viele Schriftarten installiert sind, bleiben die Klammern hinter dem Bezeichner A zunΣchst leer. Eine Dim- Anweisung funktioniert aber nur mit festen Vorgaben, weshalb Sie die Gr÷▀endefinition fⁿr das Datenfeld in den Programmablauf verschieben. Diese Neudefinition û siehe Zeile 13 û mu▀ stattfinden, bevor Sie die Schriftarten in das Datenfeld einlesen. Die Anweisung ReDim legt die Gr÷▀e des Datenfelds auf die Anzahl verfⁿgbarer Schriften fest. Die Korrektur mit dem Wert -2 resultiert aus der bei Null beginnenden Indizierung des Datenfelds, denn dabei soll die bereits verwendete Schriftart nicht noch einmal auswΣhlbar sein. In den anschlie▀enden Zeilen 14 bis 20 schreibt Word jede installierte Schriftart in das Datenfeld. Dabei bezeichnet die Laufvariable i die Anzahl der DurchlΣufe und gleichzeitig den aktuellen Index des Datenfelds. Falls die bereits benutzte Schriftart auftaucht, erh÷ht die Routine den Datenfeldindex nicht, so da▀ der folgende Durchlauf den letzten Eintrag ⁿberschreibt. Jetzt ist das Datenfeld bereit fⁿr die Sortierung. Die Zeilen 22 bis 36 implementieren den Selection Sort. Beginnend beim ersten Datenfeldeintrag vergleicht die Routine nun alle Werte mit dem ersten. Sobald sie einen Wert findet, der kleiner als der Ausgangswert A(i) ist, findet ein Austausch der beiden Werte statt. Dadurch ist gewΣhrleistet, da▀ am Ende des ersten Durchlaufs garantiert der kleinste Wert im ersten Element steht. Das Spiel wiederholt sich mit dem zweiten Datenfeldelement als Vergleichswert und so weiter, bis das Datenfeld komplett durchlaufen ist. Dabei fallen N2/2 Vergleiche und maximal N Austauschoperationen an. Fⁿr 100 installierte Schriftarten ergibt das 5 000 Vergleiche und maximal 100 Tauschoperationen. Abschlie▀end ist noch das aufgerΣumte Datenfeld in das Listenfeld zu ⁿbertragen. Dazu verwenden Sie die bereits aus dem Makro bekannte Routine, wie in den Zeilen 38 bis 43 gezeigt. Um die alphabetische Sortierung zu erhalten, mⁿssen Sie dafⁿr sorgen, da▀ Word die Vergleiche auch auf der richtigen Basis durchfⁿhrt. Word vergleicht Texte typischerweise auf Basis der ASCII-Werte. Dabei ist allerdings der fⁿr den Gro▀buchstaben T kleiner als der fⁿr den Kleinbuchstaben a und taucht deshalb vorher in der Liste auf. Um die landesspezifische lexikalische Sortierung zu erhalten, geben Sie im Deklarationsbereich des Moduls noch die Anweisung Option Compare Text. Beachten Sie, da▀ diese Anweisung die Sortierung fⁿr das gesamte Modul regelt. Sollten Sie die binΣre Sortierreihenfolge in diesem Modul ebenfalls ben÷tigen, kann dies zu Konflikten fⁿhren. In der Datei FRMSCHRIFTPROBE.FRM ist das im Kasten auf Seite 191 dargestellte Makro als Formulardatei auf der WIN-Monats-CD abgelegt. Um es zu laden, starten Sie den VB-Editor und fⁿhren Datei û Datei importieren aus. Falls Sie bereits ein Makro oder Formular mit dieser Bezeichnung geladen haben, sollten Sie es vorher schlie▀en.

Makro-Listing: Alphabetisch sortierte Schriftbildvorschau
Private Sub UserForm_Initialize ()╢
Dim AktFont as Variant╢
Dim A () As Variant╢
Dim i, j, KleinerWert As Integer╢
If Selection.Type = wdSelectionNormal Then╢
	Selection.Copy╢
With Me╢
	.Caption =  äSchriftprobeô╢
	.StartupPosition = 0╢
	.Left = Application.Width - .Width╢
End With╢
 æ****************Daten in Array schreiben****************╢
ReDim A (Application.PortraitFontNames.Count - 2) As Variant╢
i = 0╢
For Each AktFont In Application.FontNames╢
	A (i) = AktFont╢
	If Not Selection.Font.Name = AktFont Then╢
		i = i + 1╢
	End If╢
Next╢
 æ****************Daten im Array sortieren****************╢
i = 0╢
While i < Application.PortraitFontNames.Count - 2╢
	j = i + 1╢
	While j <= Application.PortraitFontNames.Count - 2╢
		KleinerWert = i╢
		If A (j) < A (KleinerWert) Then╢
			KleinerWert = j╢
			Speicher = A (KleinerWert)╢
			A (KleinerWert) = A (i)╢
			A (i) = Speicher╢
		End If╢
		j = j + 1╢
	Wend╢
	i = i + 1╢
Wend╢
 æ****************Daten aus Array auslesen****************╢
With ListBox1╢
	For i = 0 To Application.PortraitFontNames.Count - 2╢
		.AddItem A (i)╢
	Next╢
	.SetFocus╢
End With╢
Else╢
	MsgBox ôKein Text markiertô╢
	End╢
End If╢
End Sub╢