Page 1 sur 1

ScrollAreaGadget

Publié : dim. 17/juil./2011 18:24
par Programmes
Bonsoir à tous,

J'ai un soucis avec la commande SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y). Je suis en train de créer un programme afin de visionner des images et j'en ai un nombre important. Afin de pouvoir toutes les visionner, je dois modifier la hauteur interne de ScrollAreaGadget() mais la fonction SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y) n'accepte pas une valeur supérieure à 32270. Es-ce normal ou ai-je commis une erreur? Y-a t'il une solution?
Merçi

Code : Tout sélectionner

Enumeration
  #Scroollbar  
  #Windows2
EndEnumeration
Procedure.s EcrireIni(Menu.s,Clef.s,Valeur.s,Ini.s="")
  WritePrivateProfileString_(Menu,Clef ,Valeur,Ini)
EndProcedure
Procedure.s LireIni(Rubrique.s,Clef.s,Ini.s="")
  Value.s=Space(255) 
  IniData=GetPrivateProfileString_(Rubrique,Clef,"",@Value.s,255,Ini) 
  ProcedureReturn Value 
EndProcedure
Procedure Menu()
  OpenWindow(#Windows2,0,0,DesktopWidth(0),DesktopHeight(0)-2,"",#PB_Window_BorderLess|#PB_Window_Invisible)
  SetWindowColor(#Windows2,16698567)
  ScrollAreaGadget(#Scroollbar, 0, 20, WindowWidth(#Windows2)-10,WindowHeight(#Windows2)-20, WindowWidth(#Windows2)-31, 9000, 219, #PB_ScrollArea_BorderLess) 
  OpenGadgetList(#Scroollbar)
  ContainerGadget(1,0,0,WindowWidth(#Windows2)-31,900)
  x=10:y=0:Gadget=500
  For Compte=1 To 2500
    ImageGadget(Gadget,x,y,270,210,0)
    x+280
    If x=1410:x=10:y+220:EndIf
    Gadget+1
  Next
  CloseGadgetList()
  CloseGadgetList()
  SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y)
  ResizeGadget(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,y)
  Gadget=500
  x=10:y=0
  Repertoire.s="E:\Photos\"
  FichierIni.s=Repertoire+"Fichiers.ini"
  HideWindow(#Windows2,0)
  For Compte=1 To 500
    Image.s=LireIni("Menu",Str(Compte))
    x+280
    If x=1410:x=0:y+219:EndIf
    position=GetGadgetAttribute(#Scroollbar,#PB_ScrollArea_Y)
    If Index=20 Or Index=40 Or Index=60 Or Index=80 Or Index=100 Or Index=120 Or Index=140
      SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_Y,position+876)
    EndIf
    HideGadget(Gadget,0)
    If ReadFile(0,Repertoire+Image)
      LoadImage(Gadget,Repertoire+Image)
      ResizeImage(Gadget,270,210)
      SetGadgetState(Gadget,ImageID(Gadget))
      GadgetToolTip(Gadget,Image)
      Index+1
      Delay(50):While WindowEvent():Wend
      Gadget+1
      CloseFile(0)
    EndIf
  Next
  Debug GetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight)
EndProcedure
UseJPEGImageDecoder()
ExamineDesktops() 
Menu()
Repeat
  Event=WaitWindowEvent()
  Select Event
    Case #PB_Event_Menu ; We only have one shortcut
      Select EventMenu()
      EndSelect            
    Case #PB_Event_Gadget 
      Select EventGadget()
      EndSelect
    Default 
  EndSelect
Until Event=#PB_Event_CloseWindow

Re: ScrollAreaGadget

Publié : dim. 17/juil./2011 21:30
par Atomo
C'est normal, c'est une limitation de Windows mais je ne sais pas si on peut repousser cette limite.

Re: ScrollAreaGadget

Publié : dim. 17/juil./2011 21:56
par Thyphoon
la solution est de ne pas marcher dans ton scrollArea au pixel prêt mais a 100 pixel par exemple !

Re: ScrollAreaGadget

Publié : lun. 18/juil./2011 11:10
par Programmes
Qu'es-ce que tu entends par ne pas marcher au pixel près?

Re: ScrollAreaGadget

Publié : ven. 22/juil./2011 5:44
par Thyphoon
Désolé j'avais vu ta question, et je m'étais dit que je te répondrais plus tard, et j'ai oublié :P
alors :
et bien quand tu initialises ton scrollarea tu divises sa valeur part exemple part 100

Code : Tout sélectionner

SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y/100)
puis quand tu as besoin de ta position et bien le multiplie part 100

Code : Tout sélectionner

position=GetGadgetAttribute(#Scroollbar,#PB_ScrollArea_Y)*100
et faudra aussi a cet endroit divisé part 100 aussi

Code : Tout sélectionner

SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_Y,position+876/100)
J'ai pas testé mais ça devrais marcher !

Re: ScrollAreaGadget

Publié : ven. 22/juil./2011 20:22
par graph100
c'est bizarre ce que tu dis !

InnerHeight = taille d'affichage interne ! et les pixels ne se divisent pas en 100 !

Re: ScrollAreaGadget

Publié : ven. 22/juil./2011 20:30
par Thyphoon
graph100 a écrit :c'est bizarre ce que tu dis !

InnerHeight = taille d'affichage interne ! et les pixels ne se divisent pas en 100 !
J'ai pas testé son code ...
la seul chose que j'ai dis puisqu'il veut dépasser les limites du scrollbar
c'est de /100 les valeurs du scrollbar... et lorsqu'il voudra les lire il les multiplie part 100 ainsi il multiplie la limite du scollaera part 100 !
la seul chose c'est que le defilement se fera de 100 pixel en 100 pixel ! c'est pas compliqué quand même si ???? :?

Re: ScrollAreaGadget

Publié : ven. 22/juil./2011 20:57
par graph100
bah non ^^
mais la fonction SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y) n'accepte pas une valeur supérieure à 32270
la valeur de ScrollArea_InnerHeight n'influe pas sur les scroll bar puisque c'est des %
ce qu'il veux dépasser c'est à mon avis la valeur de la taille de l'affichage interne du gadget.

D'ailleurs pour lui répondre, je pense aussi que c'est une limitation du gadget, et qu'il devrais implémenter un truc pour n'afficher que la zone qu'il veux (donc pas un scrollarea gadget !)

Re: ScrollAreaGadget

Publié : ven. 22/juil./2011 21:40
par Thyphoon
graph100 a écrit :bah non ^^
mais la fonction SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y) n'accepte pas une valeur supérieure à 32270
la valeur de ScrollArea_InnerHeight n'influe pas sur les scroll bar puisque c'est des %
ce qu'il veux dépasser c'est à mon avis la valeur de la taille de l'affichage interne du gadget.

D'ailleurs pour lui répondre, je pense aussi que c'est une limitation du gadget, et qu'il devrais implémenter un truc pour n'afficher que la zone qu'il veux (donc pas un scrollarea gadget !)
j'ai pas regardé la doc ! et je crois que j'ai confondu scrollaera avec ScrollBar, j'ai juste voulu expliqué un principe .. mais tu as raison , et je suis bien d'accord avec toi il ne devrait afficher que la zone visible
Très fatigué moi aujourd'hui ...

Re: ScrollAreaGadget

Publié : mar. 26/juil./2011 18:13
par Anonyme2
Programmes a écrit :Bonsoir à tous,

J'ai un soucis avec la commande SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y). Je suis en train de créer un programme afin de visionner des images et j'en ai un nombre important. Afin de pouvoir toutes les visionner, je dois modifier la hauteur interne de ScrollAreaGadget() mais la fonction SetGadgetAttribute(#Scroollbar,#PB_ScrollArea_InnerHeight,y) n'accepte pas une valeur supérieure à 32270. Es-ce normal ou ai-je commis une erreur? Y-a t'il une solution?
Merçi
J'ai le même problème avec PureIconManager et depuis le début. J'ai toujours pensé à une limite de Windows.
J'avais cherché mais sans succès pour savoir si on pouvait contourner. Je suis preneur d'une solution.

Re: ScrollAreaGadget

Publié : mar. 26/juil./2011 21:14
par GallyHC
La limitation ne serais pas plutot de 32767? si c'est le cas je me dirais qu'il est comme dans la donc de PB pour les "types de variables".

Word | .w | 2 octets | -32768 à +32767

Donc c'est juste une suposition ne peu ton pas partir de -32768? Je dis peu etre une grosse bétise mais j'aissais de faire avancer :)

Cordialement,
GallyHC