Mit TMenuItems booleans tooglen (viele)



  • Hi,
    ich habe eine Art Editor indem ich einige ca. 20 verschiedene Modi habe.

    In meinem Hauptfenster habe ich ein Popupmenu das alle Modi auflistet.

    bool Edit_Dies
    bool Edit_Das
    bool Edit_Jenes
    ...

    Meine Frage ist jetzt wie ich die Verbindung so hinkriege dass ich für den OnClick Event

    TMenuItem->Checked = !bool;
    bool = !bool;

    immer dieselbe Onclick Routine verwenden kann? Gibt es da Verfahren oder bin ich gewzungen eine Map<TMenuItem, bool> oder Map<TMenuItem->Caption (AnsiString), bool> anzulegen um dann zu wissen welcher boolsche wert betroffen ist?

    Wie macht ihr sowas?

    mfg & danke



  • Hallo,

    Eine map<TMenuItem, bool> ist doch eine gute Idee. Eine weitere Variante wäre, die bools in ein Array zu packen und den Index in das Tag des dazugehörigen TMenuItems.
    Dannkönnte man sowas machen.

    TMenuItem* item = dynamic_cast<TMenuItem>(Sender);
    if( item )
    {
      if( item->Tag < boplarray.size())
        item->Checked = !boplarray[item->Tag];
    }
    


  • Jau danke, habe mir fast schon gedacht das es etwas so laufen wird.
    Nur kommt diese Art Problematik relativ häufig vor, z.B: bei Listboxen etc. dass ich lieber mal nachfragen wollte ob es nicht einen weg geht z.B. soetwas zu veranstalten. Sozusagen den Fastcall überladen

    TObject->OnClick = MyUniversialFunktion(&ref_bool);



  • Du kannst natürlich zu OnClick auch eigene Funktionen zuweisen. Sie müssen nur die gleiche Signatur haben wie das Orginal.

    void __fastcall TMyForm::MyClick(TObject *Sender)
    


  • Jau klar, bringt nur leider nix 😉

    dank dir


Anmelden zum Antworten