Home » Tipps & Tricks » Komponenten » TForm » Systemmenü verkleinern

Systemmenü verkleinern

Aus dem Systemmenü können Menüpunkte problemlos gelöscht werden. Die entscheidene Funktion ist DeleteMenu, die als zweiten Parameter die Nummer des Menüpunkts erwartet. Die Menüpunkte sind von oben nach unten beginnend bei 0 durchnummeriert. Löscht man beispielsweise den obersten Menüpunkt (Nummer: 0) rutschen die unteren Menüpunkte auch mit der Nummerierung nach oben.
Folgende Prozedur löscht den Schließen-Eintrag (Nummer: 6) und den Menütrennstrich (Nummer: 5) aus dem Systemmenü einer Anwendung:

procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: THandle;
begin
  Handle := GetSystemMenu(Self.Handle, False);
  if Handle0 then
  begin
    if not DeleteMenu(Handle, 6, MF_BYPOSITION) then
      RaiseLastOSError;
    if not DeleteMenu(Handle, 5, MF_BYPOSITION) then
      RaiseLastOSError;
  end;
end;

Da sich die Reihenfolge durch das Löschen und Hinzufügen von Einträgen während des Programmablaufs ändern kann, gibt es auch die Möglichkeit die Menüeintrage anhand ihrer ID-Nummer zu identifizieren.Die IDs der Menüeinträge sind bereits in der Windows.pas als Konstanten deklariert. Hier die wichtigsten Konstanten:

SC_RESTORE    = Wiederherstellen
SC_MOVE       = Verschieben
SC_SIZE       = Größe ändern
SC_MINIMIZE   = Minimieren
SC_MAXIMIZE   = Maximieren
SC_CLOSE      = Schließen

Der Menüteiler hat die ID 0.
Mithilfe des Parameters MF_BYCOMMAND werden die Menüeinträge über ihre ID gelöscht. Dazu muss die entsprechende Konstante dem zweiten Parameter übergeben werden:

procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: THandle;
begin
  Handle := GetSystemMenu(Self.Handle, False);
  if Handle0 then
  begin
    if not DeleteMenu(Handle, SC_CLOSE, MF_BYCOMMAND) then
      RaiseLastOSError;
  end;
end;

RaiseLastOSError ist erst ab Delphi 6 verfügbar. Programmierer, die mit älteren Versionen arbeiten müssen an dieser Stelle RaiseLastWin32Error verwenden.Wie sie das Systemmenü erweitern, können Sie unter den Verweisen lesen.