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;
Nom : centrerpanel.png
Affichages : 645
Taille : 10,2 Ko
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 :
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;
La seule chose que je vois changer, c'est l'état du booléen, -1 > 0 > -1 etc.

Une idée ?