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 :

Ne pas entrer dans une procédure si Listview non sélectionné


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut Ne pas entrer dans une procédure si Listview non sélectionné
    Bonjours à tous,

    Voici mon petit problème, j'ai une form avec une listview et une listbox, si je sélectionne un élément dans ma listview et puis si je sélectionne mon button1 qui récupère cette sélection pour entrer dans une procédure, jusque la tout ok, Mais si je clique ensuite sur ma listbox (ou un autre élément), donc ainsi l'élément dans ma listview n'est plus sélectionner et puis si je pousse a nouveau sur mon button1 il entre comme même dans ma procédure même avec ses conditions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if (ListView1.ItemIndex <> -1) and (ListView1.ItemFocused <> Nil )
          and (ListView1.Selected  <> Nil) and Assigned(ListView1.ItemFocused)  then
    begin
    Procedure XY
     
    end;
    Que dois-je ajouter si l'élément de ma listview n'est pas sélectionner de ne pas rentrer dans ma procédure si je pousse mon button1!

    Merci pour l'aide.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    Pourquoi tu ne teste pas que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ListView1.ItemIndex <> -1)
    Cela indique l'item selectionné, sans se préoccuper du focus ...

    sinon, tu peux rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (FocusControl = ListView1)

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Ce que je ne comprend pas si un l'élement sélectionner, puis plus sélectionner (en cliquant autre par..) et puis si je pousse sur le button1, ListView1.ItemIndex garde l'ancienne valeur, donc ne devient pas à -1, la valeur change seulement si on selectionne une autre ligne dans la listview!

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Je n'arrive pas à utiliser correctement le FocusControl (erreur: pas assez de paramètres) pourrait-tu s.t.p me donner une petit example. Merci

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Ardely
    Je n'arrive pas à utiliser correctement le FocusControl (erreur: pas assez de paramètres) pourrait-tu s.t.p me donner une petit example. Merci
    Salut

    Essaye aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (ListView1.ItemIndex > -1) and (ListView1.Focused) then
    ...

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Je n'arrive pas encore à faire bloquer ma procedure en poussant le button1 si l'élement de ma ListView n'est plus sélectionner!
    Comment savoir si un élément n'est plus sélectionner dans la listview si le focus est sur un autre composant.
    Merci beaucoup pour vôtre aide, Salutations.

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Ardely
    Comment savoir si un élément n'est plus sélectionner dans la listview si le focus est sur un autre composant.
    C'est exactement à ça que sert le code que je t'ai donné

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Merci beaucoup pour ton idée, mais dans mon cas sa ne fonctionne pas!!
    Je rentre toujours dans la condition même si l'élement n'est pas sélectionner.
    Je suis encore à chercher et à tester le pourquoi.
    Merci pour l'encouragement et bonne soirée.

  9. #9
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Ardely
    Merci beaucoup pour ton idée, mais dans mon cas sa ne fonctionne pas!!
    Je rentre toujours dans la condition même si l'élement n'est pas sélectionner.
    Pourrais-tu donner le code que tu as produit

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Merci beaucoup Pedro pour l'aide que tu m'offre. Voici mon Code très simplifié pour mieux comprendre le fonctionnement. Voici l'ordre qui ne fonctionne pas.
    Step 1 : clique une ligne, un élément dans Listview1.
    Step 2 : clique dans le memo.
    Step 3 : clique le button1 (devrais affiche 'Elément est PAS sélectionner') mais non, je rentre toujours dans la procédure 'Elément est sélectionner' qui n'est pas correcte!!

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        ListView1: TListView;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
    i : Integer;
    begin
       i := 0;
       ListView1.ViewStyle := vsReport;
         for i := 1 to 20 do
         begin
         ListView1.Items.Add.Caption := inttostr(i);
         end;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,PosIndex : Integer;
     
    //Item_Focused  : TListItem;
    //Item_Selected : TListItem;
     
    begin
     
      PosIndex := ListView1.ItemIndex;
     // Item_Focused :=  ListView1.ItemFocused;
     // Item_Selected := ListView1.Selected;
     
    if (ListView1.ItemIndex > -1) and (ListView1.ItemFocused <> Nil )
          and (ListView1.Selected  <> Nil) and (Assigned(ListView1.ItemFocused))
          // and (ListView1.Focused)  {si active l'élement n'est jamais sélectionner}
           then
       begin
           Showmessage('Element est sélectionner');
      end else begin
           Showmessage('Element est PAS sélectionner');
      end;
     
    end;
     
    end.
    Merci beaucoup pour une solution, et très bonne journée.

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    Pour Info, Ardely, si tu clique sur le Bouton 'Button1', celui-ci devient le control qui a le focus, ainsi ListView1.Focused ou Self.ActiveControl, te renverront respectiement False et 'Button1' ... tu peux me faire ton contrôle de focus que dans un Timer ou dans un Event comme OnChange de la ListView ...

  12. #12
    Membre actif
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Points : 211
    Points
    211
    Par défaut
    Si tu clic sur un élément de ta liste ItemIndex sera toujours > à -1 meme si tu clic sur un autre composant ...

    En faite tu cherches a faire quoi? faire passé un Elément de ta listview vers une autres list?

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Bonjours, a vrais dire c'est pour faire effacer un élément sélectionner par un bouton, mais si l'élément n'est pas sélectionner l'effacement ne dois pas être possible...Merci

  14. #14
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if listview1.ItemIndex <> -1 then
        listview1.Items.Delete(listview1.ItemIndex);
    end;

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    je ferais bien avant le test :

    cela devrait remettre itemindex à -1, non ?

  16. #16
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Résumer des testes. Si la listview1 a été une fois sélectionner, listview1.ItemIndex prend une valeur, puis si on clique sur un autre outil expl. memo,(pendant cette manipe la listeview est désélectionner) puis si on active le button1 la listview à toujours une valeur > -1 et jamais -1 Donc pour moi je n'arrive pas à mettre la valeur a -1 si l' élement de la listeview n'est pas
    sélectionner...! Salutations.

  17. #17
    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
    Comme on te l'a expliqué plus haut, si tu remet ItemIndex à -1 lorsque ta liste n'a plus le focus, tu ne pourras JAMAIS supprimer un élément de ta liste car pour pouvoir cliquer sur le bouton il faut OBLIGATOIREMENT que la liste perde le focus.

    Sinon, tu peux faire dans le lourd et mettre pour chaque controle (sauf ton bouton suppression) une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listview1.itemindex := -1;
    dans le OnEnter/OnClick/etc... ainsi dès qu'un controle prend le focus il va désélectionner ta liste.

  18. #18
    Membre actif
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Points : 211
    Points
    211
    Par défaut
    Si j'ai bien compris tu veux sélectionné un Elément puis tu clic sur ton bouton afin d'exécuté une procédure ... alors pourquoi ne pas mettre ta ListView.ItemIndex := -1 a la fin de la procédure? et fait aussi comme teste lorsque tu clic sur le dit bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If ListView.ItemIndex <> -1
      Then MaProcedure;
    de cette facon tu ne pourras pas executé deux fois desuite la procédure sans sélectionnez un autre élément de ta listview

  19. #19
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Oui, Je pense que je vais prendre cette solution de mettre en fin de procedure
    ListView.ItemIndex := -1. dans mon bouton multifonctions...Merci et bonne soirée.

  20. #20
    Membre actif
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Points : 211
    Points
    211
    Par défaut
    Oublie pas de cliquer sur si cela fonctionne comme tu le désires !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. Réponses: 10
    Dernier message: 14/04/2011, 12h47
  3. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  4. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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