Listview Scroll Vertical ?? [Résolu]

cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 12 mars 2013 à 18:05 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 18 mars 2013 à 17:10
bonjour a tous

Verfier si listview le scroll vertical est afficher ou pas ?:) :) :)


Exemple function :

function VerfListScrol(Listview:tlistview):boolean;

button1 :
if VerfListScrol(listview1) then
showmessage('Scrool vertical est affichier ')
else
showmessage('Scrool vertical ni pas affichier')



Est ce que il ya une function like this ????

help me
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 17 mars 2013 à 20:47
3
Merci
Salut tous,

Ouais, le problème est mariole, que l'on utilise GetScrollInfo ou GetScrollBarInfo...
Perso, je m'y suis cassé les dents.
Heureusement, Peter Below (TeamB) nous donne la solution ici :
Re: TreeView and visibility of scrollbars
Voici son code :
Function WindowScrollbars( wnd: HWND ): TScrollStyle;
  Var
    styleflags: DWORD;
  Begin
    styleflags:= GetWindowLong( wnd, GWL_STYLE ) and
                (WS_VSCROLL or WS_HSCROLL);
    Case styleflags Of
      0        : Result := ssNone;
      WS_VSCROLL: Result := ssVertical;
      WS_HSCROLL: Result := ssHorizontal;
    Else
      Result := ssBoth;
    End; { Case }
  End; { WindowScrollbars }

Ça fonctionne au poil, il faut juste ne pas oublier d'intégrer ssBoth dans les valeurs retournées possibles :
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (WindowScrollbars(ListView1.Handle) ssVertical) or (WindowScrollbars(ListView1.Handle) ssBoth)then
    ShowMessage('la ScrollBar verticale est présente')
  else
    ShowMessage('la ScrollBar verticale est absente');
end;

Merci korgis 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de korgis
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 13 mars 2013 à 10:16
0
Merci
Salut,

Si ta listview est en viewstyle = vsReport, tu peux comparer le "VisibleRowCount" avec le "Items.Count" et déterminer ainsi si la barre de scroll vertical est affichée ou non.


Simon
Commenter la réponse de sp40
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 13 mars 2013 à 15:26
0
Merci
function IsActiveScroll: boolean;
begin
  if (Form1.ListView1.ViewStyle = VsList) or
    (Form1.ListView1.ViewStyle = VsReport) then
    Result := form1.ListView1.Items.Count > Form1.ListView1.VisibleRowCount;
end;



cantador
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 13 mars 2013 à 15:29
0
Merci
function IsActiveScroll(MyList: TListView): boolean;
begin
  with MyList do
  begin
    Result := false;
    if (ViewStyle = VsList) or
      (ViewStyle = VsReport) then
      Result := Items.Count > VisibleRowCount;
  end;
end;



cantador
Commenter la réponse de cs_cantador
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 13 mars 2013 à 15:49
0
Merci
Attention Catador...
En mode vsList, c'est une barre horizontale qui s'affiche...
Or, M. bazbazus cherche à
Verfier si listview le scroll vertical est afficher ou pas ?




Simon
Commenter la réponse de sp40
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 13 mars 2013 à 20:20
0
Merci
Salut,

ne vous compliquez pas la vie :

procedure TForm1.Button1Click(Sender: TObject);
var
 SC: TScrollInfo;
begin
  SC.cbSize := SizeOf(TSCROLLINFO);
  SC.fMask := SIF_ALL;
  if GetScrollInfo(ListView1.Handle, SB_VERT, SC) then
    ShowMessage('la ScrollBar verticale est présente')
  else
    ShowMessage('la ScrollBar verticale est absente')
end;


c'est tout

[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 13 mars 2013 à 22:39
0
Merci
Wahou !
Je n'en attendais pas moins de toi Cirec !!!
Nous ne sommes pas dignes !!!

Simon
Commenter la réponse de sp40
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 14 mars 2013 à 18:43
0
Merci
@simonpelloquin:
En mode vsList, c'est une barre horizontale qui s'affiche...

en mode VList, c'est le mode liste !

sauf bien entendu si tu réduit la fenêtre au point que les données n'ont
plus la place de s'afficher..

cantador
Commenter la réponse de cs_cantador
cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 16 mars 2013 à 14:24
0
Merci
Les deux codes marches pas
Commenter la réponse de cs_bazbazus
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 16 mars 2013 à 15:30
0
Merci
Re,

[quote=simonpelloquin]Je n'en attendais pas moins de toi Cirec !!! /quote
Merci ... ça fait toujours plaisir

[quote=bazbazus]Les deux codes marches pas/quote

Quand je donne un bout de code, il a été testé avant .... et celui-ci n'échappe pas à la règle. Il a été testé ok sous D7 & D2009 et semble également fonctionner chez simonpelloquin.

Mais en disant juste "ça ne marche pas" ça n'aide pas à comprendre ni a résoudre le problème.


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 16 mars 2013 à 18:41
0
Merci
mm c le scroll est afficher il me dit :

la ScrollBar verticale est absente
Commenter la réponse de cs_bazbazus
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 16 mars 2013 à 19:30
0
Merci
'tin faut vous tirer les vers du nez !!!!

donnez des infos !!!

le nom de ta ListView ?
quel ViewStyle (vsReport, vsList ...) ?
donne le code que tu utilises (un copié/collé de ton unité)
quelle version de Delphi ?
quelle OS ?
etc.

[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 17 mars 2013 à 10:51
0
Merci
System info =====
Delphi 7
Win 7 integral 64 BIT


Delphi Function =====
function IsActiveScroll(MyList: TListView): boolean;
begin
  with MyList do
  begin
    Result := false;
    if (ViewStyle = VsList) or
      (ViewStyle = VsReport) then
      Result := Items.Count > VisibleRowCount;
  end;
end;


Delphi Code =====
procedure Button1Click(Sender: TObject);
begin
  if IsActiveScroll(ListView1) then
    ShowMessage('la ScrollBar verticale est présente')
  else
    ShowMessage('la ScrollBar verticale est absente')
end;
Commenter la réponse de cs_bazbazus
cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 18 mars 2013 à 04:31
0
Merci
Sa marche

merci "korgis"
Commenter la réponse de cs_bazbazus
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 18 mars 2013 à 15:11
0
Merci
re,

[quote=bazbazus]Les deux codes marches pas /quote
Mais en y regardant de plus près
tu n'as même pas utilisé mon bout de code !!!!


sinon j'ai re-testé mon code:
Compilé sous D7 & D2009
et fait tourné sur XP pro, vista et Seven Pro 64
et il fonctionne parfaitement

Bref, peu importe le code utilisé pourvu qu'il soit correcte,
donc, pour finir j'ai repris le code (de Peter Below proposé par Korgis)
pour éviter un retour de fonction erroné ...
si la fonction "GetWindowLong" renvoie un résultat erroné
pour une raison quelconque,
"WindowScrollbars" retournait ssBoth !!!

function WindowScrollbars(aWndHandle: HWND ): TScrollStyle;
const
  WS_BSCROLL =  WS_VSCROLL or WS_HSCROLL;
begin
  case GetWindowLong(aWndHandle, GWL_STYLE) and WS_BSCROLL of
    WS_VSCROLL: Result := ssVertical;
    WS_HSCROLL: Result := ssHorizontal;
    WS_BSCROLL: Result := ssBoth;
  else
    Result := ssNone;
  end;
end;


le code est plus concis et plus facile à lire


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 18 mars 2013 à 15:14
0
Merci
Mais en y regardant de plus près
tu n'as même pas utilisé mon bout de code !!!!


Ah ah ah !!!!


Simon
Commenter la réponse de sp40
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 18 mars 2013 à 17:10
0
Merci
@simonpelloquin:

farceur..

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.