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

Lazarus Pascal Discussion :

Créer des menus dynamiquement sur un popupmenu


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club

    Inscrit en
    Septembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 55
    Points : 56
    Points
    56
    Par défaut Créer des menus dynamiquement sur un popupmenu
    Salut,

    je cherche à créer dynamiquement les menu d'un popupmenu mais j'ai un problème pour lui attribuer un évenement onclick.

    J'ai une stringgrid à laquelle j'ai lié un popupmenu; lorsque je clique droit sur une cellule, je voudrais rajouter sur les entrées standard du popup (nouveau, quitter etc) les entrées spécifiques d'une ou plusieurs lignes de cette cellule (Rendez vous 1, rendez vous 2, etc...), et pour chaque menu ajouté dynamiquement lui attribuer un évenement onclick.

    Est-ce que quelqu'un à une idée ?
    Merci

    J'ai trouvé un code pour Delphi mais il me pose problème, je l'ai adapté de cette façon :
    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
    procedure Tfrm_depart.popup_str_grdPopup(Sender: TObject);
    var
      x : integer;
      MenuItem : TMenuItem;
    begin
      { Effacer tous les éléments de menu }
      popup_str_grd.Items.Clear;
      { Créer les éléments de menu }
      for x:=0 to 3 do
      begin
        MenuItem := TMenuItem.Create(popup_str_grd);
        { Ajouter au PopupMenu }
        popup_str_grd.Items.Add(MenuItem);
        With MenuItem do
        begin
          { Affecter à Caption le titre affiché dans les titres
           des colonnes du DbGrid }
          Caption := 'test ' + inttostr(x);
     
          {Cocher les éléments de menu qui sont déjà visibles avant l'appel}
          //Checked := DbGrid1.Columns[i].Visible;
          {Utilisation de la propriété Tag pour retrouver l'indice de l'élément
          coché/non coché dans la méthode PopItemClick implémentée ci-dessous}
          //Tag := i;
          {Affectation d'une méthode Click à l'élément de menu}
          if x = 0 then OnClick := popup_str_grd_1;
          //else if x = 1 then OnClick := popup_str_grd_2
          //else if x = 2 then OnClick := popup_str_grd_3
          //else if x = 3 then OnClick := popup_str_grd_4;
        end;
      end;
     
     
    end;
     
     
    procedure frm_depart.popup_str_grd_1(Sender: TObject);
    begin
      {Nous utilisons une référence sur l'élément cliqué}
      with TmenuItem(Sender) do
      begin
        {Inverser son état pour refléter l'état après un click}
        //Checked := not Checked;
        {Affectation de la propriété Visible du DbGrid en fonction de l'état
         coché/non coché de l'élément de menu qui vient d'être cliqué }
        showmessage('popup 1 cliqué');
      end;
    end;
    Mais j'ai ces erreurs :
    unit1.pas(303,47) Error: Identifier not found "popup_str_grd_1"
    unit1.pas(314,37) Error: class identifier expected
    unit1.pas(776) Fatal: There were 2 errors compiling module, stopping

  2. #2
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    {Affectation d'une méthode Click à l'élément de menu}
    if x = 0 then OnClick := @popup_str_grd_1;
    Il manquait le @

    Cordialement,
    Chris

  3. #3
    Membre du Club

    Inscrit en
    Septembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 55
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par chris37 Voir le message
    Il manquait le @

    Cordialement,
    Chris
    Pfff je dois avoir du caca dans les yeux, j'ai peut être effacé cela dans mon exemple delphi sans m'en appercevoir, en tout cas merci.

  4. #4
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Dans Delphi, on ne place pas le @devant il me semble

    Cordialement,
    Chris

  5. #5
    Membre du Club

    Inscrit en
    Septembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 55
    Points : 56
    Points
    56
    Par défaut
    ok, ceci explique cela

    Merci je vais tester de suite

  6. #6
    Membre du Club

    Inscrit en
    Septembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 55
    Points : 56
    Points
    56
    Par défaut
    Bon ben c'est toujours pas bon

    Maintenant il bloque sur la procédure "procedure frm_depart.popup_str_grd_1(Sender: TObject);
    "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unit1.pas(314,37) Error: class identifier expected
    unit1.pas(776) Fatal: There were 1 errors compiling module, stopping

  7. #7
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    et comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure popup_str_grd_1(Sender: TObject);
    tu devrais mettre le vrai nom du composant comme Form1 ou StringGrid1 etc..., c'est plus facile pour comprendre ce que tu veut.
    A+
    .
    Why
    .
    //------------------

  8. #8
    Membre du Club

    Inscrit en
    Septembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 55
    Points : 56
    Points
    56
    Par défaut
    Ok, voiçi le même code avec les noms génériques :

    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
    procedure Tform1.PopupMenu1Popup(Sender: TObject);
    var
      x : integer;
      MenuItem : TMenuItem;
    begin
      { Effacer tous les éléments de menu }
      PopupMenu1.Items.Clear;
      { Créer les éléments de menu }
      for x:=0 to 3 do
      begin
        MenuItem := TMenuItem.Create(PopupMenu1);
        { Ajouter au PopupMenu }
        PopupMenu1.Items.Add(MenuItem);
        With MenuItem do
        begin
          { Affecter à Caption le titre affiché dans les titres
           des colonnes du DbGrid }
          Caption := 'test ' + inttostr(x);
     
          {Cocher les éléments de menu qui sont déjà visibles avant l'appel}
          //Checked := DbGrid1.Columns[i].Visible;
          {Utilisation de la propriété Tag pour retrouver l'indice de l'élément
          coché/non coché dans la méthode PopItemClick implémentée ci-dessous}
          //Tag := i;
          {Affectation d'une méthode Click à l'élément de menu}
          if x = 0 then OnClick := PopupMenu1_1;
          //else if x = 1 then OnClick := popup_str_grd_2
          //else if x = 2 then OnClick := popup_str_grd_3
          //else if x = 3 then OnClick := popup_str_grd_4;
        end;
      end;
     
     
    end;
     
     
    procedure form1.PopupMenu1_1(Sender: TObject);
    begin
      {Nous utilisons une référence sur l'élément cliqué}
      with TmenuItem(Sender) do
      begin
        {Inverser son état pour refléter l'état après un click}
        //Checked := not Checked;
        {Affectation de la propriété Visible du DbGrid en fonction de l'état
         coché/non coché de l'élément de menu qui vient d'être cliqué }
        showmessage('popup 1 cliqué');
      end;
    end;

    Voila ce que je souhaite c'est de pouvoir créer dynamiquement des menus avec le popup, pour me permettre de traiter des rendez vous sur un calendrier (modification, suppression ,etc...), mais tout en dynamique puisque dans chaque cellule, il peut y avoir un ou plusieurs voir pas de rendez vous.

    Le menu devra être du style :

    Créer nouveau rdv
    Rendez vous N°1 -> Modifier
    ----------------------> Supprimer
    Rendez vous N°2 -> Modifier
    -----------------------> Supprimer

    Etc...


    Içi la procédure "form1.PopupMenu1_1" est la pour traiter les enregistrement du menu rendez_vous_N°1 (modification par exemple), procédure qui sera déjà écrite dans l'appli et qui n'aura besoin que de savoir quel menu à été cliqué pour savoir sur quel rendez vous il va falloir faire les modifs ou la suppression

    Merci

Discussions similaires

  1. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  2. Créer des menus dynamiques?
    Par naima2005 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/02/2008, 19h02
  3. Réponses: 5
    Dernier message: 06/09/2006, 13h15
  4. Réponses: 2
    Dernier message: 14/07/2006, 14h24
  5. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25

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