vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Oberfläche · Menüs   |   VB-Versionen: VB4, VB5, VB610.12.01
Farbige Menüs in unterschiedlichen Schriften

Weg mit den eintönigen Menüs in VB und rein in die bunten Möglichkeiten des Menü-Windows-API ;-)



Autor:   Thomas BannertBewertung:     [ Jetzt bewerten ]Views:  22.647 
ohne HomepageSystem:  Win9x, WinNT, Win2k, Win8, Win10, Win11 Beispielprojekt auf CD 

Gehören Sie auch zu denjenigen, die es satt haben, dass die Menüs innerhalb der eigenen Anwendung immer im tristen Windows-Grau (oder der im System festgelegten Farbe) angezeigt werden?

Warum kann man nicht einfach wenigstens die Vordergrundfarbe frei festlegen? Das Ändern der Schriftart und/oder der Schriftattribute wäre eigentlich auch nicht schlecht.

Also, worauf warten Sie!
Unser nachfolgender Tipp zeigt, wie sich die Menüs, welche Sie mit dem Menüeditor in der VB-Entwicklungsumgebung erstellt haben, zur Laufzeit ein wenig optisch aufpeppen lassen

Um das ganze auch gleich ausprobieren zu können, erstellen Sie ein neues Projekt, öffnen den VB-Menüeditor und legen folgende Menüstruktur fest:

Beenden (MenuExit)
Test (MenuTest)
     Eintrag 1 (mnuTest(0))
     Eintrag 2 (mnuTest(1))
     Eintrag 3 (mnuTest(2))

Plazieren Sie nun noch auf die Form eine PictureBox (picMenu) und setzen die Eigenschaften, wie folgt:
AutoRedraw = True
Index = 0
Visible = False

Was Sie jetzt noch benötigen, ist nachfolgender Code. Diesen können Sie direkt in den Codeteil der Form einfügen.

Option Explicit
 
' API Deklarationen
Private Declare Function GetMenu Lib "user32" ( _
  ByVal hwnd As Long) As Long
 
Private Declare Function GetSubMenu Lib "user32" ( _
  ByVal hMenu As Long, _
  ByVal nPos As Long) As Long
 
Private Declare Function GetMenuItemID Lib "user32" ( _
  ByVal hMenu As Long, _
  ByVal nPos As Long) As Long
 
Private Declare Function ModifyMenu Lib "user32" _
  Alias "ModifyMenuA" ( _
  ByVal hMenu As Long, _
  ByVal nPosition As Long, _
  ByVal wFlags As Long, _
  ByVal wIDNewItem As Long, _
  ByVal lpString As Any) As Long
 
' API Konstanten
Const MF_BYCOMMAND = &H0&
Const MF_BITMAP = &H4&

Beim Laden der Form werden nun die drei Einträge das zweite Menüs (Test) ein wenig manipuliert:

Private Sub Form_Load()
  Dim i As Long
 
  ' Handle der Menüzeile
  Dim hMenu As Long
 
  ' Handle betreffenden "SubMenüs"
  Dim hSubMenu As Long
 
  ' Das jeweilige Menü Items
  Dim lMenuItemID As Long
 
  ' Laufende Nummer der Schriftart
  Dim lFont As Long
 
  ' Der jeweilige Menütext
  Dim sMenuText As String
 
  ' Vordergrundfarben
  ReDim fColor(3) As Long
 
  fColor(1) = vbBlack
  fColor(2) = vbBlue
  fColor(3) = vbBlack
 
 
  On Error GoTo Error_
  ' Prüfen, ob Schriftart "Verdana" vorhanden
  lFont = -1
  For i = 0 To Screen.FontCount
    If Screen.Fonts(i) = "Verdana" Then
      lFont = i
      Exit For
    End If
  Next i
  If lFont = -1 Then lFont = 0 ' Sicher ist sicher
 
  ' Handle der Menüzeile
  hMenu = GetMenu(Me.hwnd)
 
  ' Handle des "Test"-Menüs
  hSubMenu = GetSubMenu(hMenu, 1)
 
  ' Menü-Einträge des "Test"-Menüs manipulieren
  For i = 1 To 3
    sMenuText = mnuTest(i - 1).Caption
    Load picMenu(picMenu.Count)
    With picMenu(picMenu.Count - 1)
      ' neue Schriftart setzen
      .Font.Name = Screen.Fonts(lFont)
      .Font.Size = 6 + i
      .Font.Bold = (i = 2)
 
      ' Höhe
      .Height = .TextHeight(sMenuText) + 40
 
      ' Breite
      .Width = .TextWidth(sMenuText) + 105
 
      ' Vordergrundfarbe
      .ForeColor = fColor(i)
 
      ' Text des Menüeintrages in die Picture Box
      picMenu(picMenu.Count - 1).Print sMenuText
      .Picture = .Image
 
      ' Picture in das Menü setzten
      lMenuItemID = GetMenuItemID(hSubMenu, i - 1)
      Call ModifyMenu(hSubMenu, lMenuItemID, _
        MF_BYCOMMAND Or MF_BITMAP, lMenuItemID, _
        CLng(.Picture))
 
      ' und schon ist der Dekel auf dem Topf ;-)
    End With
  Next i
  Exit Sub
 
Error_:
  ' ...
End Sub

Starten Sie das Projekt und öffnen Sie das Menü "Test" - und lassen sich überraschen

Wie funktioniert das?
Ganz einfach Wir gaukeln dem Menü vor, dass es sich um Bilder handelt, welche anstelle des Text-Eintrags dann angezeigt werden sollen. Und es sind ja eigentlich auch Bilder, da wir den Text in der gewünschten Schrift und Farbe in eine PictureBox "malen" und das so erzeugte Bild dem Menü zuweisen.
 

Dieser Tipp wurde bereits 22.647 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (3 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel