IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Fonctionnement du TSCrollBox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Par défaut Fonctionnement du TSCrollBox
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Par défaut
    Bonjour,

    Mon problème doit être mal posé.

    Voici une autre question qui m'aiderait peut-être à le résoudre :

    Comment peut-on savoir qu'un resize de form est terminé ?

    Les événements OnResize ne permettent pas en effet de savoir si le bouton
    gauche de la souris
    est relâché ou non, et son test par GetAsyncKeyState à
    l'intérieur du OnResize ne le laisse jamais voir que enfoncé.

    Merci pour l'aide.

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Moi je rajouterai la ligne en rouge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with TImage(ListeImages[i]) do 
    begin
        Parent := ScrollBoxListe;
        Align := altop;
        // Top := Pos; 
        Width := w;
        Height := h;
        Proportional := True;
        Stretch := True;
        Center := True;
        Picture.LoadFromFile(slListePhotosFichiers[i]);
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 190
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 190
    Par défaut
    Comment peut-on savoir qu'un resize de form est terminé ?
    En allant voir là !
    Mes 2 cts,
    --
    jo

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Par défaut
    Merci pour la réponse,

    mais si je fais ça, toutes mes photos sont les unes sur les autres et
    pas les unes à la suite des autres, scrollables comme je le veux...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Par défaut
    Merci Jipété

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 17h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 15h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 22h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 22h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo