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 :

Rendre un stringgrid dynamique dans son classement.


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 022
    Points : 308
    Points
    308
    Par défaut Rendre un stringgrid dynamique dans son classement.
    Bonjour,

    Je me demandais s'il est possible qu'un stringgrid "s'autotrie" à la demande.
    Je m'explique :
    J'ai dans mon programme un Stringgrid qui se rempli automatiquement en fonction de valeurs qu'il reçoit d'un périphérique externe (console d'éclairage).
    Il y a chaque fois plusieurs valeurs dans le grid comme ça :

    1298 intro danse loup 145 22 69 XX UP 22 55
    1684 cut sur lampe 000 00 00 II UP 00 00
    1211 Reverse color 255 10 04 XX UP 12 12
    etc...

    Je voudrais placer sous mon grid un button et que quand le clique dessus les lignes soient mises en ordre sur base de la valeur de la première collone.
    Ce qui donnerait ça :

    1684 cut sur lampe 000 00 00 II UP 00 00
    1298 intro danse loup 145 22 69 XX UP 22 55
    1211 Reverse color 255 10 04 XX UP 12 12
    etc...

    Il ne faut surtout pas que mon Grid trie en permanance mais juste quand je le demande en cliquant sur le button.
    Après le péréiphérique externe rajoutera de nouveau des trucs qui devront rester dans le désordre jusqu'a ce que je clique à nouveau sur le button...

    des idées ?

    Merci.

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut,

    As-tu pensé à regarder du côté des sources ?

    Exemple :
    http://delphi.developpez.com/sources...no40source0046

    @+

  3. #3
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 022
    Points : 308
    Points
    308
    Par défaut
    Merci super c'est exactement ce que je cherchais.
    Quelques questions toutefois.
    De ce que j'ai compris on voit dans cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        gridCoord:= MouseCoord(X, Y);
    Qu'on récupère la collone qui va servir de base pour le tri.
    Moi je veux que le tri se fasse toujours sur base de la meme collone.
    Je pensais donc pouvoir mettre dans la variable gridCoord une valeur correspondant à la collone qui m'intéresse. Ca ne semble pas possible vu que les types sont incompatibles et je n'ai pas trouvé comment convertir ce type vers par exemple un integer.

    Ensuite cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Si on a cliqué sur une colonne déja triée on inverse le type de tri
          if gridCoord.X = FSortedCol then
            FSortOrder:= InvertSort(FSortOrder)
          else
          // Sinon, on tri par ordre ascendant
          begin
            FSortedCol:= gridCoord.X;
            FSortOrder:= soUp;
          end;
    Vu que je veux toujours que le plus grand soit en haut je n'ai pas besoin de ce IF, j'ai donc modifié le code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           begin
            FSortedCol:= gridCoord.X;
            FSortOrder:= soUp;
          end;
    Mais la il se passe un truc bizarre mais ça ne trie pas du tout comme il faut !
    Je ne comprends pas car vu que j'ai juste enlevé la condition qui inverse le sens ç devrait trier dans un sens non ?

    Merci d'avance de ton aide

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je donne déjà le lien du code en question :
    http://castelain.developpez.com/sources/TriStringGrid/

    Pas trop le temps de t'aider malheureusement.

    Pour ta première question :
    Ca ne semble pas possible vu que les types sont incompatibles et je n'ai pas trouvé comment convertir ce type vers par exemple un integer.
    Quel est ton message d'erreur ? car logiquement c'est déjà de l'Integer.

    Mais il me semble que ta logique soit différente de l'esprit Pascal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         if gridCoord.X = FSortedCol then
            FSortOrder:= InvertSort(FSortOrder)
          else
          // Sinon, on tri par ordre ascendant
          begin
            FSortedCol:= gridCoord.X;
            FSortOrder:= soUp;
          end;
    Je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         if not gridCoord.X = FSortedCol then
    // Ou =>   if gridCoord.X <> FSortedCol then
          // On trie direct par ordre ascendant
          begin
            FSortedCol:= gridCoord.X;
            FSortOrder:= soUp;
          end;
    Pas testé

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/03/2015, 09h52
  2. Réponses: 2
    Dernier message: 16/01/2013, 17h20
  3. Réponses: 4
    Dernier message: 27/11/2006, 23h20
  4. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  5. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49

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