Bonjour,

Je recherche de la doc sur le fonctionnement du TScrollBox,
car je ne parviens ps à en obtenir le fonctionnement voulu. Je m'explique :

Je souhaite lister dans un TScrollBox des photos (TImage) qui sont lues et
ajoutées dynamiquement à un TList.

Tout fonctionne bien (à mon sens) tant que la fenêtre conteneur n'est pas
redimentionnée. À ce moment, si la photo visible n'est pas la première de la
liste, et bien c'est celle-ci qui apparaît, et le curseur du ScrollBar vertical
semble dérouté (si on le remonte tout en haut, il n'y a plus d'image de visible).

D'où ma recherche d'infos sur le comment faire pour maîtriser le fonctionnement
du TScrollBox

Voici mon code, aussi simplifié que possible if convient de placer une demi
douzaine de photos .jpg dans un répertoire photos\) :
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Jpeg, StdCtrls;
 
type
  TForm1 = class(TForm)
    ScrollBoxListe: TScrollBox;
    procedure FormActivate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ScrollBoxListeResize(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    ListeImages : TList;
    slListePhotosFichiers : TStringList;
  end;
 
var
  Form1: TForm1;
 
const
  Path = 'photos\';
 
implementation
 
{$R *.dfm}
 
procedure TForm1.ScrollBoxListeResize(Sender: TObject);
// redimensionne les photos en rapport avec la fenêtre
// attention, ça force le retour à la photo 0 !
var
  i, pos, w, h : integer;
begin
  pos := 0;
  w := ScrollBoxListe.ClientWidth;
  h := ScrollBoxListe.ClientHeight;
  for i := 0 to pred(ListeImages.Count) do
    with TImage(ListeImages[i]) do begin
      SetBounds(0, pos, w, h);
      inc(pos, h);
    end;
end;
 
procedure TForm1.FormActivate(Sender: TObject);
var
  i, h, w, pos : integer;
  SR : TSearchRec;
begin
  ListeImages := TList.Create;
  slListePhotosFichiers := TStringList.Create;
  // charge la liste des photos
  if FindFirst(path + '*.jpg', faArchive, SR) = 0 then try
    repeat
      slListePhotosFichiers.Add(path + SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
  // prépare le chargement des photos
  w := ScrollBoxListe.ClientWidth;
  h := ScrollBoxListe.ClientHeight;
  Pos := 0;
  // ajoute les photos à la liste
  for i := 0 to pred(slListePhotosFichiers.Count) do begin
    ListeImages.Add(TImage.Create(Self));
    with TImage(ListeImages[i]) do begin
      Parent := ScrollBoxListe;
      Top := Pos;
      Width := w;
      Height := h;
      Proportional := True;
      Stretch := True;
      Center := True;
      Picture.LoadFromFile(slListePhotosFichiers[i]);
    end;
    inc(Pos, h);
  end;
  ScrollBoxListe.OnResize := ScrollBoxListeResize;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListeImages.Free;
  slListePhotosFichiers.Free;
end;
 
end.
Merci pour votre aide.

Salutation.