Menuitems aus einer ini erstellen

// im *.h der Form:
private:
void __fastcall OnUserMenuClick(TObject *Sender);

.
.
.

// in *.cpp der Form:

// beim Klick auf Button1 wird das Menu im Hauptmenu erzeugt
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TMenuItem *NewItem = new TMenuItem(Application);
    TStringList *ssMenuItems = new TStringList();

    // instanz der inidatei erstellen (liegt im programmpfad)
    TIniFile *iniDatei = new TIniFile(AnsiString(ExtractFilePath(Application->ExeName)) + "PROGRAMM.INI");

    iniDatei->ReadSection("Default", ssMenuItems);

    // hauptmenü-punkt erstellen
    NewItem->Caption = "Default";
    MainMenu1->Items->Add(NewItem);

    for (int j = 0; j < ssMenuItems->Count; j++)
    {
        // untermenü-punkte erstellen
        TMenuItem *NewSubItem = new TMenuItem(Application);
        NewSubItem->Caption = ssMenuItems->Strings[j];

        // OnClick-Methode für den Menüpunkt festlegen
        // -> hier alle ein und die selbe Methode
        NewSubItem->OnClick = OnUserMenuClick;

        // untermenüpunkt dem hauptpunkt zuordnen
        NewItem->Add(NewSubItem);
    }

    // müssen bei programmende freigegeben werden,
    // da sonst das menü sofort wieder verschwindet
    // oder übernimmt die Anwendung die Freigabe??
    // delete NewItem;

    delete ssMenuItems;
    delete iniDatei;
}

void __fastcall TForm1::OnUserMenuClick(TObject *Sender)
{
    // caption des geklickten Menüpunktes anzeigen
    ShowMessage(dynamic_cast <TMenuItem*-> (Sender)->Caption);
}

Schreibe einen Kommentar