Menüs ganz einfach


Ein sehr beliebter Anwendungsbereich für Ressourcen sind Menüs. Menüs sind meist statisch, die sich ändernden Einträge werden entweder deaktiviert oder nachträglich ausgeblendet. Diese Möglichkeit zur fast beliebigen nachträglichen Bearbeitung ist eine ideale Voraussetzung, um zumindest das Grundgerüst des Menüs in eine Ressource zu packen, anstatt jeden Eintrag einzeln hinzuzufügen.

Der Ressourcentyp dazu ist MENU (Vorsicht: nicht verwechseln mit dem Statement MENU!). Das einzig relevante Statement einer MENU-Ressource ist LANGUAGE, das die gleiche Bedeutung wie bei den Dialogen hat.
Eine MENU-Ressource besteht aus zwei Arten von Items: MENUITEM-Controls und POPUP-Controls. MENUITEMs sind einfache Menüeinträge, POPUPs sind aufklappbare Menüs die wiederum selbst MENUITEMs und POPUPs beinhalten können.

Eine Ressource für das Search-Menü aus Delphi würde wie folgt aussehen:

100 MENU
{
  POPUP "&Search"
  {
    MENUITEM "&Find...", 101
    MENUITEM "Fin&d in Files...", 102
    MENUITEM "&Replace...", 103
    MENUITEM "&Search Again", 104
    MENUITEM "&Incremental Search", 105
    MENUITEM SEPARATOR
    MENUITEM "&Go to Line Number...", 106
    MENUITEM "Find &Error", 107
  }
}

Dieses Menü kann man jetzt wie gewohnt mit LoadMenu laden und mit SetMenu einem Fenster zuweisen.

Wie gesagt, eine MENU-Ressource kann mehrere Einträge besitzen, genauso wie ein POPUP-Control selbst auch POPUPs aufnehmen kann. Ein komplexeres Menü sähe also so aus:

100 MENU
{
  POPUP "&Search"
  {
    MENUITEM "&Find...", 101
    MENUITEM "Fin&d in Files...", 102
    MENUITEM "&Replace...", 103
    MENUITEM "&Search Again", 104
    MENUITEM "&Incremental Search", 105
    MENUITEM SEPARATOR
    MENUITEM "&Go to Line Number...", 106
    MENUITEM "Find &Error", 107
  }

  POPUP "&zweites Menü"
  {
    MENUITEM "ein schöner &Eintrag", 110
    POPUP "&und sogar ein Untermenü"
    {
      MENUITEM "da ist der &Untereintrag", 120
    }
  }
}

Was man allerdings immer noch selber machen muss ist, den Menüeinträgen Bitmaps und Tastenkürzel zuzuweisen. Dafür gibt es in Menü-Ressourcen (noch) keine Möglichkeit.