Page 1 sur 1

Bloquer la scrollbar du bas d'une listIconGadget

Publié : mer. 11/avr./2012 13:25
par blendman
salut

J'aimerai savoir s'il est possible de créer une listIconGadget en bloquant la scrollbar du bas ?

Car si je "tire" sur une colonne en haut, ça créer une scrollabar en bas et c'est moche.
On peut bloquer ça (le fait de tirer) ou empécher la scrollbar ?

Code : Tout sélectionner

#MainWindow =0

OpenWindow(#MainWindow,0,0,430,300,"Grille",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(0,10,10,400,150,"Nom",175,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Type",100)
AddGadgetColumn(0,2,"Nombre",100)
For i = 15 To 1 Step -1
  AddGadgetItem(0,0,"Personnage"+Chr(10)+Str(i)+Chr(10)+Str(Random(10)))
Next i
  
Repeat 
  event =WaitWindowEvent()
Until event = #PB_Event_CloseWindow
L'idée serait d'avoir un truc comme une listview, mais avec des colonnes à l'intérieur, sans pouvoir agir dessus :).

EDIT :

j'ai trouvé ce code de Gnozal avec une callback, ça marche nickel, mais ce n'est pas multi-plateforme, alors si vous connaissez une autre méthode n'hésitez pas ;).

Code : Tout sélectionner

Procedure WindowCallBack(Window, Message, wParam, lParam)
  ReturnValue = #PB_ProcessPureBasicEvents  
  Select Message     
    Case #WM_NOTIFY
      *NotifyMsgInfos.NMHEADER = lParam    
      If  *NotifyMsgInfos\hdr\code = #HDN_ITEMCHANGING      
          ReturnValue = #True
      EndIf
  EndSelect  
  ProcedureReturn ReturnValue
EndProcedure

If OpenWindow(0,0,0,320,300,"Colonne 2 invisible (largeur 0 + bloquée)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

  ListIconGadget(1,1,1,299,299,"Colonne 1", 298/4, #PB_ListIcon_MultiSelect)
  AddGadgetColumn(1, 1, "Colonne 2", 50) ; colonne 2 : largeur = 0
  AddGadgetColumn(1, 2, "Colonne 3", 298/4)
  AddGadgetColumn(1, 3, "Colonne 4", 298/4)

  For i = 1 To 10
    AddGadgetItem(1, -1, "111"+Chr(10)+ "222"+Chr(10)+"333"+Chr(10)+ "444")
  Next i
  SetWindowCallback(@WindowCallBack())

  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf 

Re: Bloquer la scrollbar du bas d'une listIconGadget

Publié : mer. 11/avr./2012 13:40
par Ar-S
Avec ton 1er code, je n'ai pas de scrollbar bas qui apparait lorsque je brasse l'ascenseur jusqu'en bas.

Re: Bloquer la scrollbar du bas d'une listIconGadget

Publié : mer. 11/avr./2012 13:44
par Kwai chang caine
Avec ton 1er code, je n'ai pas de scrollbar bas qui apparait lorsque je brasse l'ascenseur jusqu'en bas.
Le mossieu y t'as dit "Quand je tire une colonne en haut" sous entendu en ecartant sur la droite.. :D
Pour une fois que je comprend quelque chose du 1er coup :mrgreen:
mais ce n'est pas multi-plateforme
Pas facile sans les API et les callback 8O

Re: Bloquer la scrollbar du bas d'une listIconGadget

Publié : mer. 11/avr./2012 14:06
par Ar-S
Kwai chang caine a écrit :Le mossieu y t'as dit "Quand je tire une colonne en haut" sous entendu en ecartant sur la droite.. :D
hulala désolé :oops: lu trop vite.

Re: Bloquer la scrollbar du bas d'une listIconGadget

Publié : mer. 11/avr./2012 14:45
par Mesa
D'après la doc, l'événement "changer l'entete" n'est pas pris en charge, on trouve seulement ça :

Code : Tout sélectionner

Les évènements suivants sont supportés par EventType(): 
  #PB_EventType_LeftClick        : Clic avec le bouton gauche de la souris, ou une case à cocher a été utilisée.
  #PB_EventType_LeftDoubleClick  : Double-clic avec le bouton gauche de la souris
  #PB_EventType_RightClick       : Clic avec le bouton droit de la souris
  #PB_EventType_RightDoubleClick : Double-clic avec le bouton droit de la souris
  #PB_EventType_Change           : l'élément sélectionné a été changé
  #PB_EventType_DragStart        : L'utilisateur a essayé de lancer Une opération 'Glisser & Déposer'.
A priori, il n'y a aucun événement pour savoir si une colonne est en cours de changement de dimension ni même si elle a changé de dimension.

On peut bidouiller un timer, ç'est vraiment du bricolage mais ça marche.

Code : Tout sélectionner

#MainWindow =0

OpenWindow(#MainWindow,0,0,430,300,"Grille",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(0,10,10,400,150,"Nom",175,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Type",100)
AddGadgetColumn(0,2,"Nombre",100)
For i = 15 To 1 Step -1
  AddGadgetItem(0,0,"Personnage"+Chr(10)+Str(i)+Chr(10)+Str(Random(10)))
Next i

AddWindowTimer(#MainWindow, 100, 100)

Repeat
  event =WaitWindowEvent()
  If Event = #PB_Event_Timer And EventTimer() = 100
    If GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 0) <> 175
      SetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 175,0)
    EndIf 
    If GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 1) <> 100
      SetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 100,1)
    EndIf 
    If GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 2) <> 100
      SetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, 100,2)
    EndIf 
  EndIf
  
  
Until event = #PB_Event_CloseWindow
;penser à supprimer le timer
Mesa.