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 FMX Delphi Discussion :

Grilles, et tri (visuel dans le titre des colonnes)


Sujet :

Composants FMX Delphi

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 789
    Billets dans le blog
    65
    Par défaut Avancée et petit souci
    Bonjour, comme vous allez le voir sur cette vidéo j'ai un petit souci
    Nom : grillesort.gif
Affichages : 243
Taille : 230,7 Ko
    il faut que je déplace la souris en dehors du glyphe, tout en restant dans l'entête de la colonne, pour que celui-ci soit changé

    Je n'arrive pas à me souvenir(,c'est mon grand âge,) de ce que je pourrais faire pour :
    • soit déplacer la souris automatiquement de quelques pixels
    • soit forcer le dessin sachant que celui-ci est fait durant l'évènement OnDrawColumnHeader

    j'ai une vague idée de invalidate quelque chose ou d'un truc du genre mais hélas ma mémoire me joue des tours

    une fois ce dernier problème réglé , je n'aurais plus qu'à passer à la partie données.
    Donc je compte sur vous pour des pistes qui régleront mon souci du jour, merci

  2. #22
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Salut,
    Personnellement j'utilise le OnHeaderClick et ça marche même si je ne suis pas sur l'icone de tri.
    A moins que tu utilises déjà le OnHeaderClick pour autre chose ?
    Sinon, effectivement tu pourrais faire un sksvg.invalidate ou Repaint, ou carrément appeler OnDrawColumnHeader ?

  3. #23
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 789
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par navyg Voir le message
    Personnellement j'utilise le OnHeaderClick et ça marche même si je ne suis pas sur l'icone de tri.
    J'ai pris le parti de gérer le onclick sur le SVG dans l'optique d'un futur composant, et donc permettre le onheaderclick au codeur. Tu me rétorqueras qu'il reste que j'utilise OnDrawColumnHeader qu'il me faudra hélas mettre en privé (à moins que ...)

    Citation Envoyé par navyg Voir le message
    effectivement tu pourrais faire un sksvg.invalidate ou Repaint
    déjà testé ainsi que des variantes comme beginupdate/endupdate sans succès
    Citation Envoyé par navyg Voir le message
    carrément appeler OnDrawColumnHeader ?
    chaud car il me faut retrouver les divers paramètres (canvas, bounds me posent problème )

    En dormant dessus, j'ai pensé à d'autres pistes, sans plus de succès, il me reste encore la fouille des sources pour trouver :
    • ce qui se passe lors d'un column.changed
    • comment forcer l'event drawcolumnheader, la constante MM_COLUMN_CHANGED me fait de l'oeil

  4. #24
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 789
    Billets dans le blog
    65
    Par défaut
    Finalement, la suggestion du passage par OnDrawColumnHeader est la solution pour mettre le dessin à jour correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFrame5.ClickSort(Sender: TObject);
    var aHeaderItem : THeaderItem;
    begin
      aHeaderItem:=THeaderItem(TSKSVG(Sender).parent);
      ChangeColumnSort(Grid1.ColumnByIndex(aHeaderItem.Index));
      Grid1DrawColumnHeader(aHeaderItem,
                          aHeaderItem.Canvas,
                          Grid1.ColumnByIndex(aHeaderItem.Index),
                          aHeaderItem.AbsoluteRect
                          );
    end;
    mais, il y a encore un mais, comme on le voit sur cette video
    Nom : Video_2024-09-17_171018.gif
Affichages : 204
Taille : 63,8 Ko
    la cascade des numeros ne fonctionne plus (quand la colonne1 n'est plus "triée" la colonne 2 devrait obtenir le numéro 1
    Bon, je pense, j'espère, qu'il ne s'agit que d'un oubli de ma part ou une mauvaise position de l'appel

  5. #25
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    la cascade des numeros ne fonctionne plus (quand la colonne1 n'est plus "triée" la colonne 2 devrait obtenir le numéro 1
    Bon, je pense, j'espère, qu'il ne s'agit que d'un oubli de ma part ou une mauvaise position de l'appel
    Moi je fais ça dans une structure array de type ArrayTypSens (ce type est défini dans mon unité de tri) qui est comprise dans ma classe et que je dois maintenir à jour à chaque Headerclick (regarde dans le projet que je t'ai envoyé, elle s'appelle ats et pour moi ça marche très bien). J'étais en train de me demander si je ne pouvais pas la stocker dans la colonne elle-même dans la propriété Data, mais il semblerait que ce soit occupé par LiveBinding et il ne faut pas l'utiliser, mais je l'utilise aussi dans mon algorithme de tri car chaque item de ce tableau contient le type de la colonne (indispensable pour comparer les valeurs de la bonne manière), son sens de tri (ou pas de tri) et son ... rang dans le tri multi-critères... tiens tiens on arrive à ce qui te préoccupe.
    Donc je sens que je vais être obligé de la garder en l'état et de la tenir à jour à chaque action (changement de sens de tri ou disparition du tri d'une colonne, ajout d'une colonne, suppression d'une colonne, etc ...)

  6. #26
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 511
    Par défaut
    Salut

    je ne comprends pas le code où tu mélanges les datas et l'affichage

    C'est les data qui déterminent ton affichage et pas l'inverse

    dans ton Onclick par exemple pourquoi redessiner ton header celui-ci devrait se faire naturellement au moment où tu ré-appelles la mise a jour de ton affichage de grille

    ce que je veux dire c'est du moment où tu fais appel au ChangeColumnSort celui-ci redessinera automatiquement l’entête

  7. #27
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 789
    Billets dans le blog
    65
    Par défaut
    @anapurna il s'agit de traiter le Header de la colonne et non les datas (du moins pas encore)
    Le onClick se fait sur une partie du Header (le SVG), j'aurais pu le faire avec l'évènement onHeaderClick mais j'ai préfèré limiter au glyphe.

  8. #28
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 511
    Par défaut
    salut

    ce que j'essai de dire c'est qu'il existe un evenement qui doit s'appeler OnDrawColumnHeader
    et c'est ici que tu doit operer tes changements

  9. #29
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 789
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par anapurna Voir le message
    ce que j'essai de dire c'est qu'il existe un evenement qui doit s'appeler OnDrawColumnHeader
    et c'est ici que tu doit operer tes changements
    En fait, l'évènement est codé pour preuve il est appellé (niveau de mon dernier code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Grid1DrawColumnHeader(aHeaderItem,
                          aHeaderItem.Canvas,
                          Grid1.ColumnByIndex(aHeaderItem.Index),
                          aHeaderItem.AbsoluteRect
                          );
    end;
    mais c'est un peu ce qui me dérange, je ne devrais pas avoir à faire cet appel puisque si je déplace le curseur cela se fait tout seul, il y a une subtilité que je n'ai pas trouvé

  10. #30
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 511
    Par défaut
    Salut

    Je supose que tu as appliqué le style pour affecter le header et ainsi creer le TGridmodel
    qui le relie à ton evenement ?

    en parcourant ton code pour l'application tu parle de sg pour le header et ensuite ta grille se nomme Grid1
    et ton evenement est attaché a Grid1

    dans ton clicksort (le click sur le svg en dehors de la grille), cela n'aurait pas etait plus simple de creer ton evenment OnHeaderClick
    et de là, refaire toute ta mecanique de tri afin que tout les evenements de la grille soient pris en compte
    et ainsi repercuter les changements ?


    Perso je prefere mettre des evenements de meme nature dans les evenement declencheur
    je me suis telement pris la tete avec des boucles infini

Discussions similaires

  1. Aligner les titres des colonnes dans un datagrid
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 02/04/2008, 17h01
  2. Probleme d'affichage dans les titres des fenetres
    Par pierrot10 dans le forum Windows XP
    Réponses: 4
    Dernier message: 24/01/2008, 10h01
  3. Affichage du titre des colonnes dans un DBGrid
    Par Debure dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/10/2005, 00h41
  4. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 18h49
  5. [dbGrid]Image dans le titre des colonnes d'un dbGrid
    Par dleu dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/08/2004, 19h01

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