Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Composants VCL
Composants VCL Utilisation des différents composants VCL (Visual Component Library)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 10h07   #1
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Par défaut Modifier le positionnement des éléments de l'accueil

Bonjour à tous,

Sur ma page d'accueil, j'utilise des TJvXPBar qui intègre les différentes options du menu cependant tous les utilisateurs n'auront pas accès à toute les options (géré par des droits) donc certains éléments sont non visibles cependant ça laisse des trous sur la page d'accueil.
Donc je souhaiterai si possible, modifier le positionnement des TJvXPBar dès qu'un élément est non visible.
Pouvez-vous m'aider ?

Merci d'avance
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h44   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 195
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 195
Points : 13 245
Points : 13 245
C'est le problème de partir d'une barre créée en DesignTime et de cacher en RunTime
le plus efficace étant de tout créer au RunTime en fonction des habilitations !
Lors du change de session, tu détruis tout et tu recrées tout !

Dans l'application que je maintiens (je le découvre ce matin, j'avais encore jamais regardé cette partie, je travaille dans un tout autre module), le comportement est celui que tu souhaites
cela instancie les TToolButton à la volée et les ajoutent via InsertControl dans le TToolBar et modifie Width à chaque ajout

Je n'ai pas de code (même en C++) à te fournir, c'est un vrai foutoir et cela ne te parlerait pas, mes prédécesseurs ont réinventé la roue carrée par méconnaissance de la RTL\VCL
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 12h05   #3
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Merci pour ta réponse, je t'avoue que j'ai pas tout compris car ta réponse est très technique, je vais regarder du côté d'InsertControl
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 12h23   #4
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 195
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 195
Points : 13 245
Points : 13 245
Pour un TToolButton \ TToolBar
Habilites c'est une liste d'objet contenant tes droits, une TStringList peut être un début
Les ToolBar sont dans un TControlBar, tu peux jouer Left et peut-être même les Anchors
Chaque ToolBar est identifié par une Category, une chaine pouvant être le nom de la ToolBar
Chaque ToolButton est identifié par un ID, le tag ....

Je te laisse trouver les équivalents JEDI VCL

Code :
1
2
3
4
5
6
7
8
9
10
11
for i := 0 to Habilites.Count - 1 do
begin
  tb := FindComponent(Habilites[i].CategoryToolBarName); 
  if Assigned(tb) then
  begin
    btn := TToolButton.Create(nil);
    btn.Caption := Habilites[i].ButtonCaption;  
    btn.Tag := Habilites[i].ID;
    btn.OnClick := TooButtonClickEventHandler; // Le Tag permettra de trouver l'Hability, une méthode virtuelle Execute ou une Action associé pourrait être une méthode élégante
    ToolBar.InsertControl(btn);
end;
Il faudra faire un code de vidange
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 12h44   #5
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Merci mais ta proposition me renvoie vers un menu classique, tu pourras voir en pièce jointe un aperçu du menu.
Ce que je souhaiterai si c'est possible, c'est si la partie Gestion de Devis est non visible que la partie centrale de réparation remonte et ne pas avoir un trou entre les 2.
Images attachées
Type de fichier : jpg Menu.jpg (17,7 Ko, 19 affichages)
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 14h26   #6
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 195
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 195
Points : 13 245
Points : 13 245
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

Code c++ :
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
Code :
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
Images attachées
Type de fichier : jpg TCategoryButtons.JPG (26,9 Ko, 13 affichages)
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 14h43   #7
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Merci pour toutes ses précisions et cet exemple, je regarde ça attentivement à priori ça correspond bien à ce que j'attends (si je peux espacer mes sous menus et ne pas les collés comme dans l'application de ton collègue)
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 08h57   #8
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 211
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 211
Points : 7 270
Points : 7 270
Je n'ai pas contrôlé à fond , mais pour les JVXPBars les propriétés visible et align (alTop) sont utilisables .

Si dans le cas exposé tu ne veux pas afficher le jvXPBar 'Devis' , il te suffit de le rendre invisible , si le jvXPBar en dessous à la propriété align=alTop , il remontera tout seul à l'intérieur du jvXPContainer

ps. il manque un 't' a gestion
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 12h19   #9
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Bonjour,

Merci pour ta réponse mais je n'utilise pas de container parce que sinon ils sont empilés et il n'y a pas d'espaces entre mes sous-menus ce qui présentent - bien et fait beaucoup + "entassé".
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 12h30   #10
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 211
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 211
Points : 7 270
Points : 7 270
oui , les espaces , je n'y avais pas pensé (c'est pour cela que je n'utilise pas jvXPBars mais plutôt les TJVNavxxxxx) , cependant rien n'empêche d'ajouter dans le container (qui n'est ni plus ni moins qu'un panel amélioré) des panels servant de séparateurs
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/12/2012, 12h35   #11
drake56
Membre du Club
 
Homme
Développeur informatique
Inscription : avril 2009
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2009
Messages : 257
Points : 47
Points : 47
Bonne idée en effet merci pour les panels séparateurs mais le problème c'est que j'ai 2 colonnes de menu donc si je mets du alTop celui qui peut tout voir ne verra pas tout le menu
drake56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h36.


 
 
 
 
Partenaires

Hébergement Web