C++ Builder Snippets  


Menüeinträge zur Programmlaufzeit hinzufügen:
 
Folgende Routine demonstriert das Hinzufügen neuer Einträge einem Menü zur Programmlaufzeit.

Die Test-Anwendung besteht aus einem Formular, einer EditBox "editMenuCpt" für die Eingabe der Captions der neuen Einträge und einem TButton "btnAddMenuItem". Nach dem Anklicken der Schaltfläche wird ein TMenuItem dem Item "menuTst" des Hauptemenüs hinzugefügt

Zum Erzeugen eines Neuen TMenuItems bedienen wir uns der Funktion NewItem():
  ------------------------ BCB 4 - Hilfe ---------------------------

  extern PACKAGE TMenuItem * __fastcall
    NewItem(const AnsiString ACaption, TShortCut AShortCut,
    bool AChecked, bool AEnabled, Classes::TNotifyEvent &AOnClick,
    Word hCtx, const AnsiString AName);

  Mit einem Aufruf von NewItem erzeugen und initialisieren Sie einen
  Menüeintrag, wenn ein Menü zur Laufzeit programmgesteuert erstellt wird.

  ACaption   enthält den Text des Menüeintrags.
  AShortCut  steht für ein eventuell zugeordnetes Tastenkürzel.
  AChecked   bestimmt, ob der Menüeintrag mit einem Häkchen markiert wird.
  AEnabled   legt fest, ob der Menüeintrag aktiviert ist oder nicht.
  AOnClick   bestimmt die Ereignisbehandlungsroutine, die ausgeführt wird,
             sobald der Benutzer auf den Menüeintrag klickt.
  hCtx       benennt die Hilfekontext-ID für den Menüeintrag.

  AName      enthält den Namen des Menüeintrags, der programmintern zur
             Referenzierung verwendet werden kann.

  ------------------------------------------------------------------

Hinzufügen neuer Menüpunkte:

//---------------------------------------------------------------------------
// Hinzufügen eines neuen Menü-Eintrags beim Klick auf die Schaltläche
// "Eintrag hinzufügen"
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnAddMenuItemClick(TObject *Sender)
{
  if(editMenuCpt->Text.Trim() != EmptyStr)
  {
    TMenuItem* pTmpItem = NewItem(editMenuCpt->Text, 0falsetrue,
      menuClick, 0"NewMenuItem_" + IntToStr(menuTst->Count+1));
    menuTst -> Add(pTmpItem);
  }
}


Behandlung der OnClick-Ereignisse für die neuen Menüeinträge:

Beim Erzeugen des MenuItems übergeben wir der NewItem()-Funktion im 5. Parameter den Namen der Behandlungsroutine, die beim Anklicken der neuen Menüpunkte ausgeführt wird. Diese muss zunächst in der Header-Datei als void __fastcall menuClick(TObject *Sender) deklariert werden.

Der beim Aufruf dieser Funktion übergebene TObject-Zeiger kann dann mit Hilfe des dynamic_cast -Operators in TMenuItem* umgewandelt werden. Über diesen kann dann auf beliebige Eigenschaften des aufrufenden TMenuItems zugegriffen werden:

//---------------------------------------------------------------------------
// OnClick-Ereignisbehandlung für die neuen Menu-Items
//---------------------------------------------------------------------------
void __fastcall TfrmMain::menuClick(TObject *Sender)
{
  ShowMessage("Menüpunkt \"" + dynamic_cast <TMenuItem*>(Sender) -> Caption
    + "\" aufgerufen.");
}



  Download BCB4
Projekt-Quellcode
Download
Demo-Exe

© '99-2000 by S. Kreutzmann