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 FMX Delphi Discussion :

Utiliser le popupmenu d'un TGrid [Windows]


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut Utiliser le popupmenu d'un TGrid
    Bonjour,

    TGrid a une propriété PopupMenu, mais chaque colonne a aussi sa propre propriété PopupMenu.
    Quelqu'un sait-il comment "overrider" le popupmenu de la Grid pour utiliser celui propre à la colonne ?

    Bien sûr, j'ai fait quelques essais avant de poser la question :
    Nom : Capture.PNG
Affichages : 357
Taille : 4,6 Ko
    en gras dans la colonne "attendu" le propos de ma question.
    A noter qu'un PopupMenu sans items ne s'affiche pas.

    Je pense que s'il y a possibilité d'indiquer un popupmenu par colonne c'est qu'il y a moyen de le faire donc la question est comment le faire simplement (sans trop de code). J'entrevois la possibilité d'utiliser l'évènement OnPopup du MenuPopup de la grille pour transformer ce menu en fonction de la colonne mais ce contournement me semble tiré par les cheveux (il m'en reste plus beaucoup donc ce serait dommage)

    Des idées ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    après avoir beaucoup galéré sur ma piste du onpopup, ce matin je me suis réveillé avec une solution simple assez satisfaisante (peu de code) et qui semble efficace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // popumenu catégorie
    procedure TForm1.CategMenuClick(Sender: TObject);
    begin
    Cds.Edit;
    Cds.FieldByName('Categorie').AsInteger:=TMenuItem(Sender).ImageIndex;
    end;
     
    procedure TForm1.GridCellClick(const Column: TColumn; const Row: Integer);
    begin
    Grid1.PopupMenu:=Column.PopupMenu; // à peaufiner
    inherited;
    end;
    cette solution est à peaufiner afin de faire en sorte que le popupmenu de la grille soit le popupmenu obtenu si aucun popupmenu n'est indiqué pour la colonne en cours (une variable privée, ou une constante ?) en tout cas cela me permet de me sortir de quelques cas de type de colonne que je ne pouvais gérer via Livebindings ( TGlyphColumn, TPopupColumn ...)

    en illustration, popumenu (categmenu) sur une TGlyphColumn
    Nom : PopupMenuGlyphe.PNG
Affichages : 367
Taille : 111,0 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    tu avais aussi ce genre de solution

    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
     
    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);
    var
      Pm: TPopupMenu;
      pt: TPoint;
    begin
      if (GetParent(Msg.hwnd) = DBGrid1.Handle) then
      begin
        case Msg.message of
          WM_RBUTTONUP:
            begin
              if DBGrid1.EditorMode then
              begin
                Pm := DBGrid1.PopupMenu;
                if (Pm <> nil) and Pm.AutoPopup then
                begin
                  pm.CloseMenu;
                  Pm.PopupComponent := DBGrid1;
                  pt := Mouse.CursorPos;
                  Pm.Popup(pt.X, pt.Y);
                  Handled := True;
                end;
              end;
            end;
        end;
      end;
    end;
    ou utiliser le inplaceeditor
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut heuu
    Bonjour,

    je ne vois pas le lien entre un dbgrid et un TGrid,

    le premier est purement vcl.

    Qu'est-ce qui m'échappe ?

    Cordialement

    André

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    ils sont tout les deux descendant de TcustomGrid

    Mais effectivement j'ai pas percuté sur le fait que c’était du FMX
    il n’empêche que la méthode utilisant les messages doit parfaitement être utilisable avec la class GRID
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je n'avais pas répondu @Anapurna, car pour moi cela correspondait à du VCL et non du FMX.

    D'une part la gestion des messages j'évite : serait-ce portable sur les autres OS ?
    D'autre part tu ne réponds pas vraiment à la problématique avec les messages car, comment tu retrouves le popup de la colonne ? (Oui, je sais cela n'existe pas en VCL ) il faudrait encore un max de code pour retrouver la colonne !

    mon code est nettement plus court je suis un partisan du moins de code possible
    peaufiné, pour utiliser le popupmenu par défaut si aucun popup n'est défini pour la colonne cela donne ceci :

    1- une variable globale privée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultGridMenu : TPopupMenu;
    2-une instruction dans le OnCreate pour initialiser cette variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultGridMenu :=Grid.PopupMenu;
    3-Le code du OnCellClick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.GridCellClick(const Column: TColumn; const Row: Integer);
    begin
    if Column.PopupMenu=null
         then Grid1.PopupMenu:=DefaultGridMenu
         else Grid1.PopupMenu:=Column.PopupMenu;
    inherited;
    end;
    Le seul petit truc qui me gêne les points 1 et 2 mais je vois pas comment m'en sortir, sauf à indiquer pour chaque colonne la propriété PopupMenu bien sûr.
    l'idéal eut pu être (notez la conjugaison ) une constante où l'utilisation du TagString de la Grid mais il eut fallu retrouver l'objet par son nom,
    reste le TagObject auquel je n'avais pas encore pensé, dans le onCreate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid.TagObject:=Grid.Popupmenu;
    qui me permet d'éviter la variable privée

    donc,
    1 on oublie

    en 2 , le onCreate pas moyen d'y échapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid.TagObject:=Grid.PopupMenu;
    et en 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.GridCellClick(const Column: TColumn; const Row: Integer);
    begin
    if Column.PopupMenu=null
         then Grid.PopupMenu:=TPopupMenu(Grid.TagObject)
    else Grid.PopupMenu:=Column.PopupMenu;
    inherited;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    a priori lors de la construction de colonne on peut definir la source et le type voir l'article ici

    et le source ici
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Re,

    Rein à voir avec le PopupMenu mais c'est une petite part du tutoriel que je suis en train de rédiger.
    le seul truc est que ce document date un peu XE2 ou XE3 je crois, depuis les dernières versions propose des types de colonnes glyph, image, check, progress, float, currency,date,time ... en utilisant le menu contextuel ou en modifiant la propriété ColumnStyle de la liaison (LinkgridtodatasourceBindSource.columns[n])

    l'inconvénient d'un type de colonne "maison" :
    - n'est pas proposée dans le menu contextuel
    - n'est pas forcément "LiveBindable"
    donc tout doit se traiter par code, comme le source que tu indiques le montre (à ce propos merci du lien, je n'arrivai pas à y accéder)

    l'article proposé mélange tout dans une même colonne.
    Ce que je propose c'est d'utiliser les types de colonnes existantes, j'indiquerai également comment faire une colonne d'un autre type
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] utiliser un popupmenu
    Par nirvo_ca dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 09/06/2009, 08h51
  2. BCB C++ / Utilisation du focus dans le TGrid
    Par a_lincoln54 dans le forum C++
    Réponses: 1
    Dernier message: 21/04/2008, 18h16
  3. Questions sur l'utilisation du PopupMenu
    Par scara dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/12/2007, 08h14
  4. Question sur l'utilisation du popupMenu
    Par Jayceblaster dans le forum Delphi
    Réponses: 2
    Dernier message: 25/07/2006, 10h59
  5. [VB6] Utiliser les PopUpMenu
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 29/06/2006, 08h09

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