Ascenseurs d'une ListIconGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Vlad
Messages : 14
Inscription : jeu. 03/juil./2008 18:47

Ascenseurs d'une ListIconGadget

Message par Vlad »

Comment récupérer la position des ascenseurs dans une ListIconGadget ?
Je ne connais pas de solution.
Merci à l'avance de votre réponse.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Ascenseurs d'une ListIconGadget

Message par falsam »

Ma réponse se base sur une api Window, ce qui n'est pas compatible avec une solution cross-platform.

L'api est GetScrollPos_

Inutile de la déclarer, c'est inclus dans Purebasic et s'emploie suivant la syntaxe suivante:
GetScrollPos_(GadgetID(Gadget.i), SbValue.i)

Gadget.i : Ton ListIconGadget
SbValue : #SB_VERT ou #SB_HORZ (Scroller Vertical ou Horizontal)

je ne sais pas si c'est la meilleurs solution mais le scroller n'étant pas gérer par la boucle évènementielle, tu devras détourner les évènements reçu par ta fenêtre à un CallBack. Cette procédure devra ensuite renvoyer les évènements à la boucle évènementielle.

Code : Tout sélectionner

Enumeration
  #Mainform
  #List
  #SBScrollPos
EndEnumeration

Procedure CallBack(hWnd, Msg, wParam, lParam)
  SetGadgetText(#SBScrollPos, "Scroll. Pos : "+Str(GetScrollPos_(GadgetID(#List), #SB_VERT)))
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(#Mainform,100,100,300,500,"ListIcon Beispiel",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#SBScrollPos, 5, 10, 100, 20, "")
ListIconGadget(#List, 5, 50, 290,400,"Item",150,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 

;Utilisation du callback
SetWindowCallback(@Callback()) 

For i=1 To 100
  AddGadgetItem(#List, -1, "Item "+Str(i)) 
Next i   
      
Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      
    Case #PB_Event_CloseWindow
      SetWindowCallback(0) ;Annulation du callback
      End
      
  EndSelect      
ForEver
 
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Ascenseurs d'une ListIconGadget

Message par falsam »

Au cas ou tu voudrais maintenant forcer le scroller à une position, tu trouveras un exemple qui utilise l'API SetScrollPos_

Code : Tout sélectionner

Enumeration
  #Mainform
  #List
  #SBScrollPos
EndEnumeration


Procedure CallBack(hWnd, Msg, wParam, lParam)
  SetGadgetText(#SBScrollPos, "Scroll. Pos : "+Str(GetScrollPos_(GadgetID(#List), #SB_VERT)))
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure

OpenWindow(#Mainform,100,100,300,500,"ListIcon Beispiel",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#SBScrollPos, 5, 10, 100, 20, "")
ListIconGadget(#List, 5, 50, 290,400,"Item",150,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 
SetWindowCallback(@Callback())

For i=1 To 100
  AddGadgetItem(#List, -1, "Item "+Str(i)) 
Next i 

;Utilisation de l'api SetScrollPos_
For i=1 To 50
  SetScrollPos_(GadgetID(#List), #SB_VERT, i, #True)
  SendMessage_(GadgetID(#List), #WM_VSCROLL, #SB_LINEDOWN,0)
  Delay(10)  
Next 
      
Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      
    Case #PB_Event_CloseWindow
      SetWindowCallback(0) ;Annulation du callback
      End
      
  EndSelect      
ForEver
 
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ascenseurs d'une ListIconGadget

Message par Le Soldat Inconnu »

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre