02 Statuszeile und Menu
15 Menu erweitert
Hinzufügen mehrere Menüpunkte.
Hier wird dies auch der Übersicht zu liebe gesplittet gemacht.
Für eigene Kommandos, muss man noch Kommdocode definieren.
Es empfiehlt sich Werte > 1000 zu verwenden, so das es keine Überschneidungen mit den Standard-Codes gibt.
const
cmList = 1002; // Datei Liste
cmAbout = 1001; // About anzeigen
Für ein Menu muss man InitMenuBar vererben.
type
TMyApp = object(TApplication)
procedure InitStatusLine; virtual; // Statuszeile
procedure InitMenuBar; virtual; // Menü
end;
Mam kann die Menüeinträge auch gesplittet über Pointer machen.
Ob man es verschachtelt oder splittet, ist Geschmacksache.
Mit NewLine kann man eine Leerzeile einfügen.
Es empfiehlt sich wen bei einem Menüpunkt ein Dialog aufgeht, Hinter der Bezeichnung ... zu schreiben.
procedure TMyApp.InitMenuBar;
var
Rect: TRect; // Rechteck für die Menüzeilen-Position.
M: PMenu; // Ganzes Menü
SM0, SM1, // Submenu
M0_0, M0_1, M0_2, M1_0: PMenuItem; // Einfache Menüpunkte
begin
GetExtent(Rect);
Rect.B.Y := Rect.A.Y + 1;
M1_0 := NewItem('~A~bout...', '', kbNoKey, cmAbout, hcNoContext, nil);
SM1 := NewSubMenu('~H~ilfe', hcNoContext, NewMenu(M1_0), nil);
M0_2 := NewItem('~B~eenden', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil);
M0_1 := NewLine(M0_2);
M0_0 := NewItem('~L~iste', 'F2', kbF2, cmList, hcNoContext, M0_1);
SM0 := NewSubMenu('~D~atei', hcNoContext, NewMenu(M0_0), SM1);
M := NewMenu(SM0);
MenuBar := New(PMenuBar, Init(Rect, M));
end;