...
Type
TChar128 =
array[0..128]
of Char;
...
// Diese Funktion erstellt auch nur ein Menü, allerdings habe ich hier
// zeigen wollen wie man in den einzelnen Menü's Untermenüs einfügt.
// An einer Prozedure für Untermenüs wird gearbeitet.
procedure nAddMenu(wnd: hwnd; MainMenuName: TChar128);
var
I: Integer;
Menu, MyMenu, hMnu2: HMENU;
Buffer:
array [0..128]
of Char;
mii: TMenuItemInfo;
begin
Menu := GetMenu(Wnd);
// Menü-Handle ermitteln
zeroMemory(@Buffer, SizeOf(Buffer));
if Menu <> 0
then
begin
I := 0;
while I < GetMenuItemCount(Menu)
do // wenn Menü vorhanden, dann weiter
begin
GetMenuString(Menu, I, Buffer, SizeOf(Buffer), MF_BYPOSITION);
if Buffer = MainMenuName
then // Wenn eigener Menüeintrag vorhanden
Break;
// Abbruch!
Inc(I);
end;
if I < GetMenuItemCount(Menu)
then
Exit;
MyMenu := CreateMenu;
// Hauptmenüpunkt erstellen
AppendMenu(MyMenu, MF_STRING
or MF_ENABLED, 40001, '
Test0&1');
// Menüeintrag
AppendMenu(Menu, MF_STRING
or MF_POPUP, UINT(MyMenu), MainMenuName);
// Menüname
hMnu2 := CreatePopupMenu();
// Untermenü erstellen
AppendMenu(hMnu2, MF_STRING, 40002, '
Untermenü2');
// Untermenüeinträge
// Das Untermenü erhält den Text "Weiter"
// Hier wird die Bezeichnung des Untermenüs definiert.
// Mit AppendMenu (s.o.) wird in hMnu2 die eigentlichen Items eingefügt
mii.cbSize := sizeof(TMenuItemInfo);
mii.fMask := MIIM_SUBMENU
or MIIM_STRING
or MIIM_ID;
mii.wID := 40003;
mii.hSubMenu := hMnu2;
mii.dwTypeData := PAnsiChar('
Untermenü');
AppendMenu(MyMenu, MF_STRING
or MF_BYPOSITION
or MF_POPUP, hMnu2, '
Weiter');
// zweites Untermenü
hMnu2 := CreatePopupMenu;
// diesmal mit zwei Einträgen
AppendMenu(hMnu2, MF_STRING, 40005, '
TEST NUN ABER');
AppendMenu(hMnu2, MF_STRING, 40006, '
Weiter');
// Untermenü definieren.
mii.cbSize := sizeof(TMenuItemInfo);
mii.fMask := MIIM_SUBMENU
or MIIM_STRING
or MIIM_ID;
mii.wID := 40004;
mii.hSubMenu := MyMenu;
mii.dwTypeData := PAnsiChar('
test3');
AppendMenu(MyMenu, MF_STRING
or MF_BYPOSITION
or MF_POPUP, hMnu2, '
Test 03');
end;
end;
procedure AddSubMenu(wnd: hwnd; InMainMenu: TChar128; MenuItem: TChar128; ID: Integer);
var
I, J: Integer;
MenuHnd, MyMenu, hMnu2: HMENU;
Buffer:
array [0..128]
of Char;
MenuInfo: TMenuItemInfo;
begin
MenuHnd := GetMenu(wnd);
// Menu-Handle ermitteln
zeroMemory(@Buffer, SizeOf(Buffer));
// Buffer initialisieren
if MenuHnd <> 0
then // Wenn Menu-Handle gefunden wurde dann weiter
begin
I := 0;
// Zähler für MenuItems
J := GetMenuItemCount(MenuHnd);
// Items des Menu's "MenuHnd" ermitteln und in "J" speichern
while I < J
do // Solange der Zähler "I" kleiner ist als die Anzahl
// der Menüs dann weiter
begin
GetMenuString(MenuHnd, I, Buffer, SizeOf(Buffer), MF_BYPOSITION);
// Menünamen ermitteln und in "Buffer" speichern
If Buffer = MenuItem
Then // InMainMenu gefunden...
begin
Break;
end
Else begin
hMnu2 := CreatePopupMenu();
AppendMenu(hMnu2, MF_STRING, 40002, '
Untermenü2');
// Untermenüeinträge
MenuInfo.cbSize := SizeOf(TMenuItemInfo);
MenuInfo.fMask := MIIM_SUBMENU
or MIIM_STRING
or MIIM_ID;
MenuInfo.wID := ID;
MenuInfo.hSubMenu := hMnu2;
MenuInfo.dwTypeData := MenuItem;
InsertMenuItem(MenuHnd, 1, FALSE, MenuInfo);
end;
inc(I);
end;
end;
end;