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 :

PopupMenu sur une chaque cellule d'une DBAdvGrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut PopupMenu sur une chaque cellule d'une DBAdvGrid
    Bonjour

    j'ai une DBAdvGrid et je voudrais pouvoir utiliser un clic droit dessus j'ai donc utilisé un PopupMenu
    -je voudrais faire une action pour chaque cellule.
    comment ??

    J'ai rechercher sur l'Internet et j'ai trouvé ce code, mais cela n'a pas fonctionné pour moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.DBAdvGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      aCol, aRow, xRow : integer;
    begin
     xRow := TDBAdvGrid1(TDBAdvGrid1(Sender)).Row;          // xrow  from DBGrid     le pb est dans ce ligne [dcc32 Erreur] Unit1.pas(528): E2066 Opérateur ou point-virgule manquant
     TDBAdvGrid1(Sender).MouseToCell(X,Y,aCol,aRow);         // arow  from mouse    le pb est dans ce ligne [dcc32 Erreur] Unit1.pas(528): E2066 Opérateur ou point-virgule manquant
     if (Button = mbRight)                            
       then      TDBAdvGrid1(Sender).PopupMenu.Popup; {popup ONLY over the celected cell}
    end;

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure TForm1.DBAdvGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    // je suppose que la méthode s'appelle ainsi car tu as sur ta fiche un composant de type TDBAdvGrid qui se nomme DBAdvGrid1
    Si c'est bien le cas, et que cette méthode n'est pas affectée à un autre composant, tu peux le référencer directement par son nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xRow := DBAdvGrid1.Row; 
    // et non
    // xRow := TDBAdvGrid1(TDBAdvGrid1(Sender)).Row;  
    // qui suppose que le Sender soit de type TDBAdvGrid1 et dont on ne comprend pas le double cast
    ou en castant le Sender :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TDBAdvGrid(Sender).MouseToCell(X,Y,aCol,aRow);
    // et non
    // TDBAdvGrid1(Sender).MouseToCell(X,Y,aCol,aRow);
    // pour la même raison de type
    Si tu veux utiliser plusieurs fois la référence au Sender, tu peux ne le transtyper qu'une fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.DBAdvGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      aCol, aRow, xRow : integer;
      MyGrid: TDBAdvGrid;
    begin
      MyGrid := TDBAdvGrid(Sender);
      xRow := MyGrid.Row;          
      MyGrid.MouseToCell(X,Y,aCol,aRow);  
      if (Button = mbRight) and (...) then                           
        MyGrid.PopupMenu.Popup; {popup ONLY over the celected cell}
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut
    Merci de m'aider
    après l’exécution de ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.DBAdvGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      aCol, aRow, xRow : integer;
      MyGrid: TDBAdvGrid;
    begin
      MyGrid := TDBAdvGrid(Sender);
      xRow := MyGrid.Row;          
      MyGrid.MouseToCell(X,Y,aCol,aRow);  
      if (Button = mbRight) and (...) then                           
        MyGrid.PopupMenu.Popup; {popup ONLY over the celected cell}
    end;

    l'erreur suivante apparaît sur la ligne ( MyGrid.PopupMenu.Popup; )
    [dcc32 Erreur] U_form1.pas(534): E2035 Pas assez de paramètres originaux

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut
    SVP

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Ne me dites pas que vous avez recopié tel quel cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if (Button = mbRight) and (...) then
    sans remplir les conditions supplémentaires optionnelles (ce que voulait dire les points de suspensions)

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut
    salut SergioMaster
    Bien sûr, je viens d'écrire(if Button = mbRight then)

    Voici le code que j'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.DBAdvGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      aCol, aRow, xRow : integer;
      MyGrid: TDBAdvGrid;
    begin
      MyGrid := TDBAdvGrid(Sender);
      xRow := MyGrid.Row;          
      MyGrid.MouseToCell(X,Y,aCol,aRow);  
      if Button = mbRight then                           
        MyGrid.PopupMenu.Popup; {popup ONLY over the celected cell}
    end;
    observation: dans mon form le nom du composant menu de est: PopupMenu1

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

Discussions similaires

  1. [XL-2013] Traitement sur chaque cellule d'une colonne d'un range filtré
    Par Miistik dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/01/2018, 10h38
  2. Boucle sur chaque cellule non vide d'une ligne
    Par janigrel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2015, 15h46
  3. Réponses: 10
    Dernier message: 18/07/2007, 15h18
  4. Focus sur une cellule spécifique d'un DBGrid
    Par danbern dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/11/2004, 19h04
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51

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