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

Composants VCL Delphi Discussion :

Ajouter des éléments dynamiquement a un TMenu


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut Ajouter des éléments dynamiquement a un TMenu
    Bonsoir,
    a tous j'ai un TMenu auquel je veux ajouter des menus dynamiquement je veux dire depuis mon code source.
    merci

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Les méthodes Merge et UnMerge des TMainMenu ne te conviennent pas ?


    Sinon, parles tu de TMainMenu ou de TPopupMenu ?
    Bidouilleuse Delphi

  3. #3
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Voici un bout de code qui crée dynamiquement les items d'un menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Var
      NewItem : TMenuItem;
      I : Integer;
    begin
      For I := 0 to LstLibelle.Count - 1 do
      begin
        NewItem := TMenuItem.Create(Self);
        NewItem.Name := 'mnuDataBase' + IntToStr(I);
        NewItem.Caption := LstLibelle[I];
        NewItem.OnClick := MnuDataBaseClick;
        PopUpMenu.Items.Add(NewItem);
      end;
    end;
    En tenant compte que les libellés des menus sont dans LstLibelle, que le menu pop-up existant s'appelle PopUpMenu et que le procédure à appeler pour le Onclick du menu est MnuDataBaseClick()

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Bonjour

    J'utilise à peu près le même code que Okaryn sauf que je crée le menu sur le OnClique d'un autre menu

    J'ai un menu Fichier > Nouveau et un menu Fenetre

    Lorsque je clique sur Fichier > Nouveau j'appelle ma procedure Cliquer
    Info sup. : Cpteur est un entier positif

    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
     
    procedure TFrmStart.Cliquer(const action : string);
    var Nom, Tps, Old : string;
        Lig, Col, Sel : Integer;
    begin
      if (action = 'Nouveau') then
      begin
        Nom := 'Document' + IntToStr(Cpteur);
        Inc (Cpteur);
        stForm := Nom;
        Application.CreateForm(TFrmDocument,Nom);
        CreerMenu(stForm);
      end;
     
      ...
     
    end;
     
    procedure TFrmStart.CreerMenu(Titre : string);
    var Menu : TMenuItem;
    begin
      Menu :=  TMenuItem.Create(Self);
      Menu.OnClick := FenetreClic;
      Menu.Caption := Titre;
      MenuFenetre.Add(Menu);
    end;
     
    procedure TFrmStart.FenetreClic(Sender : TObject);
    var i : Integer;
        Titre : String;
    begin
      if (Sender is TMenuItem) then
      begin
        Titre := (Sender as TMenuItem).Caption;
        Titre := AnsiReplaceText(Titre, '&','');
        For i := 0 to FrmStart.MDIChildCount - 1 do
        begin
          if (FrmStart.MDIChildren[i].Caption = Titre) then
          begin
            FrmStart.MDIChildren[i].Show;
            if (FrmStart.MDIChildren[i].WindowState = wsMinimized) then
              FrmStart.MDIChildren[i].WindowState := wsNormal;
          end;
        end;
      end;
    end;
    Lorsque je créer le premier document j'obtiens un item "Document1" dans le menu Fenetre. Jusque là, rien d'anormal.
    Mais lorsque je crée un deuxième document, j'obtient un deuxième item dans le menu Fenetre mais celui-ci s'appelle toujours "Document1".

    J'ai mis un point d'arrêt dans mon source sur la ligne "MenuFenetre.Add(Menu);" pour voir ce qu'il y avait dans le caption et j'ai bien "Document2".

    Quelqu'un pourrait-il m'expliquer pourquoi, lorsque j'execute la suite, le caption n'a pas changé dans mon menu Fenetre et que je me retrouve avec deux Items "Document1" ?

Discussions similaires

  1. Ajouter des élément a un tableau
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2007, 14h23
  2. Réponses: 1
    Dernier message: 19/08/2006, 19h40
  3. Réponses: 1
    Dernier message: 14/08/2006, 09h41
  4. [Shell] Ajouter des éléments au poste de travail
    Par Feeder_Fan dans le forum Framework .NET
    Réponses: 2
    Dernier message: 04/12/2005, 04h07
  5. Ajouter des éléments à ListBox
    Par priest69 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2005, 14h05

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