Ceci est une ancienne révision du document !


Utilisation et gestion des Scrollbars

Dans un component

Affichage

Affichage : API Windows ShowScrollBar(Handle, SB_BOTH, true);

  • Handle = Handle du component (TWinControl.handle)
  • SB_BOTH = affichage des deux SB_HORZ et SB_VERT
  • True = visible

Capter les messages de Scroll

Pour capter les scrolling, implementer les procedures suivantes

      procedure WMHScroll(var Msg: TLMScroll); message WM_HSCROLL;
      procedure WMVScroll(var Msg: TLMScroll); message WM_VSCROLL;

Le message TLMScroll contient les membres suivants:

LMessages
 TLMScroll = record
    Msg: Cardinal;
    ...
    ScrollCode: SmallInt; // code voir plus bas
    SmallPos: SmallInt;    // Position sous forme d'un SmallInt
    ScrollBar: HWND;        // Handle de la scrollbar
    ...
    Result: LRESULT;        // See remark
    Pos: LongInt;                 // Position en integer
  end;      

ScrollCodes

defines.inc
{ Scroll Bar notifications }
      SB_LINEUP = 0;  // On appuis sur le bouton a l’extrémité haute
      SB_LINEDOWN = 1; // On appuis sur le bouton a l’extrémité basse
      SB_LINELEFT = 0; // On appuis sur le bouton a l’extrémité gauche
      SB_LINERIGHT = 1;// On appuis sur le bouton a l’extrémité droite
      SB_PAGEUP = 2;  // On click entre la Scroll Box et le bouton à l’extrémité haute
      SB_PAGEDOWN = 3;  // On click entre la Scroll Box et le bouton à l’extrémité basse
      SB_PAGELEFT = 2;  // On click entre la Scroll Box et le bouton à l’extrémité gauche
      SB_PAGERIGHT = 3;  // On click entre la Scroll Box et le bouton à l’extrémité droite
      SB_THUMBPOSITION = 4;  // On relâche (drop) le Scroll Box ou on utilise la molette de la souris
      SB_THUMBTRACK = 5;   // On tire (drag) le Scroll Box
      SB_ENDSCROLL = 8;  // On sort de la Scrollbar
      SB_LEFT = 6; // On positionne la Scroll Box a l'extremité gauche (avec le menu contextuel)
      SB_RIGHT = 7;  // On positionne la Scroll Box a l'extremité droite (avec le menu contextuel)
      SB_BOTTOM = 7;  // On positionne la Scroll Box a l'extremité basse(avec le menu contextuel)
      SB_TOP = 6;  // On positionne la Scroll Box a l'extremité haute (avec le menu contextuel)

Modifier la Scrollbar avec ScrollInfo

Structure TScrollInfo

tagScrollInfo = record
    cbSize : UINT; // Taille de cette structure = sizeof(TScrollInfo)
    fMask : UINT; // Voir ci dessous
    nMin: Integer;
    nMax: Integer;
    nPage: UInt;  // Taille de la ScrollBox proportionnellement au range de la ScrollBar
    nPos: Integer; // Position par rapport au range de la ScrollBar
    nTrackPos: Integer;
  end;
  PScrollInfo = ^TScrollInfo;
  TScrollInfo = tagScrollinfo;
 
fMask

fMask : Spécifie les paramètres de la ScrollBar à définir ou à récupérer.

Valeur Signification
SIF_ALL SIF_PAGE or SIF_POS or SIF_RANGE or SIF_TRACKPOS
SIF_DISABLENOSCROLL Cette valeur n'est utilisée que lors de la définition des paramètres d'une barre de défilement.
Si les nouveaux paramètres de la barre de défilement la rendent inutile, désactivez la barre de défilement au lieu de la supprimer.
SIF_PAGE Le membre nPage contient la taille de page pour une Scrollbar proportionnelle.
SIF_POS Le membre de nPos contient la position de la Scroll Box, qui n'est pas mise à jour lorsque l'utilisateur fait glisser la Scroll Box.
SIF_RANGE Les membres nMin et nMax contiennent les valeurs minimales et maximales de la plage de défilement.
SIF_TRACKPOS Le membre nTrackPos contient la position actuelle de la Scroll Box pendant que l'utilisateur la fait glisser.
nPage

C'est la taille que doit faire la ScrollBox, proportionnellement au range de la ScrollBar.

Par exemple si on défini nPage a 100 et que la ScrollBar a un Min de 0 et un Max de 1000, la taille de la ScrollBox fera un dixième de la taille de la ScrollBar.

Apparemment il y aurait un minimum, c'est a dire que si on défini nPage à 1, la ScrollBox ne s'adapte pas exactement a la taille, elle reste a une taille convenable pour être saisie.

Autres fonctions

func.inc
function SetScrollPos(hWnd:HWND; nBar:longint; nPos:longint; bRedraw:WINBOOL):longint; external 'user32' name 'SetScrollPos';
function GetScrollPos(hWnd:HWND; nBar:longint):longint; external 'user32' name 'GetScrollPos';
function SetScrollRange(hWnd:HWND; nBar:longint; nMinPos:longint; nMaxPos:longint; bRedraw:WINBOOL):WINBOOL; external 'user32' name 'SetScrollRange';
function GetScrollRange(hWnd:HWND; nBar:longint; lpMinPos:LPINT; lpMaxPos:LPINT):WINBOOL; external 'user32' name 'GetScrollRange';
function ShowScrollBar(hWnd:HWND; wBar:longint; bShow:WINBOOL):WINBOOL; external 'user32' name 'ShowScrollBar';
function EnableScrollBar(hWnd:HWND; wSBflags:UINT; wArrows:UINT):WINBOOL; external 'user32' name 'EnableScrollBar';
function GetScrollInfo(hWnd: HWND; BarFlag: Integer; var ScrollInfo: TScrollInfo): BOOL; external 'user32' name 'GetScrollInfo';
function SetScrollInfo(hWnd: HWND; BarFlag: Integer; const ScrollInfo: TScrollInfo; Redraw: BOOL): Integer; external 'user32' name 'SetScrollInfo';
Vous pourriez laisser un commentaire si vous étiez connecté.