IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[MenuItems] Merger deux menus à la main


Sujet :

Delphi

  1. #1
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut [MenuItems] Merger deux menus à la main
    Bonjour,
    Je suis dans une situation où les menus ne se mergent pas correctement. ni en AutoMerge, ni en utilisant la fonction Merge de la Vcl.

    J'ai en fait une toolbar qui est associée à un menu, le tout dans un dockpanel. tout ça sur ma MDI. et un MainMenu classique sur les fenêtres filles. le tout en composants TMS.

    j'aimerais merger les menus à la main. Sachant qu'il y a toujours dans la MDI le menu en grisé (Fichier edition) (edition est en grisé avec rien en dessous)
    dans ma fenetre fille, j'ai ce menu edition tout rempli.

    Comment procéderiez vous pour insérer ce menu édition dans la MDI, tout en pouvant le supprimer à la fermeture de la fille.

    je suis parti sur cette voie, mais je pense que je me complique pour rien.
    si vous avez des idées, elles sont les bienvenues, merci d'avance !


    => procédure que j'appelle sur le Create de la fille (Form2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure TForm1.BTMerge(MenuAMerge : TMainMenu);
    var
    i : integer;
    begin
      for i:=0 to MenuAMerge.Items.count-1 do
      begin
        if MenuAMerge.Items[i].GroupIndex>0 then
        begin
          //?
        end;
      end;
    end;

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Bonjour,

    Si mes souvenirs sont bons, il fallait utiliser une propriété pour faire le "merge" : GroupIndex je pense bien. Il fallait à la conception donner des numéros de groupe à chaque menu, et quand la fiche enfant sera visible, son menu s'insérera automatiquement...

  3. #3
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    quand je fais la même application en mettant mon MainMenu de la MDI en dehors de la toolbar, cela fonctionne très bien, avec les Groupindex et tout.

    Mais lorsque le menu est dans la tool bar, le merge ne se fait plus. j'ai vu sur un vieil article d'internet que le problème existait déjà sous Delphi 4... Depuis cette époque, personne n'a trouvé de solution ?

    J'aimerais arriver à merger à la main en faisant des insertions (j'ai essayé mais j'ai l'erreur "menu inséré 2 fois" alors que je l'insère pour la première fois)

    Auriez vous un bout de code en tête pour insérer un menuitem dans un menu pour simuler un merge svp ?

    merci d'avance !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 266
    Points : 291
    Points
    291
    Par défaut
    Salut,

    Depuis le dernier message une solution a surement était trouvée. Mais j'ai eue le meme genre de probleme donc je post la solution.

    Le message de menu duppliquer ce produit quand le menuItem à inserer à déja un parent. Le parent des TMenuItem est en lecture seule donc pas question de le modifier !

    Donc pour fusionner deux menu créé à la conception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    procedure bsMerge(MainMenu,MenuToMerge: TMainMenu);
      function GroupIndexPos (aIndx: integer): integer;
      var
        i: integer;
        stop: boolean;
      begin
        result := -1;
        stop := false;
        i := 0;
     
        while (i < MainMenu.Items.Count) and (not stop) do
          begin
            if (MainMenu.Items[i].GroupIndex > aIndx)  then
              begin
                stop := true;
                result := i;
              end;
            inc(i);
          end;
      end;
     
    var
    i, idx : integer;
    aIt: TMenuItem;
    Ct: integer;
     
    begin
      Ct := MenuToMerge.Items.count;
      for i:=0 to pred(ct) do
        begin
          aIt := MenuToMerge.Items[0];
          idx := GroupIndexPos(ait.GroupIndex);
          MenuToMerge.Items.delete (0);
          if idx = -1 then
            MainMenu.Items.Add (aIt)
          else
            begin
              if MainMenu.Items[idx].Caption = aIT.Caption then
                begin
     
                end;
              MainMenu.Items.Insert (idx,aIt);
            end;
        end;
     
    end;
     
    procedure bsUnMerge(MainMenu, MenuToMerge: TMainMenu);
    { Un merge les element de MainMenu dont le Owner est le owner du MenuAMerge }
    var
    i : integer;
    aIt: TMenuItem;
    begin
      i := 0;
     
      while (i < MainMenu.Items.count) do
        begin
          aIt := MainMenu.Items[i];
     
          if aIt.Owner =  MenuToMerge.Owner then
            begin
              MainMenu.Items.delete (i);
              MenuToMerge.Items.Add (aIt);
            end
          else
            inc(i);
        end;
    end;
    Limites du codes ci-dessus :
    1- On ne merge pas le contenu des menus
    2- Le UnMerge ne fonctionne que si elements du sous menu ont le meme proriétaire que le sous menu

    a+

Discussions similaires

  1. [SQL] Relation entre deux menus déroulants dynamiques
    Par intissar_g dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/11/2007, 15h36
  2. "Merger" deux images avec une couleur de transparence
    Par MaelstroeM dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/09/2007, 09h34
  3. Deux menus déroulants liés entre eux
    Par coco38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2007, 15h31
  4. Concaténer deux menus
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 28/11/2006, 10h13
  5. merger deux requetes
    Par tounsi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/12/2005, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo