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

Langage Delphi Discussion :

Forcer OnCompare dans un TListView


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut Forcer OnCompare dans un TListView
    Bonjour,

    j'ai beau forcer la chose, il va bien dans la procedure ListView1ColumnClick mais il ne veux pas rentrer dans la procedure OnCompare par la suite. Si je clique manuellement il va bien dans OnCompare...

    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
     
    procedure TFicheViewEvents.init;
    begin
      ListView1ColumnClick(nil, ListView1.Column[1]);
    end;
     
    procedure TFicheViewEvents.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
      var
      ListItem : TListItem;
      i_cpt: Integer;
    begin
      SortedColumn := Column.Index;
      TListView(Sender).CustomSort(nil, Column.Index -1);
    end;
     
    function CompareTextAsDateTime(const s1, s2: string): Integer;
    begin
      Result := CompareDateTime(StrToDateTime(s2), StrToDateTime(s1));
    end;
     
    procedure TFicheViewEvents.ListView1Compare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    var
      i_cpt: Integer;
      ListItem: TListItem;
    begin
      Case SortedColumn Of
      0 : Compare := Compare;
      1 : Compare := CompareTextAsDateTime(Item1.subitems[SortedColumn - 1], Item2.subitems[SortedColumn - 1]);
      End;
    end;

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,
    je suis pas certain d'avoir tout compris mais
    j'ai déjà noté qu'il manque le Sender lors de l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFicheViewEvents.init;
    begin
      ListView1ColumnClick(ListView1, ListView1.Column[1]);
    end;
    Cordialement,
    @+

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Bien vu pour le Sender merci !
    En fait lors de mon clic sur une colonne dans mon TListView, je fais un tri :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TFicheViewEvents.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
      var
      ListItem : TListItem;
      i_cpt: Integer;
    begin
      SortedColumn := Column.Index;
      TListView(Sender).CustomSort(nil, Column.Index -1);
    end;
    et automatiquement il va dans cette procedure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TFicheViewEvents.ListView1Compare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    var
      i_cpt: Integer;
      ListItem: TListItem;
    begin
      Case SortedColumn Of
      0 : Compare := Compare;
      1 : Compare := CompareTextAsDateTime(Item1.subitems[SortedColumn - 1], Item2.subitems[SortedColumn - 1]);
      End;
    end;
    mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListView1ColumnClick(ListView1, ListView1.Column[1]);
    il va juste dans la procedure OnClick mais il ne tri pas et moi j'aimerai faire cela sans cliquer sur une colonne

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Quelle version de Delphi utilisez vous ? Etes vous bien en configuration Debug ?
    J'ai fait un essai avec Delphi 10.1 Berlin update 2 avec votre code et l'instruction ListView1ColumnClick(ListView1, ListView1.Column[1]); dans l'événement OnClick d'un bouton et ça fonctionne. Le tri se déroule bien et on passe bien sur le point d'arrêt présent dans le OnCompare lorsqu'on clique sur le bouton.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Ayant également fait un teste, en complément de celui de gbegreg, sous D7

    le comportement est le même ... que l'on clique sur une colonne ou sur le Bouton
    tout fonctionne parfaitement (Le trie se fait dans les deux cas).

  6. #6
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Arf, je vais réessayer alors, on est d'accord que je n'ai pas envie de passer par un clic dans mon code, il faut que ça se fasse automatiquement ! Quand je simule le click, il passe en effet dans l'event OnClick mais par la suite le OnCompare() ne se fait pas :s

    Merci pour votre aide en tout cas

  7. #7
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    C'est bon je sais pourquoi, et vous n'auriez pas pu m'aider sur ce coup là, en fait j'avais une procédure Init(); que j'appelais avant OnShow() ... et c'est là que je mettais le code, maintenant que je l'ai mis à la fin de mon OnShow() ma liste est bien triée ...

    merci encore

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

Discussions similaires

  1. forcer majuscules dans un where
    Par bobic dans le forum Oracle
    Réponses: 3
    Dernier message: 08/12/2005, 10h59
  2. Comment trouver le SubItem cliqué dans un TListview ?
    Par Invité dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/10/2005, 12h27
  3. Comment écrire en inverse dans un TListView ?
    Par aliwassem dans le forum Composants VCL
    Réponses: 1
    Dernier message: 16/09/2005, 17h42
  4. Affichage d'icones et de texte dans un TListView
    Par Captain_JS dans le forum C++Builder
    Réponses: 1
    Dernier message: 29/10/2004, 12h08
  5. Mettre un objet dans un TListView
    Par FredericB dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/04/2004, 09h32

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