Bloquer la scrollbar du bas d'une listIconGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Bloquer la scrollbar du bas d'une listIconGadget

Message 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 
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Bloquer la scrollbar du bas d'une listIconGadget

Message par Ar-S »

Avec ton 1er code, je n'ai pas de scrollbar bas qui apparait lorsque je brasse l'ascenseur jusqu'en bas.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Bloquer la scrollbar du bas d'une listIconGadget

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Bloquer la scrollbar du bas d'une listIconGadget

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Bloquer la scrollbar du bas d'une listIconGadget

Message 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.
Répondre