Bonjour,
Après plusieurs recherches, je n'ai pas réussi à trouver comment supprimer la scrollbar horizontale d'un StringGrid (en alClient).
Avez-vous une solution à me proposer s'il vous plaît ?
Merci d'avance.
Version imprimable
Bonjour,
Après plusieurs recherches, je n'ai pas réussi à trouver comment supprimer la scrollbar horizontale d'un StringGrid (en alClient).
Avez-vous une solution à me proposer s'il vous plaît ?
Merci d'avance.
Salut,
Je ne sais pas si ça va marcher, mais tu peux toujours tenter d'utiliser la méthode ShowScrollBar (contenu dans windows.pas) et l'utiliser comme suit :
Sinon, heu, une autre méthode surement plus simple :PCode:
1
2
3
4
5
6 //Cache les 2 ScrollBar ShowScrollBar(StringGrid1.Handle, SB_BOTH, False); //Cache la ScrollBar horizontale ShowScrollBar(StringGrid1.Handle, SB_HORZ, False); //Cache la ScrollBar verticale ShowScrollBar(StringGrid1.Handle, SB_VERT, False);
Il faut mettre la propriété ScrollBars soit à ssNone si tu ne veux pas de ScrollBar du tout, soit à ssHorizontal pour l'horizontale, ssVertical pour la verticale et ssBoth pour les 2 :)
Tiens nous au courant.
A+ ;)
@ senv33, bien entendu comme le précise ero-sennin,
les propriétés de l'inspecteur d'objets suffisent amplement.Citation:
Sinon, heu, une autre méthode surement plus simple
Il faut mettre la propriété ScrollBars soit à ssNone si tu ne veux pas de ScrollBar du tout, soit à ssHorizontal pour l'horizontale, ssVertical pour la verticale et ssBoth pour les 2
@+,
Cincap
arf oui j'avais tenté showscrollbar et plein d'autres propriétés mais pas scrollbar à ssvertical qui lui fonctionne :s
merci beaucoup pour votre aide !
Après plusieurs utilisations, je me suis aperçu d'un petit souci lié à la suppression de la scrollbar horizontale de ma stringGrid.
lorsque je clique sur une cellule tout à droite de ma grille lorsqu'il y a une scrollbar verticale, l'affichage se décale vers la droite, ce qui cause un problème (et en plus maintenant je n'ai plus de scrollbar pour revenir sur la gauche.)
en fait, dans ma stringGrid, j'ai plusieurs colonnes toutes fixes à part une qui varie en fonction de la taille de la fenêtre grâce à une petite opération avec clientWidth.
Existe t'il un évènement qui détecte l'apparition de scrollbar pour qu'à ce moment là, je réduise la taille d'une colonne ou comment puis-je faire pour qu'il recalcule la largeur de ma grille lors de l'apparition de la scrollbar ?
comment puis-je résoudre ce problème ?
Salut,
Je ne sais pas si il y a un événement que tu pourras capter mais ce que tu peux faire, c'est sommer la taille de tes différentes colonnes et regarder si tu as une taille plus grande que la taille de ton StringGrid...
Si tu as une taille supérieure, alors tu recalcules la taille pour chaque colonne...
:)
désolé mais je ne crois pas avoir très bien compris...:(
la taille de mon stringGrid ne dépend-t-elle pas de la taille de mes colonnes justement ?
et mon stringGrid est dans un panel qui est en alClient...
Lorsque je parle de la taille, je parle de la taille du composant TStringGrid. Logiquement, sa taille restera fixe sauf dans ton cas où ton TStringGrid est à alClient, ce qui veut dire que si tu agrandis ta fenêtre, ton panel va surement s'agrandir et donc ton StringGrid également.
Sinon, pour en revenir à ton souci, il faut que tu récupère le Width du TStringGrid que tu compareras à la somme des tailles de tes colonnes ...
J'espère que je ne t'ai pas embrouillé plus l'esprit :)
Salut
Tout d'abord tu laisses la propriété Scrollbars à ssBoth puisque le StringGrid les affiche/masque suivant le contexte. ;)
Ensuite en supposant que ta colonne variable est la dernière, tu peux essayer ceci:
A appeler lors d'un Resize et lors de l'ajout/suppression d'une ligne.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure AdjustLastColumnWidth(AStringGrid: TStringGrid); const MinWidth = 50; var I, FixedWidth, NewWidth: Integer; begin with AStringGrid do begin FixedWidth := 0; for I := 0 to ColCount - 2 do Inc(FixedWidth, ColWidths[I] + 1); NewWidth := Max(ClientWidth - FixedWidth, MinWidth); ColWidths[ColCount - 1] := NewWidth; end; end;
@+ Claudius
Problème résolu, merci à vous !
@ ero-sennin : Justement mon StringGrid est aussi en alClient, merci de d'être penché sur mon cas :)
@ Cl@audius : C'est parfait, merci ! J'ai réussi à adapter ta procédure à mon cas bien que je n'aie pas tout assimilé. Je tâcherai d'y comprendre un peu plus quand je ne serai plus malade :S