vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Menüeinträge eines Forms verändern 
Autor: Tolwyn
Datum: 16.11.01 07:10

Hi,

vor einiger Zeit kam in einem Posting bezüglich dem Umgang mit Formular-Menüs die Frage auf, ob es möglich ist das Aussehen von Menüeinträgen (Schriftart, Gräße, etc) zu verändern.
Leider hab das Posting nicht mehr gefunden, in jedem Fall ist hier eine Lösung. Vielleicht erinnert sich ja wer an die Frage und kann die Antwort gebrauchen.

Einfach ein neues Form mit mehreren Menüs erstellen. Menü 2 muss 3 Unterpunkte haben (bei mir mnuTest1, mnuTest2 und mnuTest3). Dann brauchen wir noch eine Picture Box mit dem Namen "picMenu" und der Eigenschaft "Index = 0". Nun nur noch diesen Code ins Form kopieren und fertig.

 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&
 
Private Sub Form_Load()
  '--------------------------------------------------
  Dim i             As Long
  Dim hMenu         As Long     ' Handle des Form Menüs
  Dim hSubMenu      As Long     ' Handle betreffenden "SubMenüs"
  Dim lMenuItemID   As Long     ' Das jeweilige Menü Items
  Dim lFont         As Long     ' Laufende Nummer der Schriftart
  Dim lHeightMax    As Long     ' Maximale Höhe
  Dim lWidthMax     As Long     ' Maximale Breite
  Dim sMenuText     As String   ' Der jeweilige Menütext
  '--------------------------------------------------
  On Error GoTo Error_
  lFont = -2
  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 = 1  ' Sicher ist sicher
  '--------------------------------------------------
  hMenu = GetMenu(Me.hwnd)
  hSubMenu = GetSubMenu(hMenu, 1)
  '--------------------------------------------------
  For i = 1 To 3
    sMenuText = CStr("SubMenü Test " & i)
    Load picMenu(picMenu.Count)
    With picMenu(picMenu.Count - 1)
      .Font.Name = lFont
      .Font.Size = 12
      ' Höhe
      .Height = .TextHeight(sMenuText)
      If .Height > lHeightMax Then lHeightMax = .Height
      ' Breite
      .Width = .TextWidth(sMenuText)
      If .Width > lWidthMax Then lWidthMax = .Width
      ' 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
 
Private Sub Form_Unload(Cancel As Integer)
  Dim i         As Long
  For i = 1 To 3
    Unload picMenu(i)
  Next i
End Sub
 
Private Sub mnuTest1_Click()
  Debug.Print "mnuTest1"
End Sub
 
Private Sub mnuTest2_Click()
  Debug.Print "mnuTest2"
End Sub
 
Private Sub mnuTest3_Click()
  Debug.Print "mnuTest3"
End Sub
Der Code sollte eigentlich verständlich sein
Gruß
Tolwyn
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Menüeinträge eines Forms verändern86Tolwyn16.11.01 07:10

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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