DBgrid : barre de défilement et flèche

informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 - 18 août 2005 à 19:42
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 - 27 août 2005 à 00:12
J'utilise la procédure de "Brain" pour gérer la molette au sein d'une DBgrid, donc le défilement vertical.



Maintenant, pour que mon logiciel soit plus ergonomique, je voudrais
pouvoir faire défiler les barres de défilement à l'aide des flèches de
direction.



Bon, pour les flèches haut et bas ce n'est pas très compliqué. Sur le
keydown de la DBgrid je détecte l'appuie sur la touche voulue puis je
prend le bout de code de la procédure de "Brain" et hop le tour est
joué (en gros, l'utilisation du next et prior).



Mon problème est le suivant : dans ma DBgrid, j'ai beaucoup de colonnes
et je ne les voient pas toutes à l'écran et certaines qui sont cachés
sont très importantes (information sur les prix quantités, etc ...).
Evidement j'ai une barre de défilement horizontale que je peux
manipuler avec la souris mais ce n'est pas des plus pratique. Je
souhaiterais pouvoir faire défiler ces colonnes à l'aide des flèches
droite et gauche.



De plus, est-il possible avec ces DBgrid d'avoir un défilement avec la
souris comme sous excel ou on peut aller dans tous les sens ?



Merci d'avance pour l'attention que vous porterez à ce message un peu long et des évetuelles réponses que vous me fournirez.

4 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 août 2005 à 13:48
Il y a longtemps que j'avais pas fait joujou avec l'API...



Pour un RichEdit, en ayant pris soin de mettre la propriété KeyPreview du Form à True, ce code donne l'effet recherché :



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

case Key of

VK_DOWN: SendMessage(Richedit1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

VK_UP: SendMessage(Richedit1.Handle, WM_VSCROLL, SB_LINEUP, 0);

VK_LEFT: SendMessage(Richedit1.Handle, WM_HSCROLL, SB_LINEUP, 0);

VK_RIGHT: SendMessage(Richedit1.Handle, WM_HSCROLL, SB_LINEDOWN, 0)

else Exit;

end;

Key := 0;

end;



Bonne prog'



japee
0
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 1
23 août 2005 à 15:39
Personne a une idée pour mon problème de flèche gauche droite ?



J'ai une autre question : je fais du multiselect sur ma DBGrid et je me
sers de "SelectedRows" ainsi que "CurrentRowSelected" et "gotobookmark"
avec un pointer pour manipuler la suppression (simple ou avec
multisélection).


Quand je me sers de la souris, impécable mais si j'ai le malheur de me
servir des flèches haut et bas (ce coup-ci) et bien ça descend d'une
ligne (ça c'est normal et heureusement lol) mais par contre quand je
fais "suppr" ça ne marche pas (il ne se passe rien).



Cela me fais comme avant que je découvre l'astuce du
currentRowSelected. Alors j'ai tenter de mettre un CurrentRowSelected
lors de l'appuie flèche haut ou bas mais rien à faire.



Quelqu'un aurait-il une idée pour ces 2 problèmes car là c'est comme
dans le titre du thème "J'ai besoin d'aide et je suis au bord du
suicide".
0
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 1
23 août 2005 à 17:51
Je continue, je suis têtu. J'ai trouvé de nouvelles pistes :



Tout d'abord, si on va directement dans "DBGrid" avec CTRL + clic
gauche, il y a le détail de getcurrentrowselected et
setcurrentrowselected mais j'avoue avoir quelque difficulté à
comprendre le mécanisme avec le bookmarklist.



Sinon la fonction locate du dataset pourrait peut-être m'aider mais moi
ce que je cherche ce n'est pas à filtrer mais à rendre "active" ou "en
cours" la ligne de la dbgrid au sein de l'ensemble de données.
C'est-à-dire que si je navigue avec la flèche bas (exemple je descend
de trois ligne), je veux que la troisième ligne devienne active au sein
de l'ensemble de données sinon après je ne peux plus me servir du
selectedrow.



J'espère être clair sinon je comprends bien que vous ne pouvez pas
m'aider, si vous avez besoin de précisions pour pouvoir m'aider je suis
là.
0
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 1
27 août 2005 à 00:12
Bon j'ai réglé un des 2 problèmes, celui des flèches haut et bas. En fait, il faut gérer les 2 cas séparéments.



En fait, "SelectedRows" ne fonctionne que quand l'utilisateur
sélectionne une ou plusieurs ligne en cliquant avec le bouton gauche de
la souris mais quand on se déplace avec les flèches ou la molette de la
souris, la propriété "Count" de "SelectedRows" vaut 0 et ça ne marche
plus.



Donc j'ai déclaré un tableau dynamique avec un type de données adapté
(string ou integer suivant le cas et en ce qui me concerne) et je le
rempli en fonction des 2 états.



exemple:

var

intCompteur, intNombreLignes: Integer;

tabListeArticles: Array of String;



...

if DBGrid.SelectedRows.Count > 0 then

begin

for intCompteur := 0 To intNombreLignes - 1 do


begin
ModuleDeDonnees.Requete.GotoBookmark(pointer(DBgrid.SelectedRows.Items[intCompteur]));

SetLength(tabListeArticles,intCompteur + 1);

tabListeArticles[intCompteur] := DBGrid.Fields[0].Value;

end;

end

else

begin

SetLength(tabListeArticles,1);

tabListeArticles[0] := DBGrid.Fields[0].Value;

end;



En rouge, c'est le cas qui gère la molette et les flèches haut et bas.



En revanche, pour mon histoire de flèches gauche et droite ça descend toujours une ligne en même temps que ça va vers la droite.



Si quelqu'un a une idée, je prends.
0
Rejoignez-nous