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 :

Quel est le composant sélectionné /DBGrid et multi sélection


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut Quel est le composant sélectionné /DBGrid et multi sélection
    Bonjour,

    j'espère que ce sujet n'a pas déjà était abordé, j'ai fait une recherche et n'ai rien trouvé

    je voudrais savoir de quelle manière je pourrais connaitre le composant qui est sélectionné sur la page.

    ex : si j'ai 2 TDBGrid sur ma page, savoir sur laquelle l'utilisateur a sélectionné des lignes...

    merci d'avance pour vos réponses

  2. #2
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    sur tous les évenement OnClick il y a le parmaètre Sender : TObject

    il suffit donc de stocker ou d'afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sender.name;
     
    ou 
     
    Sender.classname;
    Afin de savoir quels composants ont été cliqué

    bon courage !

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Il y a ActiveControl :
    Désigne le contrôle de la fiche détenant la focalisation.

  4. #4
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    le risque d'activeControl est que si lol_adele veut faire son test sur le click d'un bouton, c'est le fameux bouton qui sera l'activeControl, et on perdra donc l'information de quelle DBGrid est cliquée.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    merci pour vos réponses

    effectivement, je souhaite connaitre les lignes sélectionné dans telle ou telle grille une fois appuyé sur un bouton (c'est dans le cas d'un exort ou d'un copier)

    Par contre, je n'ai pas sender.name, uniquement sender.className sur clic sur un composant...

    j'a réussi toutefois en créant une variable globale dans laquelle je sauvegarde la dbgrid sur le onEnter.

    Et si je veux mettre cette variable à nil quand aucune de mes dbgrid est sélectionnée, je suis obligée sur entrée sur tous les autres composant de la page de mettre la variable à nil ?

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Citation Envoyé par lol_adele
    je n'ai pas sender.name,
    il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Sender as TdbGrid).name='MondbGrid1' then...

  7. #7
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    je pensais à ça, pourquoi s'embêter....

    si tu mets 2 variables globales dans ton application

    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
     
    DBGrid1Selected, DBGrid2Selected : Boolean;
    sur le formcreate tu initialise ces 2 variables à False

    lors d'un selection sur une DBGrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      If DBGrid1.SelectedIndex> 0 then //si quelque chose est sélectionné
        DBGrid1Selected:=true
      else
        DBGrid1Selected:=False;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.DBGrid2CellClick(Column: TColumn);
    begin
      If DBGrid2.SelectedIndex> 0 then //si quelque chose est sélectionné
        DBGrid2Selected:=true
      else
        DBGrid2Selected:=False;
    end;
    et sur le bouton exportation :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
    if (not DBGrid1Selected) AND (not DBGrid2Selected) then
    begin
      showmessage('Remet tes lunettes, aucune grille n''est sélectionnée !');
      exit;
    end;
     
    if DBGrid1Selected then
    begin
      //Export grille 1
    end;
    if DBGrid2Selected then
    begin
        //Export grille 2
    end;
     
     
     
    end;
    cela fonctionnerait-il dans ton cas ?

    PS : cette méthode permet de faire 2 exports si des lignes sont sélectionnées dans les 2 DBGRids

  8. #8
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Moi je dirais plutôt une variable ActiveGrid de ta fiche (sous private) de type TDBGrid comme tu l'as déjà fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TForm1 = class(TForm)
      ...
    private
      { Déclarations privées }
      ActiveGrid : TDBGrid;
    public
      { Déclarations publiques }
    end;
    Ensuite tu fais un événement TForm1.GridEnter que tu associe aux événements OnEnter de tes deux grilles et que tu implémentes comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.GridEnter(Sender: TObject);
    begin
      ActiveGrid := TDBGrid(Sender);
    end;
    Tu refais le même coup avec le OnExit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.GridExit(Sender: TObject);
    begin
      ActiveGrid := nil;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    Citation Envoyé par -Sylvain Leray-
    je pensais à ça, pourquoi s'embêter....
    si tu mets 2 variables globales dans ton application
    Le problème c'est qu'il me faut quelque chose de général, qui marche avec un nombre non défini de DBGrid

    Citation Envoyé par sjrd
    Tu refais le même coup avec le OnExit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.GridExit(Sender: TObject);
    begin
      ActiveGrid := nil;
    end;
    Le problème c'est que lorsque l'on clique sur le bouton "exporter", on sort de l'objet grille, donc ActiveGrid est à nil, donc on exporte pas...

  10. #10
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    Alors sur le OnGridExit, tu n'applique Nil que si SelectedIndex=0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.GridExit(Sender: TObject);
    begin
    if TDBGrid(Sender).selctedIndex=0 then
      ActiveGrid := nil;
    end;

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    Bon bah ça marche pas non plus...

    mais bon, à part mettre la variable à nil quand tu clique sur n'importe quel autre composant (sauf le bouton exporter), je vois pas autre chose...

    merci tout l'monde pour vos réponses je cloture

  12. #12
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par lol_adele
    Le problème c'est que lorsque l'on clique sur le bouton "exporter", on sort de l'objet grille, donc ActiveGrid est à nil, donc on exporte pas...
    Pas pensé du tout
    Peux-tu envisager de remplacer le bouton Exporter par un TSpeedButton, qui lui n'accepte pas le focus et donc ne l'enlèvera pas à la grid ? Si oui alors reprends mon idée et ça fonctionnera
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    Citation Envoyé par sjrd
    Peux-tu envisager de remplacer le bouton Exporter par un TSpeedButton, qui lui n'accepte pas le focus et donc ne l'enlèvera pas à la grid ? Si oui alors reprends mon idée et ça fonctionnera
    Effectivement ça résout le pb !!!

    tu me demande si je peux "envisager" de mettre un TSpeedButton...
    quel pourrait être le pb ??? quele est la différence à part qu'il ne prend pas le focus ?

  14. #14
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    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 931
    Billets dans le blog
    6
    Par défaut
    il suffit pê de ne garder que le OnExit des TDBGrid dans lequel on affecte à ActiveGrid ssi sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.GridExit(Sender: TObject); 
    begin 
     if TDBGrid(Sender).SelectedIndex<>0
      then ActiveGrid := TDBGrid(Sender)
      else if ActiveGrid = TDBGrid(Sender) then ActiveGrid := nil;
    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 !

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    finalement, quelque autres questions

    - un DBGrid, si on autorise la multisélection, on ne peut plus laisser l'option "édition"...
    --> est-ce que y'a moyen de changer cela, où est-ce qu'il existe un autre composant qui pourrait y remédier ???

    - quand on ouvre une page avece un DBGrid sur lequel on a autorisé la multisélection, il n'y a aucune ligne de sélectionnée; une fois que l'on clique dessus, ça sélectionne une ligne.
    --> est-ce qu'il y a moyen de revenir à l'apparence de départ, càd sans aucune ligne sélectionnée lorsque l'on sort du DBGrid (clic sur une autre partie de la page) ?

  16. #16
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par lol_adele
    tu me demande si je peux "envisager" de mettre un TSpeedButton...
    quel pourrait être le pb ??? quele est la différence à part qu'il ne prend pas le focus ?
    Aucun, c'est juste que parfois on a besoin de pouvoir avoir le focus, d'où ma question
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    je sais pas si ces questions ont été vues, et pi comme elles sont en fin de la 1ère page, je reposte

    Citation Envoyé par lol_adele
    finalement, quelque autres questions

    - un DBGrid, si on autorise la multisélection, on ne peut plus laisser l'option "édition"...
    --> est-ce que y'a moyen de changer cela, où est-ce qu'il existe un autre composant qui pourrait y remédier ???

    - quand on ouvre une page avece un DBGrid sur lequel on a autorisé la multisélection, il n'y a aucune ligne de sélectionnée; une fois que l'on clique dessus, ça sélectionne une ligne.
    --> est-ce qu'il y a moyen de revenir à l'apparence de départ, càd sans aucune ligne sélectionnée lorsque l'on sort du DBGrid (clic sur une autre partie de la page) ?

  18. #18
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    Citation Envoyé par qi130
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Sender as TdbGrid).name='MondbGrid1' then...
    Non il faut plutôt faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Sender=MondbGrid1 then....
    Comme cela si ob choage le nom du composant, on sera pas chocolat. Et de plus c'est plus propre.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/10/2009, 10h33
  2. quel est le meilleur composant pour gratuit "SQLite"
    Par helmis dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/11/2008, 14h50
  3. Chart, Pie, Histogrammes. Quel est le meilleur composant ?
    Par Bruno13 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 16/04/2008, 23h58
  4. Quel est le composant le plus adapté? JTable ?
    Par MAD_Tarik dans le forum Composants
    Réponses: 3
    Dernier message: 12/02/2007, 13h54
  5. Quel est ce composant ?
    Par Pill_S dans le forum Composants
    Réponses: 3
    Dernier message: 05/06/2004, 17h50

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