Bonjour,
après mes mésaventures de centrage de l'objet qu'elle contient, voilà qu'une ScrollBox refuse systématiquement d'afficher ses ScrollBars quand c'est nécessaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function its(i:integer):string; begin Result:=IntToStr(i);end; procedure TForm1.FormCreate(Sender: TObject); begin PanelAuCentre.Parent := sb; // pour aligner le panel dans une scrollbox avec border à 0 et alClient sb.AutoScroll:=True; // voir commentaire + bas end; procedure TForm1.sbResize(Sender: TObject); begin // What I do now is set AutoScroll to False in the IDE, then set it to True in code // https://forum.lazarus.freepascal.org/index.php?topic=18040.0 sb.HorzScrollBar.Visible := (sb.Width < PanelAuCentre.Width); // jamais vu sb.VertScrollBar.Visible := (sb.Height < PanelAuCentre.Height); // jamais vu caption := its(sb.Width)+' '+its(PanelAuCentre.Width)+' '+booltostr(sb.HorzScrollBar.Visible); end;
La scrollbox est verte, le panneau centré dedans est crème, le "-22" c'est son .Left, le "8" c'est son .Top et les deux autres la taille "client" de la scrollbox.
Le "-1" dans la Caption de la fiche indique que la scrollbar horizontale est viible. Vous la voyez, vous ?
En désespoir de cause j'ai essayé de forcer l'affichage avec un CheckBox, mais même ça est inopérant :
La seule chose que je vois changer, c'est l'état du booléen, -1 > 0 > -1 etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TForm1.ckbxSBonoffChange(Sender: TObject); begin if ckbxSBonoff.Checked then begin sb.AutoScroll := True; sb.HorzScrollBar.Visible := True;//(sb.Width < PanelAuCentre.Width); sb.VertScrollBar.Visible := True;//(sb.Height < PanelAuCentre.Height); end else begin sb.AutoScroll := False; sb.HorzScrollBar.Visible := False;//(sb.Width < PanelAuCentre.Width); sb.VertScrollBar.Visible := False;//(sb.Height < PanelAuCentre.Height); end; caption := its(sb.Width)+' '+its(PanelAuCentre.Width)+' '+booltostr(sb.HorzScrollBar.Visible); end;
Une idée ?
Partager