Bonjours,
Est il possible de modifier la position de la barre de défilement verticale du composant DBGrid sans changer l'enregistrement en cours ?
Si Oui Comment ?
Bonjours,
Est il possible de modifier la position de la barre de défilement verticale du composant DBGrid sans changer l'enregistrement en cours ?
Si Oui Comment ?
La ScrollBar du TDBGrid est peu efficace, cela dépend aussi du composant DB sous-jacent
Un Message WM_VSCROLL va provoquer le déplacement de la barre mais cela aura aussi un impact sur l'enregistrement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ABookmark := DataSet.Bookmark; //DBGrid.Perform(WM_VSCROLL, SB_THUMBPOSITION, ...); SetScrollPos(DBGrid.Handle, SB_VERT, ..., false); DataSet.Bookmark := ABookmark
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Cette approche sera utile si on veut décaler la barre de défilement par programmation. mais comment procéder quand l’utilisateur change la position de la barre en cliquant dessus ?
???
Tu veux interdire l'utilisation de la ScrollBar ???
Masquer l'ascenseur vertical/Horizontal dans un DBGrid ?
Cacher le(s) ScrollBar(s) via ShowScrollBar qui se montre assez récalcitrant !
Voir Faire disparaitre le scrollbar de plusieurs dbgrid
Voir aussi desactiver l'acenseurs horizontal d'un DBgrid, si l'on joue avec Open\Close\Refresh il faut forcer le ShowScrollBar et même parfois, elle revenait toute seule, je n'ai jamais trop compris pourquoi, un Timer me corrigeait cela, je pouvais ainsi gérer ma propre ScrollBar couplé à un système de pagination
Tu peux aussi t'amuser avec la WndProc !
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Je suis désolé car apparemment, j'ai mal exprimé le problème.
Je voulais tout simplement modifier la position de la barre de défilement verticale à l'aide du curseur de la souris, sans que cela ne modifie l'enregistrement en cours (le comportement par défaut et que l'enregistrement en cours change en déplaçant la barre verticale et c'est ce que je veux éviter).
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Le but de bouger la barre de défilement est de visualiser les enregistrements qui se trouvent en bas ou en haut de la plage affichée.
Donc j'ai besoin de la barre pour pouvoir afficher tous les enregistrements du DataSet, mais sans changer la position actuelle du curseur(enregistrement sélectionné).
Les grilles de Ms Excel offrent le comportement exacte de ce que je veux avoir.
Dans ce cas, utilise une TStringGrid que tu remplis à la main, tu auras le comportement souhaité
Chez mon précédent employeur, je l'avais fait pour gérer une liste de 300 000 enregs sur MySQL, je ne récupérais que 20 à 30 rec (selon Hauteur et RowHeigths ...) pour économiser mémoire, bande passante, utilisation CPU du server ...
L'ascenseur du DBGrid était relatif au 20/30 rec donc faut pour mes 300 000, j'ai donc masqué la ScrollBar de la DBGrid et mis ma propre TScrollBar qui gérait le défilement des pages et non le défilement dans la dbgrid, c'est proche de ton besoin !
Par contre, le rec en cours n'était pas conversé au changement de page alors tu devras gérer manuellement le positionnement du rec en cours (uzinagaz en prévision si SGBD distant, bricolage en RecNo pour Paradox)
tu ne pourras jamais afficher un jeu de rec qui ne contient pas le rec en cours sans modifier profondément le DBGrid, tu remets en cause tout son système d'affichage partiel qui économise de la mémoire (il ne copie pas les données, il balaye une "fenêtre" de rec, voir le code utilisant MoveBy, tu dois pouvoir le bidouiller cela, va falloir que tu t'accroches, perso, je n'ai jamais compris comment il pouvait lire sa "fenêtre" de rec sans réellement se déplacer !)
Voilà, tu as plein de piste !
Faut se lancer !
la TadvDBStringGrid de TMS avait ce comportement mais ce contrôle a été déprécié pour ses mauvaises performances
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager