Mes propos sont aussi applicables à un TCategoryPanelGroup ou TCategoryButtons qui serait le plus proche de ce TJvXPBar, ce dernier ressemble à un TOutlookBar à l'époque de D5
Tous ces composants se ressemblent, ils ont forcément les méthodes d'Ajout de Category et l'ajout de Button au sein d'une Category
Justement j'ai aidé un collègue sur TCategoryButtons, même comportement que toi
l'idée fut d'avoir un TCategoryButtons complet et un TCategoryButtons vide
Lors de l'authentication, le second TCategoryButtons était complètement vidé et l'on recopiait le contenu du premier TCategoryButtons
Avoir deux TCategoryButtons était plus simple pour créer via le Builder que de tout créer à la main !
Une grosse flemme, en plus cela permet de mieux visualiser ce qui existe dans le menu que de tout avoir dans code, pas élégant mais pratique
Les deux TCategoryButtons étant lié à la même TImageList et la même TActionList
Dans le code de mon collègue, cela gère un seul bouton par category, je le modifie approximativement pour gérer un nombre variable de bouton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| CategoryButtons2->Assign(CategoryButtons1); // Taille + Categories mais pas ButtonItem
// Copie des Buttons
for (int iCat = 0; iCat < CategoryButtons1->Categories->Count; iCat++)
{
TButtonCollection* BtnLst = CategoryButtons2->Categories->Items[iCat]->Items;
for (int jBtn = 0; iBtn < BtnLst->Count; iBtn++)
{
if (IsActionHabilite(BtnLst->Items[iBtn]->Action))
{
TButtonItem *Item = new TButtonItem(BtnLst);
Item->Assign(BtnLst->Items[iBtn]);
Item->Action = BtnLst->Items[iBtn]->Action;
}
}
} |
Les category sans button peuvent être supprimer via
CategoryButtons2->Categories->Delete(ItemIndex);
voir l'image pour une idée du résultat
à gauche, le TCategoryButtons contenant tous les menus
à droite, le TCategoryButtons vide dans lequel on affecte
Partager