Announcement

Collapse
No announcement yet.

Dynamisches MainMenu und alles drumherum . . .

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamisches MainMenu und alles drumherum . . .

    Hallo zusammen,

    ich habe folgendes Problem:

    und zwar möchte ich ein dynamisches MenÜ aus einer Datenbank lesen (mit allen nötigen Infos) z.B. Shortcut, Event usw.

    Ich habe so etwas mal unter C++ gemacht, wenn auch nicht gerade der beste Weg, aber es hat funktioniert. Da wir hier alle uns mit dem .Net auseinander setzen, versuche ich hierzu schonmal kleinere Dinge umzusetzen. Also mit anderen Worten, hier ist ein Frischling am Werke, xder für jede Hilfe dankbar ist.

    Das Ganze wird aus meiner MainForm aufgerufen, in der eine kleine Klasse untergebracht ist, die all diese Dinge übernehmen sollte.

    Danke schonmal für die Hilfe. Aber hier erstmal die Sourcen aus C++ . . .

    <pre>
    Hier also die Struktur:

    typedef struct functions {
    AnsiString fMenuName;
    TNotifyEvent fktPointer;
    AnsiString fktName;
    } tsFunctions, *tpsFunctions;

    Jetzt die Routine in meiner sogenannten Main

    fMainMenu = new TMainMenu(this);
    fMainMenu->Name = "fMain";
    fMainMenu->AutoHotkeys = maManual; Session->Functions = (tpsFunctions) calloc(5, sizeof(tsFunctions));
    Session->FunctionCount = 5;
    memset(Session->Functions, '\0', sizeof(tsFunctions)); Session->Functions[0].fktPointer = ExitProgram;
    Session->Functions[0].fktName = "ExitProgram"; Session->Functions[1].fktPointer = ShowAboutBox;
    Session->Functions[1].fktName = "ShowAboutBox"; Session->Functions[2].fktPointer = IconViewstyle;
    Session->Functions[2].fktName = "IconViewstyle"; Session->Functions[3].fktPointer = ReportViewstyle;
    Session->Functions[3].fktName = "ReportViewstyle"; Session->Functions[4].fktPointer = ShowUserManagement;
    Session->Functions[4].fktName = "ShowUserManagement"; Session->ReadMenus(fMainMenu);

    Und jetzt die eigentliche Funktion innerhalb meiner eigenen Klasse

    void __fastcall TGlbFunctions::ReadMenus(TMainMenu *Menu)
    {
    AnsiString tmpSQL;
    TNotifyEvent tmpFunction;
    AnsiString ShortCutKey;
    bool activ = false;
    fMenuEvents = new TStringList();
    fMenuEvents->Clear(); fMenuShortcuts = new TStringList();
    fMenuShortcuts->Clear(); fSQL = "";
    fSQL.SetLength(0);
    fSQL = "SELECT * FROM menus ORDER BY menuid";
    fDBEngine->Connected = false;
    fDBTable->Active = false;
    fDBTable->SQL->Clear();
    fDBTable->SQL->Add(fSQL);
    fDBEngine->Connected = true;
    fDBTable->Active = true;
    fDBTable->First();
    while (! fDBTable->Eof ) {
    AnsiString tmpData;
    tmpData = "";
    ShortCutKey = fDBTable->FieldByName("ShortCut")->AsString;
    tmpData = fDBTable->FieldByName("Caption")->AsString;
    if ( !fLanguage->Values[tmpData].IsEmpty() ) {
    tmpData = fLanguage->Values[tmpData];
    }
    if ( fDBTable->FieldByName("MainID")->AsInteger == 0 ) {
    fMainItem = new TMenuItem(Menu);
    fMainItem->Name = tmpData + IntToStr(fMainItem->Count+1);
    fMainItem->Caption = tmpData;
    fMainItem->AutoHotkeys = maManual;
    Menu->Items->Add(fMainItem);
    } else {
    activ = false;
    if ( fDBTable->FieldByName("Enabled")->AsInteger == 1 ) {
    activ = true;
    } else {
    activ = false;
    }
    bool checked = false;
    if ( UpperCase(fDBTable->FieldByName("Checked")->AsString) == "X" ) {
    checked = true;
    }
    for ( int i = 0; i < fFunctionCount; i++ ) {
    AnsiString test1, test2, test3;
    if ( strcmp(fFunctions[i].fktName.c_str(), fDBTable->FieldByName("OnClickEvent")->AsString.c_str()) == 0 ) {
    fFunctions[i].fMenuName = fDBTable->FieldByName("Caption")->AsString;
    tmpFunction = fFunctions[i].fktPointer;
    break;
    }
    }
    if ( ShortCutKey.IsEmpty() ) {
    fSubItem = NewItem(tmpData, NULL, checked, activ, tmpFunction, TextToShortCut(ShortCutKey), fDBTable->FieldByName("Caption")->AsString);
    } else {
    fMenuShortcuts->Add(ShortCutKey + "=" + fDBTable->FieldByName("OnClickEvent")->AsString);
    fSubItem = NewItem(tmpData + " [" + ShortCutKey + "]", NULL, checked, activ, tmpFunction, TextToShortCut(ShortCutKey), fDBTable->FieldByName("Caption")->AsString);
    }
    fMainItem->Add(fSubItem);
    }
    fDBTable->Next();
    }
    }
    </pre>

    Gruß

    Sascha
Working...
X