Font in App bar und Menü setzen (VB6)

ronaldh

Erfahrenes Mitglied
Hallo,
kennt jemand eine Möglichkeit, den Zeichensatz der application bar und des VB Menüs zu ändern?

Mit folgender Funktion kann man zwar wunderbar alle Controls, die die Font-Eigenschaft haben, auf einer Form ändern, wenn man die Funktion im Form_Load aufruft, jedoch ändert sich nichts am Menü und an der Leiste oben:

Public Sub ChangeFont(frm As Form, Optional FontName As String = "MS Reference Sans Serif", Optional FontSize As Single)
Dim ctL As Control
On Error Resume Next
frm.FontName = FontName
If Not IsMissing(FontSize) Then
If FontSize > 0 Then
frm.Font.Size = FontSize
End If
End If
For Each ctL In frm.Controls
ctL.Font.Name = FontName
If Not IsMissing(FontSize) Then
If FontSize > 0 Then
ctL.Font.Size = FontSize
End If
End If
Next

End Sub

Die Menüeinträge haben anscheinend überhaupt keine Font-Eigenschaft. Die Form hat zwar eine, dies wirkt sich aber nur auf Controls aus, die neu auf eine Form gesetzt werden.

Das ganze ist eine durchaus sinnvolle und ernsthafte Angelegenheit:
1. Die VB-Defaultschrift MS Sans Serif unterstützt nicht Microsoft ClearType, so dass diese Schriften dann immer etwas ausgefranst aussehen, wenn man die Form auf Bildschirmgröße vergrößert.
2. In manchen Anwendung benötige ich ausländische Zeichensätze, z.B. mongolische TT-Fonts. Da ist es natürlich richtig ärgerlich, wenn insbesondere die Menüs noch in normalen lateinischen Buchstaben dargestellt werden.

Hoffentlich weiß jemand was dazu, leider habe ich auch keine passende API gefunden, die hier weiter hilft.

Grüsse
Ronald
 
Schau dir mal die Menu-Kategorie auf ActiveVB an, da sind Möglichkeiten dabei, wie du das Systemmenu durch eigene Einträge ersetzt. Unter Umständen kannst du (so sich nichts findet) ja Graphiken statt Texte verwenden, die lassen sich ja mit Tricks einbinden. Ich schau aber noch, ob ich was in Verbindung Menu + Schriftart finde.


Der Doc!
 
Hallo Doc,

danke, aber das hilft leider nicht wirklich weiter. Ich finde in den API's alle möglichen Sachen zu Menüs, die sicherlich gut und wichtig sind, nur leider keine Möglichkeit, den Zeichensatz zu ändern.

Mit Bitmaps zu arbeiten ist in meinem Fall kaum möglich, da einerseits der Zeichensatz variabel ist, und erst zur Laufzeit gesetzt wird, und andererseits auch die zu Grunde liegenden Texte sprachabhängig aus Resource-Dateien kommen. Dies wäre dann extrem aufwendig, und kaum realisierbar.

Falls Dir noch was einfällt, würde ich mich freuen.

Eigentlich kann ich mir überhaupt nicht vorstellen, dass niemand anders dieses Problem hat.

Ciao,
Ronald
 
Hi, habe ein ähnliche Problem.
ich möchte nur eine andere Sprache übernehmen.
Meine App ist jetzt 2-sprachig nur nicht mein Menü und keiner kann so recht eine Antwort geben wie man dies ändert
Gruß
Krebsbachbub
 
Hallo,

wie machst Du das denn mit der 2-Sprachigkeit? Ich entwickele seit längerer Zeit mehrsprachige Software. Dazu verwende ich Resourcen-Files und setze mir je nach gewählter Sprache den Offset.

Das heißt, z.B. ist der Offset 5000. Unter Id 1 steht im Resourcenfile dann beispielsweise "Datei", unter Id 5001 steht dann File.

Dazu habe ich dann eine Funktion, die abhängig von der gewählten Spracheinstellung den Resourcenstring 1 oder 1+5000, also 5001, zurück gibt. Mit diesem String beschrifte ich dann zum Beispiel die Schaltfläche, die Menü-Caption usw.

Code:
Function LRStr(Ind As Long) As String
'Funktion läd den benötigten String aus Resourcendatei abhängig
'von getätigten Spracheinstellungen
   Dim SprTemp As Long
   On Local Error GoTo LrStrFehler
   If SprachUser Then      'Einstellungen unterschiedlich pro User
      SprTemp = SprOffsUser
   Else
      SprTemp = SprOffs
   End If
   LRStr = LoadResString(Ind + SprTemp)
   

   Exit Function

LrStrFehler:
   If Err = 326 Then
      LRStr = ""
      Resume Next
   End If


End Function

Das funktioniert gut, denn die Caption kann man bei Menüs sehr wohl setzen.

Und genau hier scheitere ich aber mit dem Font, weil ich in manchen Programmen mongolische Sprache einbinden will. Das ist grundsätzlich kein Problem, da ich dann in allen Controls der Form den Fontname auf einen mongolischen Truetype-Font setzen kann. Nur eben im Menü nicht!

Vielleicht findet ja doch jemand was, oder kann mir dabei helfen.
 
Die einzige funktionierende Lösung dürfte sein, die Systemweite Schriftart daraufhin zu ändern (Registry -> einfach googlen). Eine VB-Interne Lösung kenn ich da leider nicht.


Der Doc!
 
Hallo Doc,

Dein letzter Beitrag (systemweite Schriftart in der Registry ändern) hat mich zur Lösung gebracht! Die systemweite Schriftart wollte ich nicht ändern, weil die Auswirkungen doch sehr weitreichend sind, und gerade die Mongolen natürlich auch viel mit englischer Software arbeiten. Wenn dann englische Texte in mongolischen Zeichen angezeigt werden, geht natürlich gar nichts mehr!

Es geht jedoch auf folgende Weise:

In den Windows-Eigenschaften der Anzeige, dort Darstellung/Erweitert kann man als Element "Menü" wählen. Und dafür kann man die Schriftart ändern.

Dies betrifft dann neben allen Windows-Menüs auch die VB-Menüs. Damit kann (und muss...) man dann leben.

Nochmal danke für Deine Gedankenanregung!

Gruss
ronaldh
 
Zu meinem nun alten Eintrag habe ich eben noch einen Link gefunden, wie die System Fonts aus VB heraus prima geändert werden können.

Damit klappt das prima (falls jemand anders dieses Problem auch mal hat).

Ronald
 
Zurück