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 :

Les cellules d'une ListView


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut Les cellules d'une ListView
    Bonjour tout le monde
    Voici mon problème :
    J'ai une ListView en mode vsReport, elle s'affiche donc comme une grille.
    Mais comme ça n'en est pas une, il n'y a pas d'evenement OnClickCell et OnDrawCell.
    Or j'aimerai pouvoir changer la couleur d'une cellule et surtout savoir si l'utilisateur click dans une cellule (et non pas juste l'item).
    Est ce possible ?

    Merci

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut,

    Pour la couleur des "cellules" (des sub-items en fait) d'un TListView, va voir ici :
    http://www.developpez.net/forums/sho...light=listview

    Sinon, tu peux faire "comme si" tu avais un TListview avec un TStringGrid ou un TDrawGrid (comme ça tu bénéficieras du OnSelectCell) :
    tu vas dans sa propriété Options, et tu mets les sous-propriétés dgTitles, dgIndicator, dgColLines et dgRowLines à false ou à true selon tes goûts

  3. #3
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Oui, je sais qu'une TStringGrid aurait été plus pratique pour mon problème mais en fait je fais évoluer une appli et il y a déjà pas mal de code derrière.
    C'est pour cela que je cherchais s'il n'y avait pas un moyen plus simple que de changer de composant.

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    ou alors :
    1) tu récupères la position de la souris
    2) tu transformes les coordonnée de la souris en coordonnées clientes de la TList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      P:=Listview1.ScreenToClient(P);
    3) tu en déduis la colonne visée en fonction de P.X et de la largeur des colonnes. Pour la ligne, je pense que tu sais faire

    Je te laisse faire ?

  5. #5
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Oui, je vais essayer comme ça. Ca devrait me suffir.
    En tout cas pour la couleur merci, ça fonctionne nickel

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    et n'oublies pas de cliquer sur le p'tit bouton

  7. #7
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Je n'ai pas oublié mais j'ai encore un ptit problème.
    Les colonnes sont redimensionnables et il peut donc y avoir un scroll horizontal. Or mon calcul pour retrouver la colonne cliquée ne fonctionne plus dès que la scrollbar n'est plus à gauche.
    Comment sait on de combien une grille est décalée par une scrollbar ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Mémorise la largeur des colonnes puisqu'elle sont redimensionnables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Largeur0 := ListView1.Columns[0].Width;
     etc
    Puis recalcule la colonne pointée.

  9. #9
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    C'est ce que j'ai fait, je me suis peut être mal exprimé mais mon problème ne vient pas de la largeur des colonnes mais plutot de la scrollbar horizontal.
    Si je déplace la barre vers la droite, le calcul ne fonctionne plus.
    En cliquant à gauche de la grille
    P.X renvoie environ 0 alors que je peux etre à la colonne 25 avec un scroll.

    J'ai donc besoin de la valeur du décalage due au scroll !

  10. #10
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Une petite proposition :
    .dans le OnMouseDown du TListView
    (ou 'listv' est mon TListView)
    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
     
    procedure TForm2.listvMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
    lvhtti : PLVHitTestInfo;
    lign : Integer;
    col : Integer;
    begin
    //
      New(lvhtti);
      lvhtti.pt := Point(X, Y);
      if( ListView_SubItemHitTest(listv.Handle, lvhtti) > -1 ) then
      begin
        lign := lvhtti.iItem;
        col := lvhtti.iSubItem - 1;
        ShowMessage( listv.Items.Item[lign].SubItems.Strings[col] );
      end;
    //
    end;
    En espérant t'aider,
    @ +

  11. #11
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Excellent ! ça marche très bien ! Merci à vous tous

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

Discussions similaires

  1. récupéré les cellules d'une colonne d'une listview
    Par mrrenard dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 29/05/2008, 10h46
  2. Lister les processus et les PID dans une listview .
    Par maxoudu328 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 16/10/2005, 16h03
  3. [VBA] Trier les colonnes d'une listview
    Par alncool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/09/2005, 14h12
  4. :xRecuperer les elements d'une listview
    Par hook85 dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/03/2005, 20h19
  5. [VBA-E] supprimer le contenu de toutes les cellules d'une feuille
    Par BipBip2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/08/2004, 15h13

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